feat(hero): 新增英雄详情弹窗与图鉴页面重构
1. 新增HeroInfoComp英雄详情弹窗,支持英雄属性展示、升级操作、前后切换功能 2. 重构HerosListComp图鉴页面,将详情面板逻辑剥离至弹窗,点击卡片直接打开详情页 3. 新增英雄列表排序工具函数,统一图鉴与弹窗切换的排序逻辑 4. 优化战斗渲染排序逻辑,移除无关的Y轴渲染权重计算 5. 新增英雄详情弹窗UI配置与预制体资源
This commit is contained in:
@@ -25,6 +25,8 @@ export enum UIID {
|
||||
Mission,
|
||||
/** 技能信息弹窗(技能小图标点击弹出) */
|
||||
SInfo,
|
||||
/** 英雄详情弹窗(图鉴卡片点击弹出:含属性/技能/升级/前后切换) */
|
||||
HeroInfo,
|
||||
}
|
||||
|
||||
/** 打开界面方式的配置数据 */
|
||||
@@ -41,5 +43,6 @@ export var UIConfigData: { [key: number]: UIConfig } = {
|
||||
// [UIID.Talents]: { layer: LayerType.UI, prefab: "gui/element/talents" },
|
||||
[UIID.Mission]: { layer: LayerType.UI, prefab: "gui/element/mission" },
|
||||
[UIID.SInfo]: { layer: LayerType.PopUp, prefab: "gui/element/SInfoBox" },
|
||||
[UIID.HeroInfo]: { layer: LayerType.PopUp, prefab: "gui/element/heroInfo", bundle: "resources" },
|
||||
|
||||
}
|
||||
@@ -11,6 +11,7 @@
|
||||
* - 升级表 key 为目标等级:need = HERO_UPGRADE_NEED_FRAGMENTS[lv + 1],查不到即满级。
|
||||
*/
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS } from "./GameSet";
|
||||
import { HeroInfo, HeroList } from "./heroSet";
|
||||
|
||||
/** 英雄升级状态快照 */
|
||||
export interface HeroUpgradeState {
|
||||
@@ -75,3 +76,25 @@ export function getHeroUpgradeState(lv: number, fragments: number): HeroUpgradeS
|
||||
canUpgrade: !isMax && fragments >= (need as number),
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 图鉴展示排序:可升级优先 → 现有等级降序 → 品质降序。
|
||||
* Why: 图鉴(HerosListComp)与英雄详情(HeroInfoComp)共用同一排序口径,
|
||||
* 保证图鉴中的卡片顺序与详情面板"前后切换"顺序一致。
|
||||
* @param getGrowth 查询英雄成长数据(lv / fragments)的回调,通常由 smc.getHeroGrowth 注入
|
||||
* @returns 排序后的英雄 uuid 数组(新数组,不修改 HeroList)
|
||||
*/
|
||||
export function getSortedHeroList(getGrowth: (uuid: number) => { lv: number; fragments: number }): number[] {
|
||||
return [...HeroList].sort((a, b) => {
|
||||
const ga = getGrowth(a);
|
||||
const gb = getGrowth(b);
|
||||
// 可升级的一批排在最左
|
||||
const ca = canHeroUpgrade(ga.lv, ga.fragments) ? 0 : 1;
|
||||
const cb = canHeroUpgrade(gb.lv, gb.fragments) ? 0 : 1;
|
||||
if (ca !== cb) return ca - cb;
|
||||
// 同批内:现有等级降序优先
|
||||
if (ga.lv !== gb.lv) return gb.lv - ga.lv;
|
||||
// 等级相同:品质降序(rarity 越大品质越高)
|
||||
return (HeroInfo[b]?.rarity ?? 1) - (HeroInfo[a]?.rarity ?? 1);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user