fix(equipBox): 修复装备盒点击预览逻辑

1. 移除冗余的跨卡池查找逻辑,改为仅从装备卡池查询装备配置
2. 新增isEquipCard参数区分装备卡和技能卡预览,优化HInfoComp的数据查询逻辑
3. 调整弹窗打开参数,简化装备盒点击的配置传递
This commit is contained in:
pan
2026-07-22 12:58:33 +08:00
parent fd056b4433
commit b647d68dde
2 changed files with 15 additions and 13 deletions

View File

@@ -24,7 +24,7 @@
* - 销毁时通过 GameEvent.RemoveSkillBox 通知 MissSkillsComp 回收槽位
*
* 依赖:
* - CardPoolList / CardTriggerTypeCardSet—— 通用卡牌类型定义
* - CardTriggerTypeCardSet—— 卡牌触发类型定义
* - EquipPoolListEquipSet—— 装备卡池配置(查询触发配置)
* - SkillSet —— 技能静态配置icon 字段)
* - GameEvent —— 各类游戏事件
@@ -34,7 +34,7 @@ import { mLogger } from "../common/Logger";
import { _decorator, Node, Prefab, Sprite, Label, Vec3, resources, SpriteAtlas, tween, v3, Tween, NodeEventType } from "cc";
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
import { CardPoolList, CardTriggerType } from "../common/config/CardSet";
import { CardTriggerType } from "../common/config/CardSet";
import { EquipPoolList } from "../common/config/EquipSet";
import { SkillSet, SkillOverrides, FieldSkillSet } from "../common/config/SkillSet";
import { oops } from "db://oops-framework/core/Oops";
@@ -150,14 +150,9 @@ export class EquipBoxComp extends CCComp {
private onNodeClicked() {
if (!this.initialized) return;
oops.audio.playEffect("music/button");
// 点击弹出 HInfoComp传入卡牌 UUID 和等级以启用预览模式
// 优先从装备卡池查找,找不到再从技能卡池查找
const config = EquipPoolList.find(c => c.uuid === this.s_uuid || c.skill === this.s_uuid)
?? CardPoolList.find(c => c.uuid === this.s_uuid || c.skill === this.s_uuid);
const cardUuid = config ? config.uuid : this.s_uuid;
// 点击装备盒弹出 HInfoComp从 EquipPoolList 查询配置
oops.gui.remove(UIID.HInfo);
oops.gui.open(UIID.HInfo, { heroUuid: cardUuid, heroLv: this.card_lv, poolLv: config?.pool_lv ?? 1, isSkillCard: true });
oops.gui.open(UIID.HInfo, { heroUuid: this.s_uuid, heroLv: this.card_lv, poolLv: 1, isSkillCard: true, isEquipCard: true });
}
/**

View File

@@ -36,6 +36,7 @@ import { MissionHeroComp } from "./MissionHeroComp";
import { MoveComp } from "../hero/MoveComp";
import { FacSet, getLvColor } from "../common/config/GameSet";
import { CKind, CardPoolList, CardConfig, CardTriggerType } from "../common/config/CardSet";
import { EquipPoolList } from "../common/config/EquipSet";
import { SkillSet } from "../common/config/SkillSet";
import { CardBgComp } from "./CardBgComp";
import { MissionEconomy } from "./MissionEconomy";
@@ -100,6 +101,8 @@ export class HInfoComp extends CCComp {
private previewLv: number = 1;
private previewPoolLv: number = 1;
private isSkillCard: boolean = false;
/** 是否为装备卡预览(决定从 EquipPoolList 查询配置) */
private isEquipCard: boolean = false;
/** 英雄名字标签缓存引用 */
private nameLabel: Label | null = null;
/** 技能信息标签缓存引用 */
@@ -126,9 +129,9 @@ export class HInfoComp extends CCComp {
this.bindEvents();
}
onAdded(args: { eid?: number; heroUuid?: number; heroLv?: number; poolLv?: number; isSkillCard?: boolean }) {
onAdded(args: { eid?: number; heroUuid?: number; heroLv?: number; poolLv?: number; isSkillCard?: boolean, isEquipCard?: boolean }) {
if (args?.heroUuid) {
this.bindPreviewData(args.heroUuid, args.heroLv ?? 1, args.poolLv ?? 1, args.isSkillCard ?? false);
this.bindPreviewData(args.heroUuid, args.heroLv ?? 1, args.poolLv ?? 1, args.isSkillCard ?? false, args.isEquipCard ?? false);
return;
}
const eid = args?.eid ?? 0;
@@ -182,7 +185,10 @@ export class HInfoComp extends CCComp {
if (this.icon_node) this.icon_node.active = false;
if (this.skill_icon_node) this.skill_icon_node.active = true;
const config = CardPoolList.find(c => c.uuid === heroUuid);
// 根据来源从对应卡池查询配置
const config = this.isEquipCard
? EquipPoolList.find(c => c.uuid === heroUuid)
: CardPoolList.find(c => c.uuid === heroUuid);
if (!config) return;
if (this.nameLabel) this.nameLabel.string = config.name ?? "";
@@ -285,12 +291,13 @@ export class HInfoComp extends CCComp {
* 绑定静态预览数据(卡牌点击查看)。
* 通过 HeroInfo/CardPoolList 配置 × 等级计算初始值,不绑定 ECS 实体。
*/
bindPreviewData(heroUuid: number, heroLv: number, poolLv: number, isSkillCard: boolean = false) {
bindPreviewData(heroUuid: number, heroLv: number, poolLv: number, isSkillCard: boolean = false, isEquipCard: boolean = false) {
this.isPreview = true;
this.previewUuid = heroUuid;
this.previewLv = heroLv;
this.previewPoolLv = poolLv;
this.isSkillCard = isSkillCard;
this.isEquipCard = isEquipCard;
if (this.sell_node) this.sell_node.active = false;
if (this.close_node) this.close_node.active = true;
this.cacheLabels();