feat(hero card): add upgrade reminder feature
1. 新增英雄升级配置判定模块,封装升级条件校验逻辑 2. 为卡牌组件添加可升级标识节点和刷新逻辑 3. 实现英雄列表面板统一刷新所有卡牌的升级标识 4. 监听英雄成长变更事件实时更新升级提示状态
This commit is contained in:
77
assets/script/game/common/config/heroUpSet.ts
Normal file
77
assets/script/game/common/config/heroUpSet.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* @file heroUpSet.ts
|
||||
* @description 英雄局外升级规则与判定逻辑(纯逻辑模块,无 UI / 无单例依赖)
|
||||
*
|
||||
* 职责:
|
||||
* 1. 封装 HERO_UPGRADE_NEED_FRAGMENTS 升级消耗表的查询口径(满级判定)。
|
||||
* 2. 提供"是否可升级"的统一判定,供 smc.upgradeHero / HerosListComp / CardLiteComp 复用。
|
||||
*
|
||||
* 关键设计:
|
||||
* - 不直接引用 smc 单例,由调用方传入成长数据(lv / fragments),保持纯函数可测试。
|
||||
* - 升级表 key 为目标等级:need = HERO_UPGRADE_NEED_FRAGMENTS[lv + 1],查不到即满级。
|
||||
*/
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS } from "./GameSet";
|
||||
|
||||
/** 英雄升级状态快照 */
|
||||
export interface HeroUpgradeState {
|
||||
/** 当前局外等级 */
|
||||
lv: number;
|
||||
/** 下一级(满级时为当前等级) */
|
||||
nextLv: number;
|
||||
/** 当前拥有碎片数 */
|
||||
fragments: number;
|
||||
/** 升到下一级所需碎片数(满级为 0) */
|
||||
needFragments: number;
|
||||
/** 是否已满级 */
|
||||
isMaxLv: boolean;
|
||||
/** 是否满足升级条件(未满级且碎片充足) */
|
||||
canUpgrade: boolean;
|
||||
}
|
||||
|
||||
/** 英雄最高局外等级(升级表最大 key - 1) */
|
||||
export const HERO_MAX_LV: number = Math.max(...Object.keys(HERO_UPGRADE_NEED_FRAGMENTS).map(Number)) - 1;
|
||||
|
||||
/**
|
||||
* 查询从当前等级升到下一级所需的碎片数。
|
||||
* @param lv 当前局外等级
|
||||
* @returns 所需碎片数;已满级返回 undefined
|
||||
*/
|
||||
export function getHeroUpgradeNeedFragments(lv: number): number | undefined {
|
||||
return HERO_UPGRADE_NEED_FRAGMENTS[lv + 1];
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断英雄当前等级是否已满级。
|
||||
* @param lv 当前局外等级
|
||||
*/
|
||||
export function isHeroMaxLv(lv: number): boolean {
|
||||
return getHeroUpgradeNeedFragments(lv) === undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断英雄是否满足升级条件(未满级且碎片充足)。
|
||||
* @param lv 当前局外等级
|
||||
* @param fragments 当前拥有碎片数
|
||||
*/
|
||||
export function canHeroUpgrade(lv: number, fragments: number): boolean {
|
||||
const need = getHeroUpgradeNeedFragments(lv);
|
||||
return need !== undefined && fragments >= need;
|
||||
}
|
||||
|
||||
/**
|
||||
* 汇总英雄升级状态快照(供 UI 一次性取用,避免重复查表)。
|
||||
* @param lv 当前局外等级
|
||||
* @param fragments 当前拥有碎片数
|
||||
*/
|
||||
export function getHeroUpgradeState(lv: number, fragments: number): HeroUpgradeState {
|
||||
const need = getHeroUpgradeNeedFragments(lv);
|
||||
const isMax = need === undefined;
|
||||
return {
|
||||
lv,
|
||||
nextLv: isMax ? lv : lv + 1,
|
||||
fragments,
|
||||
needFragments: need ?? 0,
|
||||
isMaxLv: isMax,
|
||||
canUpgrade: !isMax && fragments >= (need as number),
|
||||
};
|
||||
}
|
||||
9
assets/script/game/common/config/heroUpSet.ts.meta
Normal file
9
assets/script/game/common/config/heroUpSet.ts.meta
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "621f3327-35b6-4b26-92f6-7f3c2abe74b7",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
Reference in New Issue
Block a user