77 lines
2.5 KiB
TypeScript
77 lines
2.5 KiB
TypeScript
import { World } from "$/common/ecs/mod.ts";
|
|
import { MovementSystem } from "$/common/systems/movement_system.ts";
|
|
import { RenderSystem } from "$/client/systems/render_system.ts";
|
|
import { PlayerControlsSystem } from "$/client/systems/player_controls.ts";
|
|
import { DebugSystem } from "$/client/systems/debug_system.ts";
|
|
import { UIInteractionSystem } from "$/client/systems/ui_interaction_system.ts";
|
|
import { UIRenderSystem } from "$/client/systems/ui_render_system.ts";
|
|
import { create_main_menu } from "./main_menu.ts";
|
|
import { start_game } from "./game.ts";
|
|
import { canvas, resize_canvas } from "./renderer/mod.ts";
|
|
import { DimensionLogicSystem } from "./systems/dimension_logic.ts";
|
|
import { Dimension } from "./components/dimension.ts";
|
|
import { GuiRenderSystem, GuiTickSystem } from "./gui/gui_systems.ts";
|
|
import { WorldGenerationSystem } from "./systems/world_generation_system.ts";
|
|
import { CollisionSystem } from "./systems/collision_system.ts";
|
|
import { NetworkSystem } from "./systems/network_system.ts";
|
|
import { Connection } from "./network.ts";
|
|
|
|
export interface ChatLine {
|
|
text: string;
|
|
time: number;
|
|
}
|
|
|
|
export class ClientWorld extends World {
|
|
paused = false;
|
|
debugging = false;
|
|
|
|
dimension!: Dimension;
|
|
|
|
// undefined when playing single player
|
|
connection?: Connection;
|
|
chat_log: ChatLine[] = [];
|
|
|
|
constructor(connection?: Connection) {
|
|
super("game");
|
|
this.connection = connection;
|
|
|
|
this.add_state("main_menu");
|
|
this.add_state("paused");
|
|
this.add_state("game");
|
|
|
|
self.addEventListener("resize", resize_canvas);
|
|
resize_canvas();
|
|
|
|
canvas.addEventListener("contextmenu", function (event) {
|
|
event.preventDefault();
|
|
});
|
|
|
|
start_game(this);
|
|
|
|
// Logic systems
|
|
this.add_system(new UIInteractionSystem(), "main_menu");
|
|
this.add_system(new UIInteractionSystem(), "paused");
|
|
this.add_system(new NetworkSystem(), "game");
|
|
this.add_system(new GuiTickSystem(), "game");
|
|
this.add_system(new PlayerControlsSystem(), "game");
|
|
this.add_system(new WorldGenerationSystem(), "game");
|
|
this.add_system(new DimensionLogicSystem(), "game");
|
|
this.add_system(new CollisionSystem(), "game");
|
|
this.add_system(new MovementSystem(), "game");
|
|
|
|
// render systems
|
|
this.add_system(new RenderSystem(), "game");
|
|
this.add_system(new GuiRenderSystem(), "game");
|
|
this.add_system(new DebugSystem(), "game");
|
|
this.add_system(new UIRenderSystem(), "main_menu");
|
|
this.add_system(new UIRenderSystem(), "paused");
|
|
}
|
|
|
|
add_chat(text: string) {
|
|
this.chat_log.push({ text, time: performance.now() });
|
|
if (this.chat_log.length > 100) {
|
|
this.chat_log.shift();
|
|
}
|
|
}
|
|
}
|