import * as PIXI from "pixi.js";
import {Logger, logSetup} from "./logger";
import {gateway_connect, GatewayClient} from "./gateway";
import {Player} from "./protocol/player";
import {Planet} from "./protocol/planet";
logSetup();
const logger = new Logger("client");
export interface GlobalData {
client: GatewayClient | null,
players: Player[],
planets: Planet[],
me: Player | null,
spritesheet: PIXI.Spritesheet | null,
app: PIXI.Application | null
}
export const global: GlobalData = {
client: null,
players: [],
planets: [],
me: null,
spritesheet: null,
app: null
}
async function client_main(server: string, username: string, texture_quality: string) {
logger.info("StarKingdoms client - starting");
logger.info("Loading textures");
let spritesheet_url = `/assets/dist/spritesheet-${texture_quality}.png`;
let spritesheet_data_url = `/assets/dist/spritesheet-${texture_quality}.json`;
let load_textures = new Promise<void>(async (resolve) => {
const image_promise: Promise<HTMLImageElement> = new Promise((resolve, reject) => {
const image = document.createElement("img");
image.src = spritesheet_url;
image.onload = () => { resolve(image); }
image.onerror = err => reject(err);
});
const dat_promise: Promise<Object> = fetch(spritesheet_data_url).then(res => res.json());
let image = await image_promise;
let data = await dat_promise;
let texture = PIXI.Texture.from(image);
global.spritesheet = new PIXI.Spritesheet(texture, data as any);
await global.spritesheet.parse();
resolve();
});
await load_textures;
logger.info("Starting the renderer");
global.app = new PIXI.Application({width: window.innerWidth, height: window.innerHeight, resizeTo: window });
// @ts-ignore
document.body.appendChild(global.app.view);
console.log(global.spritesheet);
// @ts-ignore
let sprite = PIXI.Sprite.from(global.spritesheet?.textures["hearty.png"]);
global.app.stage.addChild(sprite);
global.client = await gateway_connect(server, username);
}
client_main("ws://localhost:3000/ws", "core", "375").then(() => {});
/*
let app = new PIXI.Application({width: window.innerWidth, height: window.innerHeight, resizeTo: window });
// @ts-ignore
document.body.appendChild(app.view);
let sprite = PIXI.Sprite.from("./hearty.png");
app.stage.addChild(sprite);
let elapsed = 0.0;
app.ticker.add((delta) => {
elapsed += delta;
sprite.x = 100.0 + Math.cos(elapsed/50.0) * 100.0;
});
*/