Fix total resources increasing on load

This commit is contained in:
thepaperpilot 2022-12-07 23:00:23 -06:00
parent 36f064ebd7
commit 8e8c71224a
4 changed files with 16 additions and 1 deletions

View file

@ -1,9 +1,12 @@
import { globalBus } from "game/events"; import { globalBus } from "game/events";
import { NonPersistent, Persistent, State } from "game/persistence"; import { NonPersistent, Persistent, State } from "game/persistence";
import { persistent } from "game/persistence"; import { persistent } from "game/persistence";
import player from "game/player";
import settings from "game/settings";
import type { DecimalSource } from "util/bignum"; import type { DecimalSource } from "util/bignum";
import Decimal, { format, formatWhole } from "util/bignum"; import Decimal, { format, formatWhole } from "util/bignum";
import type { ProcessedComputable } from "util/computed"; import type { ProcessedComputable } from "util/computed";
import { loadingSave } from "util/save";
import type { ComputedRef, Ref } from "vue"; import type { ComputedRef, Ref } from "vue";
import { computed, isRef, ref, unref, watch } from "vue"; import { computed, isRef, ref, unref, watch } from "vue";
@ -51,6 +54,9 @@ export function createResource<T extends State>(
export function trackBest(resource: Resource): Ref<DecimalSource> { export function trackBest(resource: Resource): Ref<DecimalSource> {
const best = persistent(resource.value); const best = persistent(resource.value);
watch(resource, amount => { watch(resource, amount => {
if (loadingSave.value) {
return;
}
if (Decimal.gt(amount, best.value)) { if (Decimal.gt(amount, best.value)) {
best.value = amount; best.value = amount;
} }
@ -61,6 +67,9 @@ export function trackBest(resource: Resource): Ref<DecimalSource> {
export function trackTotal(resource: Resource): Ref<DecimalSource> { export function trackTotal(resource: Resource): Ref<DecimalSource> {
const total = persistent(resource.value); const total = persistent(resource.value);
watch(resource, (amount, prevAmount) => { watch(resource, (amount, prevAmount) => {
if (loadingSave.value) {
return;
}
if (Decimal.gt(amount, prevAmount)) { if (Decimal.gt(amount, prevAmount)) {
total.value = Decimal.add(total.value, Decimal.sub(amount, prevAmount)); total.value = Decimal.add(total.value, Decimal.sub(amount, prevAmount));
} }

View file

@ -2,6 +2,7 @@ import projInfo from "data/projInfo.json";
import { globalBus } from "game/events"; import { globalBus } from "game/events";
import settings from "game/settings"; import settings from "game/settings";
import Decimal from "util/bignum"; import Decimal from "util/bignum";
import { loadingSave } from "util/save";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { watch } from "vue"; import { watch } from "vue";
import player from "./player"; import player from "./player";
@ -39,6 +40,8 @@ function update() {
return; return;
} }
loadingSave.value = false;
// Add offline time if any // Add offline time if any
if (player.offlineTime != undefined) { if (player.offlineTime != undefined) {
if (Decimal.gt(player.offlineTime, projInfo.offlineLimit * 3600)) { if (Decimal.gt(player.offlineTime, projInfo.offlineLimit * 3600)) {

View file

@ -1,4 +1,3 @@
import { identifier } from "@babel/types";
import { isArray } from "@vue/shared"; import { isArray } from "@vue/shared";
import { globalBus } from "game/events"; import { globalBus } from "game/events";
import type { GenericLayer } from "game/layers"; import type { GenericLayer } from "game/layers";

View file

@ -5,6 +5,7 @@ import player, { stringifySave } from "game/player";
import settings, { loadSettings } from "game/settings"; import settings, { loadSettings } from "game/settings";
import LZString from "lz-string"; import LZString from "lz-string";
import { ProxyState } from "util/proxies"; import { ProxyState } from "util/proxies";
import { ref } from "vue";
export function setupInitialStore(player: Partial<PlayerData> = {}): Player { export function setupInitialStore(player: Partial<PlayerData> = {}): Player {
return Object.assign( return Object.assign(
@ -88,8 +89,11 @@ export function getUniqueID(): string {
return id; return id;
} }
export const loadingSave = ref(false);
export async function loadSave(playerObj: Partial<PlayerData>): Promise<void> { export async function loadSave(playerObj: Partial<PlayerData>): Promise<void> {
console.info("Loading save", playerObj); console.info("Loading save", playerObj);
loadingSave.value = true;
const { layers, removeLayer, addLayer } = await import("game/layers"); const { layers, removeLayer, addLayer } = await import("game/layers");
const { fixOldSave, getInitialLayers } = await import("data/projEntry"); const { fixOldSave, getInitialLayers } = await import("data/projEntry");