feat(hero-ui): 新增普攻lv2强化档独立展示功能
实现英雄图鉴中普攻lv2强化档的单独展示逻辑: 1. 为技能档位渲染添加minLv参数,支持裁剪低档位 2. 新增普攻lv2专属模式,图标/名称取lv1,弹窗仅展示lv2+档位 3. 自动为符合条件的普攻强化档生成独立技能图标 4. 适配等级显示偏移,配置Lv2显示为Lv1
This commit is contained in:
@@ -22,7 +22,7 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ec
|
||||
import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
|
||||
import { oops } from "db://oops-framework/core/Oops";
|
||||
import { mLogger } from "../common/Logger";
|
||||
import { HeroInfo, HeroList, SkillTriggerType, LvFieldEntry, LvTriggerEntry, TriggerGrouped, getHeroDisplayStats } from "../common/config/heroSet";
|
||||
import { HeroInfo, HeroList, SkillTriggerType, LvFieldEntry, LvTriggerEntry, TriggerGrouped, HSkillInfo, getHeroDisplayStats } from "../common/config/heroSet";
|
||||
import { buildHeroSkillDesc } from "../common/HeroSkillText";
|
||||
import { GameEvent } from "../common/config/GameEvent";
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS, RARITY_BG_COLORS } from "../common/config/GameSet";
|
||||
@@ -524,6 +524,9 @@ export class HerosListComp extends CCComp {
|
||||
this.addSkillIcon(hSkill.uuid, sLv, false, false)
|
||||
})
|
||||
|
||||
// ---- 普攻 lv2 强化档:作为独立技能图标(名称/图标取 lv1,弹窗只展示 lv2 说明) ----
|
||||
this.addNormalLv2Icon(Object.values(hero.skills)[0], lv)
|
||||
|
||||
// ---- 触发技能:每个触发槽位整组一个图标,按 PANEL_TRIGGER_TYPES 顺序追加 ----
|
||||
for (const type of HerosListComp.PANEL_TRIGGER_TYPES) {
|
||||
if (type === SkillTriggerType.Field) {
|
||||
@@ -536,21 +539,23 @@ export class HerosListComp extends CCComp {
|
||||
|
||||
/**
|
||||
* 实例化技能小图标并初始化
|
||||
* @param s_uuid 技能 UUID(SkillSet 或 FieldSkillSet;整组模式下取组内首个,仅用于图标)
|
||||
* @param s_lv 当前等级对应的技能等级(locked 时为解锁预览档)
|
||||
* @param locked 当前等级未激活 → 显示锁定遮罩
|
||||
* @param isField true 表示驻场光环词条(图标取 FieldSkillSet)
|
||||
* @param slot 技能所属槽位(普攻/大招传 undefined;触发/光环传对应类型,
|
||||
* 同一底座不同槽位视为不同技能,弹窗按槽位取档;复活已纳入 dead)
|
||||
* @param isGroup 整组模式:该图标代表整个触发槽位,组名取组内首个自定义名,
|
||||
* 弹窗按整组合并渲染(组内多技能/词条统一说明)
|
||||
* @param s_uuid 技能 UUID(SkillSet 或 FieldSkillSet;整组模式下取组内首个,仅用于图标)
|
||||
* @param s_lv 当前等级对应的技能等级(locked 时为解锁预览档)
|
||||
* @param locked 当前等级未激活 → 显示锁定遮罩
|
||||
* @param isField true 表示驻场光环词条(图标取 FieldSkillSet)
|
||||
* @param slot 技能所属槽位(普攻/大招传 undefined;触发/光环传对应类型,
|
||||
* 同一底座不同槽位视为不同技能,弹窗按槽位取档;复活已纳入 dead)
|
||||
* @param isGroup 整组模式:该图标代表整个触发槽位,组名取组内首个自定义名,
|
||||
* 弹窗按整组合并渲染(组内多技能/词条统一说明)
|
||||
* @param normalLv2 普攻 lv2 专属模式:该图标代表普攻 lv2 强化档,名称/图标取 lv1,
|
||||
* 弹窗只展示 lv2 档位说明
|
||||
*/
|
||||
private addSkillIcon(s_uuid: number, s_lv: number, locked: boolean, isField: boolean, slot?: SkillTriggerType, isGroup: boolean = false) {
|
||||
private addSkillIcon(s_uuid: number, s_lv: number, locked: boolean, isField: boolean, slot?: SkillTriggerType, isGroup: boolean = false, normalLv2: boolean = false) {
|
||||
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, slot, isGroup)
|
||||
comp.initHeroSkill(s_uuid, s_lv, locked, isField, this.huuid, slot, isGroup, normalLv2)
|
||||
this.skills_node.addChild(node)
|
||||
}
|
||||
|
||||
@@ -598,6 +603,22 @@ export class HerosListComp extends CCComp {
|
||||
|
||||
/** 复活技能已纳入 dead 触发组,通过 dead 配置展示(revive_hp / revive_count),无需单独处理 */
|
||||
|
||||
/**
|
||||
* 普攻 lv2+ 强化档作为独立技能图标:
|
||||
* 普攻(skills[0])lv_entries 存在档时单独出图标,名称/图标取 lv1(s_uuid 相同),
|
||||
* 等级显示偏移一档(配置 Lv2 → Lv1,SSkillBoxComp 统一处理),弹窗按 hero_normal_lv2
|
||||
* 模式只展示 lv2+ 档位说明;激活判定按档位的英雄等级(lv 阈值)。
|
||||
* Why: 普攻 lv2 档是独立成长机制(如附加暴击/冰冻),需让玩家明确感知其存在与解锁条件。
|
||||
*/
|
||||
private addNormalLv2Icon(normal: HSkillInfo | undefined, lv: number) {
|
||||
const entry = normal?.lv_entries?.[0]
|
||||
if (!normal || !entry) return
|
||||
// 节点命名区分 lv2 档(普攻与触发槽位可能同底座,uuid 重名会互相干扰)
|
||||
this.addSkillIcon(normal.uuid, entry.s_lv ?? 2, lv < entry.lv, false, undefined, false, true)
|
||||
const icon = this.skills_node.children[this.skills_node.children.length - 1]
|
||||
if (icon) icon.name = `skill_${normal.uuid}_lv2`
|
||||
}
|
||||
|
||||
// ======================== 英雄动画 ========================
|
||||
|
||||
private updateHeroAnimation(uuid: number) {
|
||||
|
||||
Reference in New Issue
Block a user