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 { override name: States = States.LOAD; override validTransitions: Set = 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(); resources.set("engine-sprites", new Image()); resources.get("engine-sprites")!.src = "/sprites/EngineSprites.png"; resources.ready().then(() => { 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; } }