feat: screen manager
This commit is contained in:
35
src/screen-manager.ts
Normal file
35
src/screen-manager.ts
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user