import { GameState, PointNodeRef, noIntent } from "../data/GameState";
import { HashSet } from "../lib/util/data_structures/hash";
import { Vector2 } from "../lib/util/geometry/vector2";
import { assertOnlyCalledOnce } from "../lib/util/misc";
import { computePlayerResourceAmounts } from "./ComputeState";
import { ZLevelGenFactory } from "./WorldGenStateFactory";
export type GameStateConfig = any;
export class GameStateFactory {
public config: GameStateConfig;
constructor(config: GameStateConfig) {
this.config = config;
}
public create(seed: number | undefined | null = undefined): GameState {
if (seed === undefined) {
assertOnlyCalledOnce("GameStateFactory.create");
}
const mySeed = seed || 0x19283;
const zLevel = new ZLevelGenFactory({}).create({
seed: mySeed,
z: 0,
startingChunks: 0,
});
const origin = new Vector2(0, 0);
const firstId = zLevel.chunks.get(origin)?.pointNodes.get(origin)?.id!;
const pointNodeRef: PointNodeRef = new PointNodeRef({
z: 0,
chunkCoord: origin,
pointNodeId: firstId,
pointNodeCoord: origin,
});
const gameState = {
worldGen: {
seed: mySeed,
zLevels: { 0: zLevel },
},
playerSave: {
// justAllocated: undefined,
activeQuest: undefined,
spSpentThisQuest: undefined,
questProgressHistory: [],
questInitialAmount: 0,
questsCompleted: [],
allocatedPointNodeSet: new HashSet([pointNodeRef]),
allocatedPointNodeHistory: [pointNodeRef],
score: 0,
},
playerUI: {
selectedPointNode: undefined,
activeTab: 0,
},
computed: {},
intent: {
activeIntent: noIntent,
newIntent: noIntent,
endedIntent: noIntent,
},
};
gameState.computed = { ...computePlayerResourceAmounts(gameState) };
return gameState;
}
}