import createDebug from "debug"; import { ClientHub, hub_connect } from "../../hub.ts"; import "../../css/style.scss"; import "../../css/themes/catppuccin-mocha.scss"; import { Part, Planet } from "../../protocol.ts"; import * as PIXI from "pixi.js"; import { addMessage } from "../../chat.ts"; import { loadConfig } from "../../config.ts"; export interface GlobalData { client: ClientHub | null; me: GlobalMe | null; players_map: Map; inverse_players_map: Map; planets_map: Map; parts_map: Map; up: boolean; down: boolean; left: boolean; right: boolean; rendering: GlobalRendering | null; } export interface GlobalRendering { app: PIXI.Application; player_text_map: Map; planet_sprite_map: Map; part_sprite_map: Map; } export interface GlobalMe { username: string; part_id: number; } export const global: GlobalData = { client: null, me: null, players_map: new Map(), inverse_players_map: new Map(), planets_map: new Map(), parts_map: new Map(), up: false, down: false, left: false, right: false, rendering: null, }; async function init() { (window as any).__initialized = true; // @ts-ignore init = undefined; const config = await loadConfig(); const logger = createDebug("main"); logger( `Hello, world! StarKingdoms ${APP_VERSION} (${COMMIT_HASH}) at your service!`, ); logger("Current view: /play"); document.getElementById("footer-left")!.innerHTML = `StarKingdoms Client ${APP_VERSION} (${COMMIT_HASH})`; addMessage("server-message", "Connecting to the game server..."); let params = new URLSearchParams(window.location.search); if (!params.has("srv")) { addMessage( "server-error", "Server ID missing. Redirecting to main menu in 5 seconds.", ); setTimeout(() => { window.location.href = "/"; }, 5000); return; } if (!params.has("username")) { addMessage( "server-error", "Username missing. Redirecting to main menu in 5 seconds.", ); setTimeout(() => { window.location.href = "/"; }, 5000); return; } let server_id = params.get("srv")!; let username = params.get("username")!; let server = config.servers[server_id]; await hub_connect(server.clientHubUrl, username); } if ((window as any).__initialized === undefined) { init(); } export function player(): Part | undefined { if (global.me !== null) { return global.parts_map.get(global.me!.part_id); } else { return undefined; } }