trainsim/state/states.ts
2025-02-05 04:00:40 -07:00

140 lines
3.2 KiB
TypeScript

import { State } from "./machine.ts";
enum States {
LOAD,
RUNNING,
PAUSED,
EDIT_TRACK,
EDIT_TRAIN,
}
export class LoadState extends State<States> {
override name: States = States.LOAD;
override validTransitions: Set<States> = new Set([
States.RUNNING,
]);
override update(dt: number): void {
throw new Error("Method not implemented.");
// TODO
// Do nothing
}
override start(): void {
throw new Error("Method not implemented.");
// TODO
// load track into context
// Load trains into context
// Load resources into context
// Switch to running state
}
override stop(): void {
throw new Error("Method not implemented.");
// TODO
// Do nothing
}
}
export class RunningState extends State<States> {
override name: States = States.RUNNING;
override validTransitions: Set<States> = new Set([
States.PAUSED,
States.EDIT_TRACK,
]);
override update(dt: number): void {
throw new Error("Method not implemented.");
// TODO
// Update trains
// Update world
// Handle input
// Draw (maybe via a layer system that syncs with doodler)
// Monitor world events
}
override start(): void {
throw new Error("Method not implemented.");
// TODO
// Do nothing
}
override stop(): void {
throw new Error("Method not implemented.");
// TODO
// Do nothing
}
}
export class PausedState extends State<States> {
override name: States = States.PAUSED;
override validTransitions: Set<States> = new Set([
States.LOAD,
States.RUNNING,
States.EDIT_TRACK,
States.EDIT_TRAIN,
]);
override update(dt: number): void {
throw new Error("Method not implemented.");
// TODO
// Handle input
// Draw ui
}
override start(): void {
throw new Error("Method not implemented.");
// TODO
// Save tracks to cache
// Save trains to cache
// Save resources to cache
}
override stop(): void {
throw new Error("Method not implemented.");
// TODO
// Do nothing
}
}
export class EditTrackState extends State<States> {
override name: States = States.EDIT_TRACK;
override validTransitions: Set<States> = new Set([
States.RUNNING,
States.PAUSED,
]);
override update(dt: number): void {
throw new Error("Method not implemented.");
// TODO
// Handle input
// Draw ui
// Draw track
// Draw track points
// Draw track tangents
}
override start(): void {
throw new Error("Method not implemented.");
// TODO
// Cache trains and save
// Stash track in context
}
override stop(): void {
throw new Error("Method not implemented.");
}
}
export class EditTrainState extends State<States> {
override name: States = States.EDIT_TRAIN;
override validTransitions: Set<States> = new Set([
States.RUNNING,
States.PAUSED,
]);
override update(dt: number): void {
throw new Error("Method not implemented.");
}
override start(): void {
throw new Error("Method not implemented.");
// TODO
// Cache trains
// Stash train in context
// Draw track
// Draw train (filtered by train ID)
}
override stop(): void {
throw new Error("Method not implemented.");
}
}