refactor(mission): 实现技能装备盒共享计数机制

1. 新增BoxCounter类统一管理技能和装备盒的槽位占用
2. 调整技能/装备槽位布局使用常量对齐
3. 任务开始时重置共享计数器
4. 添加槽位已满的拦截逻辑和提示
5. 槽位增减时同步更新计数器
This commit is contained in:
panFD
2026-07-23 09:25:49 +08:00
parent f3d97e5163
commit 3f11eb8839
4 changed files with 4297 additions and 4302 deletions

View File

@@ -59,19 +59,15 @@ export class MissEquipComp extends CCComp {
@property({ type: Prefab })
private equip_box: Prefab = null;
/**
* 预定义的 10 个槽位坐标(2 行 × 5 列
* 第 1 行 y=240x = -320, -240, -160, -80, 0
* 第 2 行 y=320x = -320, -240, -160, -80, 0
* 预定义的 6 个槽位坐标(单行
*/
private slots: SkillBoxSlot[] = [
{ x: -310, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: -230, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: -150, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: -70, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: 10, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: 90, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: 170, y: BoxSet.GAME_LINE-100, used: false, node: null },
{ x: 250, y: BoxSet.GAME_LINE-100, 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 },
];
/** 注册事件监听 */
@@ -171,6 +167,7 @@ export class MissEquipComp extends CCComp {
const emptyIndex = this.slots.findIndex(slot => !slot.used);
if (emptyIndex === -1) {
mLogger.warn(this.debugMode, "MissEquipComp", "equip_box slots are full");
oops.gui.toast("装备槽位已满");
return;
}

View File

@@ -27,6 +27,7 @@ import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/modu
import { SBox } from "./SBox";
import { oops } from "db://oops-framework/core/Oops";
import { GameEvent } from "../common/config/GameEvent";
import { BoxSet } from "../common/config/GameSet";
const { ccclass, property } = _decorator;
/** 技能槽位数据结构 */
@@ -58,21 +59,15 @@ export class MissSkillsComp extends CCComp {
private skill_box: Prefab = null;
/**
* 预定义的 10 个槽位坐标(2 行 × 5 列
* 第 1 行 y=240x = -320, -240, -160, -80, 0
* 第 2 行 y=320x = -320, -240, -160, -80, 0
* 预定义的 6 个槽位坐标(单行
*/
private slots: SkillBoxSlot[] = [
{ x: -310, y: 300, used: false, node: null },
{ x: -220, y: 300, used: false, node: null },
{ x: -130, y: 300, used: false, node: null },
{ x: -40, y: 300, used: false, node: null },
{ x: 50, y: 300, used: false, node: null },
{ x: -310, y: 400, used: false, node: null },
{ x: -220, y: 400, used: false, node: null },
{ x: -130, y: 400, used: false, node: null },
{ x: -40, y: 400, used: false, node: null },
{ x: 50, y: 400, used: false, node: null },
{ x: -310, y: BoxSet.GAME_LINE+200, used: false, node: null },
{ x: -230, y: BoxSet.GAME_LINE+200, used: false, node: null },
{ x: -150, y: BoxSet.GAME_LINE+200, used: false, node: null },
{ x: -70, y: BoxSet.GAME_LINE+200, used: false, node: null },
{ x: 10, y: BoxSet.GAME_LINE+200, used: false, node: null },
{ x: 90, y: BoxSet.GAME_LINE+200, used: false, node: null },
];
/** 注册事件监听 */
@@ -172,6 +167,7 @@ export class MissSkillsComp extends CCComp {
const emptyIndex = this.slots.findIndex(slot => !slot.used);
if (emptyIndex === -1) {
mLogger.warn(this.debugMode, "MissSkillsComp", "skill_box slots are full");
oops.gui.toast("技能槽位已满");
return;
}