fix: always merge evolutionTree/generators with defaults on load
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 21s
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 21s
Server saves don't store all node fields (branch, cost, effect, etc.). migrateSave now always rebuilds tree from DEFAULT_EVOLUTION_TREE, preserving unlocked state from the save. Fixes empty evolution tree.
This commit is contained in:
@@ -44,13 +44,7 @@
|
|||||||
let activeBranch = $state<Branch>('ponte');
|
let activeBranch = $state<Branch>('ponte');
|
||||||
|
|
||||||
let branchConfig = $derived(BRANCH_CONFIG[activeBranch]);
|
let branchConfig = $derived(BRANCH_CONFIG[activeBranch]);
|
||||||
let branchNodes = $derived(game.state.evolutionTree.filter((n: any) => n.branch === activeBranch));
|
let branchNodes = $derived(game.state.evolutionTree.filter((n) => n.branch === activeBranch));
|
||||||
|
|
||||||
// Debug — remove after fix confirmed
|
|
||||||
$effect(() => {
|
|
||||||
const tree = game.state.evolutionTree;
|
|
||||||
console.log('[EvolutionTree] tree length:', tree.length, 'activeBranch:', activeBranch, 'filtered:', tree.filter((n: any) => n.branch === activeBranch).length, 'first node:', tree[0] ? { id: tree[0].id, branch: tree[0].branch } : 'empty');
|
|
||||||
});
|
|
||||||
let spentDna = $derived(getSpentDna(game.state.evolutionTree));
|
let spentDna = $derived(getSpentDna(game.state.evolutionTree));
|
||||||
let hasUnlocked = $derived(spentDna > 0);
|
let hasUnlocked = $derived(spentDna > 0);
|
||||||
let resetCost = $derived(getTreeResetCost(game.state));
|
let resetCost = $derived(getTreeResetCost(game.state));
|
||||||
|
|||||||
@@ -23,6 +23,15 @@ export function migrateSave(raw: Record<string, unknown>): GameState {
|
|||||||
// Futures migrations :
|
// Futures migrations :
|
||||||
// if (version < 3) state = migrateV2toV3(state);
|
// if (version < 3) state = migrateV2toV3(state);
|
||||||
|
|
||||||
|
// Always rebuild tree & generators from defaults — the server/localStorage
|
||||||
|
// may not store all fields (branch, cost, effect, baseProduction, etc.)
|
||||||
|
state.evolutionTree = mergeEvolutionTree(
|
||||||
|
state.evolutionTree as Array<Record<string, unknown>> | undefined
|
||||||
|
);
|
||||||
|
state.generators = mergeGenerators(
|
||||||
|
state.generators as Array<Record<string, unknown>> | undefined
|
||||||
|
);
|
||||||
|
|
||||||
return state as unknown as GameState;
|
return state as unknown as GameState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user