A hackable template for creating small and fast browser games.
1import {Game3D} from "../lib/game.js";
2import {Entity} from "../lib/world.js";
3import {MAX_FORWARD_LIGHTS} from "../materials/light.js";
4import {mat_forward_colored_gouraud} from "../materials/mat_forward_colored_gouraud.js";
5import {mat_forward_colored_line} from "../materials/mat_forward_colored_unlit.js";
6import {mesh_cube} from "../meshes/cube.js";
7import {mesh_terrain} from "../meshes/terrain.js";
8import {sys_camera} from "./systems/sys_camera.js";
9import {sys_collide} from "./systems/sys_collide.js";
10import {sys_control_dolly} from "./systems/sys_control_dolly.js";
11import {sys_control_keyboard} from "./systems/sys_control_keyboard.js";
12import {sys_control_mouse_drag} from "./systems/sys_control_mouse_drag.js";
13import {sys_control_player} from "./systems/sys_control_player.js";
14import {sys_control_touch_drag} from "./systems/sys_control_touch_drag.js";
15import {sys_draw} from "./systems/sys_draw.js";
16import {sys_highlight} from "./systems/sys_highlight.js";
17import {sys_light} from "./systems/sys_light.js";
18import {sys_move} from "./systems/sys_move.js";
19import {sys_nav} from "./systems/sys_nav.js";
20import {Picked, sys_pick} from "./systems/sys_pick.js";
21import {sys_render_forward} from "./systems/sys_render_forward.js";
22import {sys_resize} from "./systems/sys_resize.js";
23import {sys_select} from "./systems/sys_select.js";
24import {sys_transform} from "./systems/sys_transform.js";
25import {World} from "./world.js";
26
27export class Game extends Game3D {
28 World = new World();
29
30 MaterialColoredLine = mat_forward_colored_line(this.Gl);
31 MaterialColoredGouraud = mat_forward_colored_gouraud(this.Gl);
32
33 MeshCube = mesh_cube(this.Gl);
34 MeshTerrain = mesh_terrain(this.Gl);
35
36 LightPositions = new Float32Array(4 * MAX_FORWARD_LIGHTS);
37 LightDetails = new Float32Array(4 * MAX_FORWARD_LIGHTS);
38
39 CameraDolly = 1;
40 Picked?: Picked;
41 Selected?: Entity;
42
43 override FrameUpdate(delta: number) {
44 // Camera and picking.
45 sys_resize(this, delta);
46 sys_camera(this, delta);
47 sys_pick(this, delta);
48
49 // User input.
50 sys_control_keyboard(this, delta);
51 sys_control_mouse_drag(this, delta);
52 sys_control_touch_drag(this, delta);
53 sys_control_dolly(this, delta);
54
55 // Player order.
56 sys_control_player(this, delta);
57 sys_select(this, delta);
58 sys_highlight(this, delta);
59
60 // Game logic.
61 sys_nav(this, delta);
62 sys_move(this, delta);
63 sys_transform(this, delta);
64 sys_collide(this, delta);
65
66 // Rendering.
67 sys_light(this, delta);
68 sys_render_forward(this, delta);
69 sys_draw(this, delta);
70 }
71}
72
73export const enum Layer {
74 None = 0,
75}