refactor:

- add single point of entry for all per-frame updates (GameLoop), add centralized event system (GameEvents). Controllers emit events instead of calling each other directly.
- remove unused images, optimize path and imports
- rework font usege with using template method
This commit is contained in:
24Play-Mykyta-Slobodianiuk
2026-06-09 12:44:11 +03:00
parent 78d85c3799
commit 2238880bf6
40 changed files with 246 additions and 107 deletions
+11 -4
View File
@@ -1,12 +1,14 @@
import { Box3, DoubleSide, Group, Material, Mesh, Object3D, Vector3 } from "three";
import * as TWEEN from "@tweenjs/tween.js";
import { UpdateController, CameraC_internal } from "@24tools/playable_template";
import { CameraC_internal } from "@24tools/playable_template";
import { ThreeC } from "./ThreeC";
import { GameEvents } from "../core/GameEvents";
import { GameLoop } from "../core/GameLoop";
import type { Crate } from "./LootableC";
// --- Placement ---
const HEIGHT_ABOVE = 1.4; // world Y offset of the bar above the crate origin
const BAR_SCALE = 1.2; // world scale of the cloned bar (prototype is ~1m wide)
const HEIGHT_ABOVE = 1.4; // world Y offset of the bar above the crate origin
const BAR_SCALE = 1.2; // world scale of the cloned bar (prototype is ~1m wide)
// --- Fill animation ---
const FOREGROUND_MS = 120; // Foreground (current health) drops fast — animates first
@@ -54,7 +56,12 @@ export class HealthBarC {
return;
}
this.protoNode = prototype;
UpdateController.Instance.onUpdate.addDelegate((delta: number) => this.update(delta));
// Listen for health display events
GameEvents.onHealthDisplay.addDelegate(({ crate, healthFraction }) => this.showDamage(crate, healthFraction));
GameEvents.onHealthHide.addDelegate((crate) => this.hide(crate));
GameLoop.register((delta: number) => this.update(delta));
}
/** Show/refresh the bar for a crate at the given health fraction (0..1). */