import { getContext, getContextItem } from "../../lib/context.ts"; import { InputManager } from "../../lib/input.ts"; import { TrackSystem } from "../../track/system.ts"; import { Tender } from "../../train/cars.ts"; import { RedEngine } from "../../train/engines.ts"; import { Train } from "../../train/train.ts"; import { State } from "../machine.ts"; import { States } from "./index.ts"; export class RunningState extends State { override name: States = States.RUNNING; override validTransitions: Set = new Set([ States.PAUSED, States.EDIT_TRACK, ]); override update(dt: number): void { const ctx = getContext() as { trains: Train[]; track: TrackSystem }; // TODO // Update trains // Update world // Handle input // Draw (maybe via a layer system that syncs with doodler) ctx.track.draw(); for (const train of ctx.trains) { train.move(dt); train.draw(); } // Monitor world events } override start(): void { // noop const inputManager = getContextItem("inputManager"); const track = getContextItem("track"); const ctx = getContext() as { trains: Train[] }; inputManager.onKey(" ", () => { const train = new Train(track.path, [new RedEngine(), new Tender()]); ctx.trains.push(train); }); } override stop(): void { // noop } }