trainsim/state/states/LoadState.ts

52 lines
1.4 KiB
TypeScript

import { bootstrapInputs } from "../../inputs.ts";
import { setContextItem } from "../../lib/context.ts";
import { InputManager } from "../../lib/input.ts";
import { ResourceManager } from "../../lib/resources.ts";
import { StraightTrack } from "../../track/shapes.ts";
import { TrackSystem } from "../../track/system.ts";
import { State } from "../machine.ts";
import { States } from "./index.ts";
export class LoadState extends State<States> {
override name: States = States.LOAD;
override validTransitions: Set<States> = new Set([
States.RUNNING,
]);
override update(): void {
// noop
}
override start(): void {
const track = this.loadTrack() ?? new TrackSystem([new StraightTrack()]);
setContextItem("track", track);
const trains = this.loadTrains() ?? [];
setContextItem("trains", trains);
const resources = new ResourceManager();
setContextItem("resources", resources);
const inputManager = new InputManager();
setContextItem("inputManager", inputManager);
bootstrapInputs();
this.stateMachine.transitionTo(States.RUNNING);
}
override stop(): void {
// noop
}
private loadTrack() {
const track = TrackSystem.deserialize(
JSON.parse(localStorage.getItem("track") || "[]"),
);
return track;
}
private loadTrains() {
const trains = JSON.parse(localStorage.getItem("trains") || "[]");
return trains;
}
}