From 72cdf32a75adc74f8e94720f4227ff37a561fc59 Mon Sep 17 00:00:00 2001 From: pan Date: Mon, 22 Jun 2026 16:24:23 +0800 Subject: [PATCH] =?UTF-8?q?refactor(TalentItemComp):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=A4=A9=E8=B5=8B=E5=8D=A1=E7=89=8CUI=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 复用CardConfig中的pool_lv统一卡牌背景色,与技能卡保持一致 2. 新增对驻场天赋卡的图标显示支持,使用FieldSkillSet获取图标 3. 重构图标获取逻辑,与SCardComp保持对齐避免显示异常 4. 移除冗余的wave映射背景色代码 --- .../gui/element/prefab_talent_item.prefab | 406 ++++++++++++++++-- assets/script/game/map/TalentItemComp.ts | 49 +-- 2 files changed, 384 insertions(+), 71 deletions(-) diff --git a/assets/resources/gui/element/prefab_talent_item.prefab b/assets/resources/gui/element/prefab_talent_item.prefab index 115c9f49..83c77a92 100644 --- a/assets/resources/gui/element/prefab_talent_item.prefab +++ b/assets/resources/gui/element/prefab_talent_item.prefab @@ -22,32 +22,32 @@ "__id__": 2 }, { - "__id__": 35 + "__id__": 63 }, { - "__id__": 41 + "__id__": 69 }, { - "__id__": 47 + "__id__": 75 }, { - "__id__": 53 + "__id__": 81 } ], "_active": true, "_components": [ { - "__id__": 59 + "__id__": 87 }, { - "__id__": 61 + "__id__": 89 }, { - "__id__": 63 + "__id__": 91 } ], "_prefab": { - "__id__": 65 + "__id__": 93 }, "_lpos": { "__type__": "cc.Vec3", @@ -169,6 +169,48 @@ }, { "__id__": 34 + }, + { + "__id__": 35 + }, + { + "__id__": 37 + }, + { + "__id__": 39 + }, + { + "__id__": 41 + }, + { + "__id__": 43 + }, + { + "__id__": 45 + }, + { + "__id__": 47 + }, + { + "__id__": 49 + }, + { + "__id__": 51 + }, + { + "__id__": 53 + }, + { + "__id__": 55 + }, + { + "__id__": 57 + }, + { + "__id__": 59 + }, + { + "__id__": 61 } ], "removedComponents": [] @@ -474,6 +516,280 @@ ], "value": 0 }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 36 + }, + "propertyPath": [ + "_active" + ], + "value": true + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "4aTybcwdBL1IFgubnxRuUh" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 38 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 220, + "height": 270 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "eedc9qvxRPQpepecxrSorR" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 40 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 440, + "height": 540 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "deY6hTveBKBIzSn0k9oD+7" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 42 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 432, + "height": 528 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "b7HYchf9tMK7WtemLDPjlE" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 44 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 190, + "height": 140 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "25j0n7apFBratTNBweGTa7" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 46 + }, + "propertyPath": [ + "_lpos" + ], + "value": { + "__type__": "cc.Vec3", + "x": 0, + "y": 50, + "z": 0 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "93O2t0s3dBQYpkATdTKBPZ" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 48 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 380, + "height": 280 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "1fWMnHXs1IPZv24wLXcOc2" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 50 + }, + "propertyPath": [ + "_active" + ], + "value": true + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "34+q4uHrVMer4aH0jqs5JM" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 52 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 220, + "height": 270 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "2bJbEaLWxKYIZXGRHTBM1m" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 54 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 440, + "height": 540 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "8b8xEuZsBB+KDupKZRRki9" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 56 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 432, + "height": 528 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "30uXpT+kpFI5rT0dm/gN9k" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 58 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 190, + "height": 140 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "c6lDSuSgFMJaDP3gZWwz54" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 60 + }, + "propertyPath": [ + "_lpos" + ], + "value": { + "__type__": "cc.Vec3", + "x": 0, + "y": 50, + "z": 0 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "24Xd/896JIz4KMqBZHi94n" + ] + }, + { + "__type__": "CCPropertyOverrideInfo", + "targetInfo": { + "__id__": 62 + }, + "propertyPath": [ + "_contentSize" + ], + "value": { + "__type__": "cc.Size", + "width": 380, + "height": 280 + } + }, + { + "__type__": "cc.TargetInfo", + "localID": [ + "1dy2U4eNdI6KgBqcoGyOOb" + ] + }, { "__type__": "cc.Node", "_name": "icon", @@ -486,14 +802,14 @@ "_active": true, "_components": [ { - "__id__": 36 + "__id__": 64 }, { - "__id__": 38 + "__id__": 66 } ], "_prefab": { - "__id__": 40 + "__id__": 68 }, "_lpos": { "__type__": "cc.Vec3", @@ -530,11 +846,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 35 + "__id__": 63 }, "_enabled": true, "__prefab": { - "__id__": 37 + "__id__": 65 }, "_contentSize": { "__type__": "cc.Size", @@ -558,11 +874,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 35 + "__id__": 63 }, "_enabled": true, "__prefab": { - "__id__": 39 + "__id__": 67 }, "_customMaterial": null, "_srcBlendFactor": 2, @@ -625,14 +941,14 @@ "_active": true, "_components": [ { - "__id__": 42 + "__id__": 70 }, { - "__id__": 44 + "__id__": 72 } ], "_prefab": { - "__id__": 46 + "__id__": 74 }, "_lpos": { "__type__": "cc.Vec3", @@ -669,11 +985,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 41 + "__id__": 69 }, "_enabled": true, "__prefab": { - "__id__": 43 + "__id__": 71 }, "_contentSize": { "__type__": "cc.Size", @@ -697,11 +1013,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 41 + "__id__": 69 }, "_enabled": true, "__prefab": { - "__id__": 45 + "__id__": 73 }, "_customMaterial": null, "_srcBlendFactor": 2, @@ -784,14 +1100,14 @@ "_active": true, "_components": [ { - "__id__": 48 + "__id__": 76 }, { - "__id__": 50 + "__id__": 78 } ], "_prefab": { - "__id__": 52 + "__id__": 80 }, "_lpos": { "__type__": "cc.Vec3", @@ -828,11 +1144,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 47 + "__id__": 75 }, "_enabled": true, "__prefab": { - "__id__": 49 + "__id__": 77 }, "_contentSize": { "__type__": "cc.Size", @@ -856,11 +1172,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 47 + "__id__": 75 }, "_enabled": true, "__prefab": { - "__id__": 51 + "__id__": 79 }, "_customMaterial": null, "_srcBlendFactor": 2, @@ -943,14 +1259,14 @@ "_active": false, "_components": [ { - "__id__": 54 + "__id__": 82 }, { - "__id__": 56 + "__id__": 84 } ], "_prefab": { - "__id__": 58 + "__id__": 86 }, "_lpos": { "__type__": "cc.Vec3", @@ -987,11 +1303,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 53 + "__id__": 81 }, "_enabled": true, "__prefab": { - "__id__": 55 + "__id__": 83 }, "_contentSize": { "__type__": "cc.Size", @@ -1015,11 +1331,11 @@ "_objFlags": 0, "__editorExtras__": {}, "node": { - "__id__": 53 + "__id__": 81 }, "_enabled": true, "__prefab": { - "__id__": 57 + "__id__": 85 }, "_customMaterial": null, "_srcBlendFactor": 2, @@ -1100,7 +1416,7 @@ }, "_enabled": true, "__prefab": { - "__id__": 60 + "__id__": 88 }, "_contentSize": { "__type__": "cc.Size", @@ -1128,7 +1444,7 @@ }, "_enabled": false, "__prefab": { - "__id__": 62 + "__id__": 90 }, "_alignFlags": 40, "_target": null, @@ -1164,16 +1480,16 @@ }, "_enabled": true, "__prefab": { - "__id__": 64 + "__id__": 92 }, "lbl_name": { - "__id__": 44 + "__id__": 72 }, "lbl_info": { - "__id__": 50 + "__id__": 78 }, "icon": { - "__id__": 38 + "__id__": 66 }, "bg": null, "_id": "" @@ -1194,7 +1510,7 @@ "instance": null, "targetOverrides": [ { - "__id__": 66 + "__id__": 94 } ], "nestedPrefabInstanceRoots": [ @@ -1206,7 +1522,7 @@ { "__type__": "cc.TargetOverrideInfo", "source": { - "__id__": 63 + "__id__": 91 }, "sourceInfo": null, "propertyPath": [ @@ -1216,7 +1532,7 @@ "__id__": 2 }, "targetInfo": { - "__id__": 67 + "__id__": 95 } }, { diff --git a/assets/script/game/map/TalentItemComp.ts b/assets/script/game/map/TalentItemComp.ts index 83f56950..6c37e616 100644 --- a/assets/script/game/map/TalentItemComp.ts +++ b/assets/script/game/map/TalentItemComp.ts @@ -15,7 +15,7 @@ import { _decorator, Label, Sprite, SpriteFrame } 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 { CardConfig } from "../common/config/CardSet"; -import { SkillSet } from "../common/config/SkillSet"; +import { FieldSkillSet, SkillSet } from "../common/config/SkillSet"; import { CardBgComp } from "./CardBgComp"; import { smc } from "../common/SingletonModuleComp"; import { oops } from "db://oops-framework/core/Oops"; @@ -45,38 +45,35 @@ export class TalentItemComp extends CCComp { */ public updateItem(config: CardConfig): void { if (!config) return; - + if (this.lbl_name) this.lbl_name.string = config.name ?? ""; if (this.lbl_info) this.lbl_info.string = config.info ?? ""; - - // 根据 wave 映射背景颜色 - // 1=绿色(poolLv=1) 5=蓝色(poolLv=2) 10=紫色(poolLv=3) 15=黄色(poolLv=4) 20=红色(poolLv=5) + + // 直接复用 CardSet 中已映射好的 pool_lv,保证与技能卡牌背景一致 + // CardSet 通过 waveToPoolLv[wave] 由 SKILL_CARD_WAVES 索引推导(wave 1→1, 5→2, 8→3) if (this.bg) { - let poolLv = 1; - const wave = config.wave || 1; - if (wave >= 20) poolLv = 5; - else if (wave >= 15) poolLv = 4; - else if (wave >= 10) poolLv = 3; - else if (wave >= 5) poolLv = 2; - else poolLv = 1; - - this.bg.apply(poolLv); + this.bg.apply(config.pool_lv || 1); } - // 设置图标 - if (this.icon && config.skill) { - const skillData = SkillSet[config.skill]; - if (skillData && skillData.icon) { + // 设置图标:驻场卡(skill=undefined 但有 field)走 FieldSkillSet,否则走 SkillSet + // 与 SCardComp 保持一致,避免驻场卡无 icon 显示 + if (this.icon) { + let iconId: string | undefined; + if (!config.skill && config.field && config.field.length > 0) { + // 驻场卡:用 FieldSkillSet[field[0]].icon + const fieldUuid = config.field[0]; + iconId = FieldSkillSet[fieldUuid]?.icon || `${fieldUuid}`; + } else if (config.skill) { + // 技能卡:用 SkillSet[skill].icon + iconId = SkillSet[config.skill]?.icon; + } + if (iconId) { if (smc.uiconsAtlas) { - const frame = smc.uiconsAtlas.getSpriteFrame(skillData.icon); - if (frame) { - this.icon.spriteFrame = frame; - } + const frame = smc.uiconsAtlas.getSpriteFrame(iconId); + if (frame) this.icon.spriteFrame = frame; } else { - const sf = oops.res.get("game/heros/cards/" + skillData.icon, SpriteFrame) as SpriteFrame; - if (sf) { - this.icon.spriteFrame = sf; - } + const sf = oops.res.get("game/heros/cards/" + iconId, SpriteFrame) as SpriteFrame; + if (sf) this.icon.spriteFrame = sf; } } }