~starkingdoms/starkingdoms

ref: 9ed156ba674106ec3e0676fab20b236fd10d2eda starkingdoms/starkingdoms-client/src/rendering.ts -rw-r--r-- 2.3 KiB
9ed156ba — core initial work on pixijs 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
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;

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,
  });
  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(() => {
    // RENDER STAGE 1: UPDATE POSITION
    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;

      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!.app.stage.addChild(planet_sprite);
      }

      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;
    }
    // RENDER STAGE 3: 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!.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;
      }
    }
  });
}