refactor(common): 抽离卡牌图标处理逻辑为通用工具类

1. 新建CardIconHelper工具类统一处理卡牌图标解析和设置逻辑
2. 移除SkillBoxComp、SCardComp、EquipListComp、ItemListComp中的重复图标处理代码
3. 统一所有卡牌组件的图标加载优先级和处理流程
4. 新增卡牌背景颜色随等级切换的通用逻辑
This commit is contained in:
pan
2026-07-27 14:27:59 +08:00
parent 903ec42905
commit 354a2894e4
6 changed files with 183 additions and 95 deletions

View File

@@ -0,0 +1,59 @@
/**
* @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];
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;
}
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "436c57f4-4109-40cd-b7f4-01d9686f388c",
"files": [],
"subMetas": {},
"userData": {}
}