feat(hero skill): add slot support for hero skill detail panel
1. 新增技能槽位参数,解决同底座技能(如普攻+触发技能)的分档定位问题 2. 新增2级/3级面板节点配置,自动隐藏无对应档位的面板 3. 重构英雄技能档位生成逻辑,支持按槽位精确查找技能配置 4. 优化技能弹窗渲染逻辑,传递槽位参数避免匹配错误分组
This commit is contained in:
@@ -533,7 +533,7 @@ export class HerosListComp extends CCComp {
|
||||
} else if (type === SkillTriggerType.Revive) {
|
||||
this.addReviveIcon(hero[SkillTriggerType.Revive], lv)
|
||||
} else {
|
||||
this.addTriggerIcons(hero[type] as TriggerGrouped | undefined, lv)
|
||||
this.addTriggerIcons(hero[type] as TriggerGrouped | undefined, lv, type)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -544,21 +544,24 @@ export class HerosListComp extends CCComp {
|
||||
* @param s_lv 当前等级对应的技能等级(locked 时为解锁预览档)
|
||||
* @param locked 当前等级未激活 → 显示锁定遮罩
|
||||
* @param isField true 表示驻场光环词条(图标取 FieldSkillSet)
|
||||
* @param slot 技能所属槽位(普攻/大招传 undefined;触发/光环/复活传对应类型,
|
||||
* 同一底座不同槽位视为不同技能,弹窗按槽位精确取档)
|
||||
*/
|
||||
private addSkillIcon(s_uuid: number, s_lv: number, locked: boolean, isField: boolean) {
|
||||
private addSkillIcon(s_uuid: number, s_lv: number, locked: boolean, isField: boolean, slot?: SkillTriggerType) {
|
||||
const node = instantiate(this.skill_icon_prefab)
|
||||
node.name = `skill_${s_uuid}`
|
||||
const comp = node.getComponent(SSkillBoxComp) || node.addComponent(SSkillBoxComp)
|
||||
// 携带所属英雄,点击弹窗按英雄技能分档描述渲染
|
||||
comp.initHeroSkill(s_uuid, s_lv, locked, isField, this.huuid)
|
||||
// 携带所属英雄与槽位,点击弹窗按英雄技能分档描述渲染
|
||||
comp.initHeroSkill(s_uuid, s_lv, locked, isField, this.huuid, slot)
|
||||
this.skills_node.addChild(node)
|
||||
}
|
||||
|
||||
/**
|
||||
* 触发技能(dead/fstart/atking/atked):按 s_uuid 分组,取 ≤lv 最大档判定激活;
|
||||
* 未激活时预览最低档(与 resolveTriggerByLv 同语义)
|
||||
* @param type 触发槽位(随图标透传,区分与普攻同底座的触发技能)
|
||||
*/
|
||||
private addTriggerIcons(grouped: TriggerGrouped | undefined, lv: number) {
|
||||
private addTriggerIcons(grouped: TriggerGrouped | undefined, lv: number, type: SkillTriggerType) {
|
||||
if (!grouped) return
|
||||
for (const key in grouped) {
|
||||
const entries = grouped[key]
|
||||
@@ -567,7 +570,7 @@ export class HerosListComp extends CCComp {
|
||||
let active: LvTriggerEntry | undefined
|
||||
for (const e of sorted) { if (e.lv <= lv) active = e }
|
||||
const pick = active ?? sorted[0]
|
||||
this.addSkillIcon(Number(key), pick.s_lv ?? 1, !active, false)
|
||||
this.addSkillIcon(Number(key), pick.s_lv ?? 1, !active, false, type)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -580,7 +583,7 @@ export class HerosListComp extends CCComp {
|
||||
const pick = active ?? sorted[0]
|
||||
for (const entry of pick.uuids) {
|
||||
// 词条档位无 s_lv 概念,技能等级恒为 1(等级标签展示技能等级而非解锁的英雄等级)
|
||||
this.addSkillIcon(entry.uuid, 1, !active, true)
|
||||
this.addSkillIcon(entry.uuid, 1, !active, true, SkillTriggerType.Field)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,7 +595,7 @@ export class HerosListComp extends CCComp {
|
||||
for (const e of sorted) { if (e.lv <= lv) active = e }
|
||||
const pick = active ?? sorted[0]
|
||||
// 复活档位无 s_lv 概念,技能等级恒为 1(等级标签展示技能等级而非解锁的英雄等级)
|
||||
this.addSkillIcon(pick.s_uuid, 1, !active, false)
|
||||
this.addSkillIcon(pick.s_uuid, 1, !active, false, SkillTriggerType.Revive)
|
||||
}
|
||||
|
||||
// ======================== 英雄动画 ========================
|
||||
|
||||
Reference in New Issue
Block a user