~starkingdoms/starkingdoms

ref: e1f7bf73fc34fd47b7382d3970811a03a58d637c starkingdoms/starkingdoms-client/src/rendering.ts -rw-r--r-- 2.7 KiB
e1f7bf73 — core rendering failure 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.stage.scale.set(0.4, 0.4);

  app.ticker.add(() => {
    let camera_x = -player()?.transform.x!;
    let camera_y = -player()?.transform.y!;
    // RENDER STAGE 1: UPDATE SPRITES
    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);
        console.log("adding planet sprite");
      }

      console.log(planet);
      planet_sprite.height = planet.radius * 2;
      planet_sprite.width = planet.radius * 2;
      planet_sprite.x = planet.transform.x - planet.radius - camera_x;
      planet_sprite.y = planet.transform.y - planet.radius - camera_y;
      planet_sprite.rotation = planet.transform.rot;
    }
    // RENDER STAGE 2: UPDATE PARTS
    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.height = PART_HEIGHT;
      part_sprite.width = PART_WIDTH;
      part_sprite.x = part.transform.x - PART_WIDTH - camera_x;
      part_sprite.y = part.transform.y - PART_HEIGHT - camera_y;
      part_sprite.rotation = part.transform.rot;
    }
  });
}