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 { DotFollower } from "../../train/newTrain.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 }; // const ctx = getContext() as { trains: DotFollower[]; track: TrackSystem }; const input = getContextItem("inputManager"); // 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) { // if (input.getKeyState("ArrowUp")) { // train.acceleration.x += 10; // } 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[] }; // const ctx = getContext() as { trains: DotFollower[] }; inputManager.onKey(" ", () => { // const path = track.path; // const follower = new DotFollower(path, path.points[0].copy()); // ctx.trains.push(follower); const train = new Train(track.path, [new RedEngine(), new Tender()]); ctx.trains.push(train); }); } override stop(): void { // noop } }