From 7088ec144bd43d3655e1e4106368de68f194cc67 Mon Sep 17 00:00:00 2001 From: core Date: Mon, 27 Nov 2023 18:20:01 -0500 Subject: [PATCH] fix pixi perf issues --- starkingdoms-client/src/hub.ts | 26 +++++++++++++++++++++++++- starkingdoms-client/src/rendering.ts | 28 ++++++++++++++++++---------- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/starkingdoms-client/src/hub.ts b/starkingdoms-client/src/hub.ts index 05ab0c622e423432dc7ce28404fdca27417f6eed..c0d4bb190591fef996aa0cb1109becb5a5e51544 100644 --- a/starkingdoms-client/src/hub.ts +++ b/starkingdoms-client/src/hub.ts @@ -180,7 +180,27 @@ export async function hub_connect( } else if (packet.t == PacketType.PartPositions) { let p = packet.c; for (let i = 0; i < p.parts.length; i++) { - global.parts_map.set(p.parts[i][0], p.parts[i][1]); + let id = p.parts[i][0]; + let new_part = p.parts[i][1]; + + if (global.parts_map.has(id)) { + let old_part = global.parts_map.get(id)!; + let dx = new_part.transform.x - old_part.transform.x; + let dy = new_part.transform.y - old_part.transform.y; + let drot = new_part.transform.rot - old_part.transform.rot; + const CUTOFF_XY = 0.01; + const CUTOFF_ROT = 0.01; + if (dx < CUTOFF_XY && dy < CUTOFF_XY && drot < CUTOFF_ROT) { + continue; // this packet is under the cutoff, we don't care about it + } + } + global.parts_map.set(id, new_part); + if (id === global.me?.part_id) { + document.getElementById("pos-val-x")!.innerText = + new_part.transform.x.toString(); + document.getElementById("pos-val-y")!.innerText = + new_part.transform.y.toString(); + } } } else if (packet.t == PacketType.PlayerLeave) { let p = packet.c; @@ -217,3 +237,7 @@ export async function hub_connect( }; return null; } + +function playerspace(x, y) { + // player is center of screen +} diff --git a/starkingdoms-client/src/rendering.ts b/starkingdoms-client/src/rendering.ts index 57060d274ca2fe9e540da5cdac7699401bf176dd..e675e96feca9b79142b9775e1feedd53f8a64525 100644 --- a/starkingdoms-client/src/rendering.ts +++ b/starkingdoms-client/src/rendering.ts @@ -2,8 +2,8 @@ import * as PIXI from "pixi.js"; import { global, player } from "./main.ts"; import { part_texture_url, planet_texture_url } from "./textures.ts"; -const PART_WIDTH = 25; -const PART_HEIGHT = 25; +const PART_WIDTH = 50; +const PART_HEIGHT = 50; export function startRender() { // hide the launch popup @@ -16,7 +16,12 @@ 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); @@ -31,7 +36,7 @@ export function startRender() { app.ticker.add(() => { // RENDER STAGE 1: UPDATE POSITION - app.stage.setTransform(player()?.transform.x!, player()?.transform.y!); + app.stage.setTransform(-player()?.transform.x!, -player()?.transform.y!); // RENDER STAGE 2: UPDATE SPRITES for (let [id, planet] of global.planets_map) { let planet_sprite; @@ -42,7 +47,9 @@ export function startRender() { 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); + console.log("adding planet sprite"); } planet_sprite.height = planet.radius * 2; @@ -59,15 +66,16 @@ export function startRender() { part_sprite = global.rendering!.part_sprite_map.get(id)!; } else { part_sprite = PIXI.Sprite.from(part_texture_url(part.part_type)); + global.rendering!.part_sprite_map.set(id, part_sprite); + console.log("adding part sprite"); global.rendering!.app.stage.addChild(part_sprite); - - console.log(part.transform); - 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; } + + 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; } }); }