~starkingdoms/starkingdoms

7088ec144bd43d3655e1e4106368de68f194cc67 — core 2 years ago 25438b3
fix pixi perf issues
2 files changed, 43 insertions(+), 11 deletions(-)

M starkingdoms-client/src/hub.ts
M starkingdoms-client/src/rendering.ts
M starkingdoms-client/src/hub.ts => starkingdoms-client/src/hub.ts +25 -1
@@ 180,7 180,27 @@ export async function hub_connect(
      } else if (packet.t == PacketType.PartPositions) {
        let p = <PartPositionsPacket>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 = <PlayerLeavePacket>packet.c;


@@ 217,3 237,7 @@ export async function hub_connect(
  };
  return null;
}

function playerspace(x, y) {
  // player is center of screen
}

M starkingdoms-client/src/rendering.ts => starkingdoms-client/src/rendering.ts +18 -10
@@ 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(<HTMLCanvasElement>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;
    }
  });
}