refactor(common): 抽离卡牌图标处理逻辑为通用工具类
1. 新建CardIconHelper工具类统一处理卡牌图标解析和设置逻辑 2. 移除SkillBoxComp、SCardComp、EquipListComp、ItemListComp中的重复图标处理代码 3. 统一所有卡牌组件的图标加载优先级和处理流程 4. 新增卡牌背景颜色随等级切换的通用逻辑
This commit is contained in:
59
assets/script/game/common/CardIconHelper.ts
Normal file
59
assets/script/game/common/CardIconHelper.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
9
assets/script/game/common/CardIconHelper.ts.meta
Normal file
9
assets/script/game/common/CardIconHelper.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "436c57f4-4109-40cd-b7f4-01d9686f388c",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user