refactor(map): 优化槽位检测逻辑并新增满槽提示

1. 为MissEquipComp和MissSkillsComp新增静态实例缓存和isFull方法,避免强引用查询
2. 修复槽位坐标的空格格式问题
3. 扩展showSmallTip的参数类型,新增多种面板满槽提示场景
4. 在英雄、装备、技能面板开启逻辑中添加满槽校验和对应提示
This commit is contained in:
pan
2026-08-06 10:44:42 +08:00
parent 98135dc5a4
commit 7436944752
4 changed files with 1883 additions and 1196 deletions

View File

@@ -55,6 +55,19 @@ export class MissEquipComp extends CCComp {
/** 调试日志开关 */
private debugMode: boolean = true;
/** 当前活跃实例(供其他系统查询槽位占用,避免直接 find 强引用) */
private static instance: MissEquipComp | null = null;
/**
* 查询场上装备槽是否已全部占用。
* @returns 无空闲槽位时返回 true实例不存在时返回 false
*/
public static isFull(): boolean {
const inst = MissEquipComp.instance;
if (!inst) return false;
return inst.slots.every(slot => slot.used);
}
/** 技能卡 Prefab在编辑器中赋值 */
@property({ type: Prefab })
private equip_box: Prefab = null;
@@ -62,16 +75,17 @@ export class MissEquipComp extends CCComp {
* 预定义的 6 个槽位坐标(单行):
*/
private slots: SkillBoxSlot[] = [
{ x: -310, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: -230, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: -150, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: -70, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: 10, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: 90, y: BoxSet.GAME_LINE-70, used: false, node: null },
{ x: -310, y: BoxSet.GAME_LINE - 70, used: false, node: null },
{ x: -230, y: BoxSet.GAME_LINE - 70, used: false, node: null },
{ x: -150, y: BoxSet.GAME_LINE - 70, used: false, node: null },
{ x: -70, y: BoxSet.GAME_LINE - 70, used: false, node: null },
{ x: 10, y: BoxSet.GAME_LINE - 70, used: false, node: null },
{ x: 90, y: BoxSet.GAME_LINE - 70, used: false, node: null },
];
/** 注册事件监听 */
onLoad() {
MissEquipComp.instance = this;
oops.message.on(GameEvent.UseEquipCard, this.onUseEquipCard, this);
oops.message.on(GameEvent.RemoveEquipBox, this.onRemoveEquipBox, this);
}
@@ -79,6 +93,9 @@ export class MissEquipComp extends CCComp {
/** 移除事件监听 */
onDestroy() {
super.onDestroy();
if (MissEquipComp.instance === this) {
MissEquipComp.instance = null;
}
oops.message.off(GameEvent.UseEquipCard, this.onUseEquipCard, this);
oops.message.off(GameEvent.RemoveEquipBox, this.onRemoveEquipBox, this);
}