feat: 完成天赋系统重做与UI界面优化

1.  新增天赋等级配置与经验升级逻辑,支持连升多级
2.  重构天赋UI界面,添加等级进度条与页签状态显示
3.  优化技能卡片UI,新增技能名称显示与等级格式调整
4.  调整英雄界面布局,修复UI错位问题
5.  新增页签背景预制件与天赋道具UI样式
This commit is contained in:
panFD
2026-08-26 08:50:54 +08:00
parent 93a3c69d22
commit 5b965bba60
13 changed files with 9888 additions and 6078 deletions

View File

@@ -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