A hackable template for creating small and fast browser games.
at main 75 lines 2.7 kB view raw
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}