import * as PIXI from "pixi.js"; import { global, player } from "./globals.ts"; import { part_texture_url, planet_texture_url } from "./textures.ts"; const PART_WIDTH = 50; const PART_HEIGHT = 50; export function startRender() { let app = new PIXI.Application({ width: window.innerWidth, height: window.innerHeight, resizeTo: window, hello: true, }); (globalThis as any).__PIXI_APP__ = app; // eslint-disable-line document .getElementById("gamewindow")! .appendChild(app.view); (app.view).classList.add("game"); global.rendering = { app: app, player_text_map: new Map(), planet_sprite_map: new Map(), part_sprite_map: new Map(), part_sprites_need_texture_change: [], }; app.ticker.add(() => { global.rendering!.app.stage.x = -player()?.transform.x! + window.innerWidth / 2; global.rendering!.app.stage.y = -player()?.transform.y! + window.innerHeight / 2; for (let [id, part] of global.parts_map) { let part_sprite; if (global.rendering!.part_sprite_map.has(id)) { part_sprite = global.rendering!.part_sprite_map.get(id)!; if (global.rendering!.part_sprites_need_texture_change.includes(id)) { // slow :( part_sprite.texture = PIXI.Texture.from( part_texture_url(part.part_type, part.flags.attached), ); } } else { part_sprite = PIXI.Sprite.from( part_texture_url(part.part_type, part.flags.attached), ); global.rendering!.part_sprite_map.set(id, part_sprite); global.rendering!.app.stage.addChild(part_sprite); } part_sprite.anchor.set(0.5); part_sprite.height = PART_HEIGHT; part_sprite.width = PART_WIDTH; part_sprite.x = part.transform.x; part_sprite.y = part.transform.y; part_sprite.rotation = part.transform.rot; } for (let [id, planet] of global.planets_map) { let planet_sprite; if (global.rendering!.planet_sprite_map.has(id)) { planet_sprite = global.rendering!.planet_sprite_map.get(id)!; } else { planet_sprite = PIXI.Sprite.from( planet_texture_url(planet.planet_type), ); global.rendering!.planet_sprite_map.set(id, planet_sprite); global.rendering!.app.stage.addChild(planet_sprite); } planet_sprite.anchor.set(0.5); planet_sprite.height = planet.radius * 2; planet_sprite.width = planet.radius * 2; planet_sprite.x = planet.transform.x; planet_sprite.y = planet.transform.y; planet_sprite.rotation = planet.transform.rot; } }); }