feat(hero-ui): 新增普攻lv2强化档独立展示功能

实现英雄图鉴中普攻lv2强化档的单独展示逻辑:
1. 为技能档位渲染添加minLv参数,支持裁剪低档位
2. 新增普攻lv2专属模式,图标/名称取lv1,弹窗仅展示lv2+档位
3. 自动为符合条件的普攻强化档生成独立技能图标
4. 适配等级显示偏移,配置Lv2显示为Lv1
This commit is contained in:
pan
2026-09-04 15:25:35 +08:00
parent c48d497bd8
commit 22e91fc99d
4 changed files with 68 additions and 22 deletions

View File

@@ -64,6 +64,9 @@ export interface SInfoParams {
/** 触发组整体模式(英雄图鉴):true 时按 hero_slot 整组渲染,
* 组内多技能/词条合并为一套分档说明统一展示(每个触发槽位视为一个技能) */
hero_group?: boolean;
/** 普攻 lv2+ 强化档专属模式(英雄图鉴):名称/图标取 lv1,只展示 lv2+ 档位说明
* (裁剪 lv1 档,隐藏 2/3 级面板);等级显示偏移一档(配置 Lv2 → 显示 Lv1,Lv3 → Lv2) */
hero_normal_lv2?: boolean;
}
/** 等级提升信息(用于 2 级 / 3 级面板) */
@@ -256,15 +259,16 @@ export class SinfoComp extends CCComp {
private renderHeroSkill(p: SInfoParams): boolean {
const tiers = (p.hero_group && p.hero_slot !== undefined)
? buildHeroGroupTierLines(p.hero_uuid!, p.hero_slot)
: buildHeroSkillTierLines(p.hero_uuid!, p.uuid, p.hero_slot);
: buildHeroSkillTierLines(p.hero_uuid!, p.uuid, p.hero_slot, p.hero_normal_lv2 ? 2 : 1);
if (tiers.length === 0) return false;
// 图标 / 名称 / 当前技能等级与通用逻辑一致(skill_lv 传的就是当前生效 s_lv)
// 图标 / 名称 / 当前技能等级与通用逻辑一致(skill_lv 传的就是当前生效 s_lv;
// 普攻 lv2+ 强化档等级偏移一档显示:配置 Lv2 → Lv1,Lv3 → Lv2)
this.renderIcon(p);
this.setLabel(this.name_label, this.resolveName(p));
this.setLabel(this.lv_label, `Lv.${p.skill_lv}`);
this.setLabel(this.lv_label, `Lv.${p.hero_normal_lv2 ? Math.max(1, p.skill_lv - 1) : p.skill_lv}`);
// 技能 1 级:完整能力描述
// 主说明:普攻 lv2 专属模式只展示 lv2 档位文本(裁剪后首档即 lv2),否则 slv1 完整能力
if (this.main_info && this.main_info.isValid) {
this.main_info.string = tiers[0].text || "暂无描述";
}
@@ -272,9 +276,17 @@ export class SinfoComp extends CCComp {
// 英雄当前局外等级:激活判定基准
const heroLv = Math.max(1, smc.getHeroOuterLv(p.hero_uuid!));
// 未激活图标背景:1 级档位未解锁时显示
// 未激活图标背景:首档未解锁时显示
this.updateInactiveBg(heroLv >= tiers[0].heroLv);
// 普攻 lv2 专属模式:等级/档位面板均由该档接管,隐藏 2/3 级面板(只展示 lv2 描述)
if (p.hero_normal_lv2) {
this.setPanelActive(this.lv2_node, false);
this.setPanelActive(this.lv3_node, false);
this.renderLvPanelFromTier(tiers[0], heroLv, this.main_status, null);
return true;
}
// 技能 1 级:激活状态与 2/3 级面板同一表示方式(描述已在 main_info 展示,此处仅渲染状态)
this.renderLvPanelFromTier(tiers[0], heroLv, this.main_status, null);