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<number, string>;
inverse_players_map: Map<string, number>;
planets_map: Map<number, Planet>;
parts_map: Map<number, Part>;
up: boolean;
down: boolean;
left: boolean;
right: boolean;
rendering: GlobalRendering | null;
}
export interface GlobalRendering {
app: PIXI.Application;
player_text_map: Map<number, PIXI.Text>;
planet_sprite_map: Map<number, PIXI.Sprite>;
part_sprite_map: Map<number, PIXI.Sprite>;
}
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;
}
}