|
@@ -40,7 +40,8 @@ export class Effect2DUIMgr {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- const uiPos = GameUtil.worldToScreenLocal(target).clone();
|
|
|
+ const bloodUI = StormSunderGlobalInstance.instance.bloodUI;
|
|
|
+ const uiPos = GameUtil.worldToScreenLocal(target, bloodUI).clone();
|
|
|
// 设置位置偏移
|
|
|
const offsetY = 200;
|
|
|
const offsetX = 100;
|
|
@@ -55,21 +56,20 @@ export class Effect2DUIMgr {
|
|
|
|
|
|
/** 龙卷风添加信息预设*/
|
|
|
async addPlayerInfo(target: Node, playerInfo: PlayerInfo) {
|
|
|
+ const effectUI = StormSunderGlobalInstance.instance.effectUI;
|
|
|
+
|
|
|
// 1. 使用占位符防止重复创建
|
|
|
if (this.playerInfoMap.has(target)) {
|
|
|
const existing = this.playerInfoMap.get(target);
|
|
|
if (existing instanceof Node) {
|
|
|
- // 已有节点直接更新位置
|
|
|
- const uiPos = GameUtil.worldToScreenLocal(target);
|
|
|
- const offsetY = 250;
|
|
|
- const offsetX = 70;
|
|
|
- existing.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
|
|
|
+ this.setPlayerInfoPosition(existing, target, effectUI);
|
|
|
}
|
|
|
return; // 正在加载或已存在
|
|
|
}
|
|
|
|
|
|
// 2. 设置加载占位符
|
|
|
this.playerInfoMap.set(target, null);
|
|
|
+
|
|
|
try {
|
|
|
const infoPrefab = await resLoader.loadAsync(
|
|
|
resLoader.gameBundleName,
|
|
@@ -78,15 +78,12 @@ export class Effect2DUIMgr {
|
|
|
);
|
|
|
|
|
|
const infoNode = instantiate(infoPrefab);
|
|
|
- infoNode.parent = StormSunderGlobalInstance.instance.effectUI;
|
|
|
+ infoNode.parent = effectUI;
|
|
|
|
|
|
const playerInfoComp = infoNode.getComponent(PlayerInfoComponent);
|
|
|
playerInfoComp?.updateInfo(playerInfo);
|
|
|
|
|
|
- const uiPos = GameUtil.worldToScreenLocal(target);
|
|
|
- const offsetY = 250;
|
|
|
- const offsetX = 70;
|
|
|
- infoNode.setPosition(uiPos.x + offsetX, uiPos.y + offsetY);
|
|
|
+ this.setPlayerInfoPosition(infoNode, target, effectUI);
|
|
|
this.playerInfoMap.set(target, infoNode);
|
|
|
} catch (error) {
|
|
|
// 异常处理:移除占位符允许重试
|
|
@@ -95,6 +92,11 @@ export class Effect2DUIMgr {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private setPlayerInfoPosition(infoNode: Node, target: Node, parentUI: Node) {
|
|
|
+ const uiPos = GameUtil.worldToScreenLocal(target, parentUI);
|
|
|
+ infoNode.setPosition(uiPos.x + 70, uiPos.y + 250);
|
|
|
+ }
|
|
|
+
|
|
|
//更新对应玩家信息
|
|
|
updatePlayerInfo(target: Node, playerInfo: PlayerInfo) {
|
|
|
const infoNode = this.playerInfoMap.get(target);
|