From dd0476cfcd59c8bf233150c2efd873fa9233f241 Mon Sep 17 00:00:00 2001 From: Takuma Kira Date: Sat, 20 Apr 2024 01:41:22 +0900 Subject: [PATCH] [dev]: Define explicitly types inside game logic --- www/src/game-of-life/index.d.ts | 19 +++++++++++++++++-- www/src/game-of-life/index.ts | 8 ++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/www/src/game-of-life/index.d.ts b/www/src/game-of-life/index.d.ts index 3e275f8..97dd28c 100644 --- a/www/src/game-of-life/index.d.ts +++ b/www/src/game-of-life/index.d.ts @@ -1,3 +1,18 @@ +type BGModule = {} +type WASMModule = { memory: WebAssembly.Memory } + declare module 'wasm-game-of-life/wasm_game_of_life_bg.wasm' { - export default function wasm(importObject: { './wasm_game_of_life_bg.js': any }): Promise -} \ No newline at end of file + export default function wasm(importObject: { './wasm_game_of_life_bg.js': BGModule }): Promise +} + +declare module 'wasm-game-of-life/wasm_game_of_life_bg.js' { + import { Universe, Cell } from "wasm-game-of-life" + + function __wbg_set_wasm(wasm: WASMModule): void + + export { + __wbg_set_wasm, + Universe, + Cell, + } +} diff --git a/www/src/game-of-life/index.ts b/www/src/game-of-life/index.ts index 906e8c1..533a057 100644 --- a/www/src/game-of-life/index.ts +++ b/www/src/game-of-life/index.ts @@ -1,14 +1,15 @@ +/// import wasm from "wasm-game-of-life/wasm_game_of_life_bg.wasm"; import * as bg from "wasm-game-of-life/wasm_game_of_life_bg.js" -export default function run(canvas) { +export default function run(canvas: HTMLCanvasElement): void { wasm({'./wasm_game_of_life_bg.js': bg}).then(wasm => { bg.__wbg_set_wasm(wasm) main(bg.Universe, bg.Cell, wasm.memory, canvas) }) } -function main(Universe, Cell, memory, canvas) { +function main(Universe: typeof bg.Universe, Cell: typeof bg.Cell, memory: WebAssembly.Memory, canvas: HTMLCanvasElement) { const CELL_SIZE = 5; // px const GRID_COLOR = "#CCCCCC"; const DEAD_COLOR = "#FFFFFF"; @@ -25,6 +26,9 @@ function main(Universe, Cell, memory, canvas) { canvas.width = (CELL_SIZE + 1) * width + 1; const ctx = canvas.getContext('2d'); + if (ctx === null) { + throw new Error("canvas 2d context not found") + } const fps = new class { fps: HTMLDivElement;