base2020/src/Game/Main.ts

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2020-02-16 05:01:30 +00:00
import subscribe from "callbag-subscribe";
import { KeyControl, KeyName } from "../Applet/Keyboard";
import { DrawSet } from "../Applet/Render";
import { Location, Polygon, RenderBounds } from "../Ecs/Components";
import { Create } from "../Ecs/Data";
import { RunRenderBounds } from "../Ecs/Renderers";
import { LockstepClient } from "../Net/LockstepClient";
2020-02-16 05:42:58 +00:00
import { Loopback } from "../Net/LoopbackServer";
2020-02-16 05:01:30 +00:00
import { Data, Engine } from "./GameComponents";
import { Buttons } from "./Input";
export class Main extends LockstepClient<KeyName[], Data> {
buttons = new Buttons();
constructor(canvas: HTMLCanvasElement, cx: CanvasRenderingContext2D, keys: KeyControl) {
super(new Engine());
keys.setHandler(this.buttons);
2020-02-16 05:42:58 +00:00
this.connect(Loopback);
2020-02-16 05:01:30 +00:00
subscribe((frame: Data) => {
const drawSet = new DrawSet();
2020-03-26 04:29:32 +00:00
cx.fillStyle = "#000";
cx.fillRect(0, 0, canvas.width, canvas.height);
2020-02-16 05:01:30 +00:00
RunRenderBounds(frame, drawSet);
drawSet.draw(cx, 0);
})(this.renderFrames);
}
gatherInput() {
return this.buttons.getPressed();
}
initState(patch: Partial<Data>) {
const newState = new Data();
Create(newState, {
location: new Location({
X: 200,
Y: 200,
}),
bounds: new Polygon([-30, 0, 30, 0, 0, 40]),
renderBounds: new RenderBounds("#a0f", 0),
});
return newState;
}
}