feat: 完成天赋系统重做与UI界面优化
1. 新增天赋等级配置与经验升级逻辑,支持连升多级 2. 重构天赋UI界面,添加等级进度条与页签状态显示 3. 优化技能卡片UI,新增技能名称显示与等级格式调整 4. 调整英雄界面布局,修复UI错位问题 5. 新增页签背景预制件与天赋道具UI样式
This commit is contained in:
@@ -9,7 +9,7 @@ import { GameScoreStats } from "./config/HeroAttrs";
|
||||
import { mLogger } from "./Logger";
|
||||
import { gameDataSync } from "./GameDataSync";
|
||||
import { HERO_UPGRADE_NEED_FRAGMENTS } from "./config/GameSet";
|
||||
import { TalentSet, getTalentUpgradeCost, isTalentTierUnlocked } from "./config/TalentSet";
|
||||
import { TalentSet, TALENT_LEVEL_MAX, getTalentLevelExp, getTalentUpgradeCost, isTalentTierUnlocked } from "./config/TalentSet";
|
||||
|
||||
/**
|
||||
* 用远程数据覆盖本地数据(统一方法)
|
||||
@@ -40,6 +40,10 @@ export interface GameDate {
|
||||
talents?: Record<number, number>,
|
||||
/** 当前可用天赋点数(升级天赋消耗,经验/等级系统接入后由其产出) */
|
||||
talent_points?: number,
|
||||
/** 天赋当前等级(0 起步,区间 0~29,共 30 级) */
|
||||
talent_lv?: number,
|
||||
/** 天赋当前等级已累计的经验值 */
|
||||
talent_exp?: number,
|
||||
}
|
||||
export interface CloudData {
|
||||
openid: string;
|
||||
@@ -130,6 +134,10 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
talents: {} as Record<number, number>,
|
||||
/** 可用天赋点数 */
|
||||
talent_points: 0,
|
||||
/** 天赋等级(0 起步) */
|
||||
talent_lv: 0,
|
||||
/** 当前等级已累计经验 */
|
||||
talent_exp: 0,
|
||||
}
|
||||
|
||||
vmdata: any = {
|
||||
@@ -415,6 +423,46 @@ export class SingletonModuleComp extends ecs.Comp {
|
||||
oops.message.dispatchEvent(GameEvent.TALENT_UPDATE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取天赋等级(0 起步,区间 0~29,共 30 级)
|
||||
*/
|
||||
getTalentLevel(): number {
|
||||
return this.data.talent_lv ?? 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前等级已累计经验
|
||||
*/
|
||||
getTalentExp(): number {
|
||||
return this.data.talent_exp ?? 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 增加天赋经验并自动升级(可连升多级;每升 1 级产出 1 点天赋点)
|
||||
* Why: 升级阈值查 TALENT_LEVEL_EXP 配置表,满级(30 级)后不再累计经验。
|
||||
* @param count 增加的经验值(正数)
|
||||
*/
|
||||
addTalentExp(count: number): void {
|
||||
if (count <= 0) return;
|
||||
let lv = this.getTalentLevel();
|
||||
if (lv >= TALENT_LEVEL_MAX) return;
|
||||
let exp = this.getTalentExp() + count;
|
||||
// 支持一次加经验连升多级
|
||||
while (lv < TALENT_LEVEL_MAX) {
|
||||
const need = getTalentLevelExp(lv);
|
||||
if (need < 0 || exp < need) break;
|
||||
exp -= need;
|
||||
lv += 1;
|
||||
this.addTalentPoints(1);
|
||||
}
|
||||
// 满级后清空经验,进度条显示为满
|
||||
if (lv >= TALENT_LEVEL_MAX) exp = 0;
|
||||
this.data.talent_lv = lv;
|
||||
this.data.talent_exp = exp;
|
||||
gameDataSync.markDataDirty();
|
||||
oops.message.dispatchEvent(GameEvent.TALENT_UPDATE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 消耗天赋点升级天赋(升级即激活,下一局生效)
|
||||
* @param uuid 天赋 uuid
|
||||
|
||||
Reference in New Issue
Block a user