feat: screen manager

This commit is contained in:
2025-12-13 18:28:53 +01:00
parent 33f918995b
commit 92f5c83e36
5 changed files with 118 additions and 21 deletions

35
src/screen-manager.ts Normal file
View File

@@ -0,0 +1,35 @@
import type { Screen, ScreenContext } from "./screen";
export class ScreenManager {
private currentScreen: Screen;
private context: ScreenContext;
constructor(initialScreen: Screen) {
this.currentScreen = initialScreen;
this.context = {
navigate: (screen: Screen) => {
this.currentScreen = screen;
},
};
}
renderTop(ctx: CanvasRenderingContext2D) {
ctx.clearRect(0, 0, 256, 192);
ctx.save();
this.currentScreen.renderTop(ctx);
ctx.restore();
}
renderBottom(ctx: CanvasRenderingContext2D) {
ctx.clearRect(0, 0, 256, 192);
ctx.save();
this.currentScreen.renderBottom(ctx);
ctx.restore();
}
handleTouch(x: number, y: number) {
if (this.currentScreen.handleTouch) {
this.currentScreen.handleTouch(x, y, this.context);
}
}
}