|
@@ -1,7 +1,9 @@
|
|
|
/** 2dUI 特效 血条 粒子等管理器*/
|
|
|
|
|
|
-import { assetManager, Prefab } from "cc";
|
|
|
+import { assetManager, instantiate, Prefab, Node, UITransform, Vec3 } from "cc";
|
|
|
import { resLoader } from "db://assets/core_tgx/base/ResLoader";
|
|
|
+import { StormSunderGlobalInstance } from "../StormSunderGlobalInstance";
|
|
|
+import { BloodComponent } from "../Component/BloodComponent";
|
|
|
|
|
|
export class Effect2DUIMgr {
|
|
|
private static _instance: Effect2DUIMgr;
|
|
@@ -16,9 +18,40 @@ export class Effect2DUIMgr {
|
|
|
return this.Instance;
|
|
|
}
|
|
|
|
|
|
- //添加血条到对应道具上方
|
|
|
- async addBloodBarToProp() {
|
|
|
- const blood = await resLoader.loadAsync(resLoader.gameBundleName, "Prefabs/Blood");
|
|
|
+ private bloodMap: Map<Node, Node> = new Map(); // 存储节点与对应血条的映射
|
|
|
+
|
|
|
+ async showBlood(target: Node, hpPercent: number) {
|
|
|
+ let bloodNode = this.bloodMap.get(target) as any;
|
|
|
+
|
|
|
+ if (!bloodNode) {
|
|
|
+ // 加载血条预制体
|
|
|
+ const bloodPrefab = await resLoader.loadAsync(resLoader.gameBundleName, "Prefabs/Blood");
|
|
|
+ bloodNode = instantiate(bloodPrefab);
|
|
|
+
|
|
|
+ // 添加到全局UI节点下
|
|
|
+ bloodNode.parent = StormSunderGlobalInstance.instance.bloodUI;
|
|
|
+
|
|
|
+ // 设置血条位置跟随目标
|
|
|
+ const worldPos = target.worldPosition.clone();
|
|
|
+ bloodNode.setWorldPosition(worldPos.x, worldPos.y + 100, worldPos.z);
|
|
|
+
|
|
|
+ this.bloodMap.set(target, bloodNode);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新血量显示
|
|
|
+ const bloodComp = bloodNode.getComponent(BloodComponent);
|
|
|
+ if (bloodComp) {
|
|
|
+ bloodComp.updateHP(hpPercent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 清理血条
|
|
|
+ removeBlood(target: Node) {
|
|
|
+ const bloodNode = this.bloodMap.get(target);
|
|
|
+ if (bloodNode) {
|
|
|
+ bloodNode.destroy();
|
|
|
+ this.bloodMap.delete(target);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|