~starkingdoms/starkingdoms

ref: 3f9784408f5c43e366106d0f547d80d9b33ffa37 starkingdoms/starkingdoms-client/src/rendering.ts -rw-r--r-- 2.6 KiB
3f978440 — ghostlyzsh attaching and despawning modules works 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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 = 50;
const PART_HEIGHT = 50;

export function startRender() {
  // hide the launch popup
  document.getElementById("server_selector")!.classList.add("hidden");
  // show the HUD
  document.getElementById("hud")!.classList.remove("hidden");
  // and chat
  document.getElementById("chat")!.classList.remove("hidden");

  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);
  (<HTMLCanvasElement>app.view).classList.add("game");

  global.rendering = {
    app: app,
    player_text_map: new Map(),
    planet_sprite_map: new Map(),
    part_sprite_map: new Map(),
  };

  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)!;
      } 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);
      }

      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);
        console.log("adding 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;
    }
  });
}