1. 新增FieldEntry类型,将驻场词条的uuid与生效数值分离 2. 重构FieldSkillSet,移除各档位重复配置,仅保留基础元数据 3. 更新所有使用驻场词条的业务代码,适配新的数据结构 4. 修复数值渲染逻辑,使用词条携带的实际数值而非配置固化值
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
/**
|
||
* @file CardIconHelper.ts
|
||
* @description 卡牌图标解析与设置共享工具
|
||
*
|
||
* 职责:
|
||
* 统一处理技能卡/装备卡/商品卡的图标 ID 解析与 SpriteFrame 设置,
|
||
* 避免 SkillBoxComp / SCardComp / ItemListComp / EquipListComp 重复维护相同逻辑。
|
||
*
|
||
* 解析优先级:
|
||
* 1. cardData.icon(卡牌自定义图标,最高优先级)
|
||
* 2. 装备卡(trigger_type=Field 且有 field):取第一个 field 词条的 FieldSkillSet.icon
|
||
* 3. 技能卡(有 skill):取 SkillSet.icon
|
||
* 4. 兜底:skill uuid 或 card uuid 的字符串形式
|
||
*/
|
||
import { Node, Sprite } from "cc";
|
||
import { CardConfig, CardTriggerType } from "./config/CardSet";
|
||
import { FieldSkillSet, SkillSet } from "./config/SkillSet";
|
||
import { smc } from "./SingletonModuleComp";
|
||
|
||
/**
|
||
* 解析卡牌图标 ID
|
||
* @param cardData 卡牌配置
|
||
* @returns 图标 ID(对应图集 frame 名),空字符串表示无法解析
|
||
*/
|
||
export function getCardIconId(cardData: CardConfig | null): string {
|
||
if (!cardData) return "";
|
||
|
||
// 1. 卡牌自定义 icon 优先
|
||
if (cardData.icon) return cardData.icon;
|
||
|
||
// 2. 装备卡:取第一个 field 词条图标
|
||
if (cardData.field && cardData.field.length > 0) {
|
||
const fieldUuid = cardData.field[0].uuid;
|
||
return FieldSkillSet[fieldUuid]?.icon || `${fieldUuid}`;
|
||
}
|
||
|
||
// 3. 技能卡:取 SkillSet.icon
|
||
if (cardData.skill) {
|
||
return SkillSet[cardData.skill]?.icon || `${cardData.skill}`;
|
||
}
|
||
|
||
// 4. 兜底:uuid 字符串
|
||
return `${cardData.uuid}`;
|
||
}
|
||
|
||
/**
|
||
* 设置节点 Sprite 的图标
|
||
* @param node 目标节点(自动查找自身或子节点的 Sprite)
|
||
* @param iconId 图标 ID(对应 smc.uiconsAtlas 中的 frame 名)
|
||
*/
|
||
export function setSpriteFrame(node: Node, iconId: string): void {
|
||
if (!node || !iconId) return;
|
||
const sprite = node.getComponent(Sprite) || node.getComponentInChildren(Sprite);
|
||
if (!sprite) return;
|
||
if (smc.uiconsAtlas) {
|
||
const frame = smc.uiconsAtlas.getSpriteFrame(iconId);
|
||
sprite.spriteFrame = frame || null;
|
||
}
|
||
}
|