trainsim/main.ts

63 lines
1.4 KiB
TypeScript

import {
getContext,
getContextItem,
setContextItem,
setDefaultContext,
} from "./lib/context.ts";
import { InputManager } from "./lib/input.ts";
import { Doodler, Vector, ZoomableDoodler } from "@bearmetal/doodler";
import { ResourceManager } from "./lib/resources.ts";
import { addButton } from "./ui/button.ts";
import { TrackSystem } from "./track/system.ts";
import { StraightTrack } from "./track/shapes.ts";
import { StateMachine } from "./state/machine.ts";
import { bootstrapGameStateMachine } from "./state/states/index.ts";
const inputManager = new InputManager();
const resources = new ResourceManager();
const doodler = new ZoomableDoodler({
fillScreen: true,
bg: "#302040",
});
// doodler.minScale = 0.1;
// (doodler as any).scale = doodler.maxScale;
const colors = [
"red",
"orange",
"yellow",
"green",
"blue",
"indigo",
"purple",
"violet",
];
setDefaultContext({
inputManager,
doodler,
resources,
debug: true,
showEnds: true,
colors,
});
const state = bootstrapGameStateMachine();
setContextItem("state", state);
doodler.init();
doodler.createLayer((_, __, dTime) => {
state.update(dTime);
});
document.addEventListener("keydown", (e) => {
if ((e.ctrlKey || e.metaKey) && e.key === "s") {
e.preventDefault();
const track = getContextItem<TrackSystem>("track");
localStorage.setItem("track", track.serialize());
console.log("Saved track to local storage");
}
});