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

View File

@@ -285,6 +285,26 @@ export function getTalentUpgradeCost(curLv: number): number {
return TALENT_UPGRADE_COST[curLv];
}
/** 天赋等级上限(不含):等级从 0 起步,区间 0~29,共 30 级;每升 1 级产出 1 点天赋点 */
export const TALENT_LEVEL_MAX = 30;
/** 天赋升级经验表:索引为当前等级(0~28),值为升到下一级所需经验 */
export const TALENT_LEVEL_EXP: number[] = [
100, 120, 140, 170, 200, 240, 280, 330, 380, 440,
510, 580, 660, 750, 850, 960, 1080, 1210, 1350, 1500,
1670, 1850, 2050, 2270, 2510, 2770, 3060, 3380, 3730,
];
/**
* 查询天赋升到下一级所需经验
* @param curLv 当前等级(0 起步)
* @returns 升到下一级所需经验;已满级或非法等级返回 -1
*/
export function getTalentLevelExp(curLv: number): number {
if (curLv < 0 || curLv >= TALENT_LEVEL_EXP.length) return -1;
return TALENT_LEVEL_EXP[curLv];
}
/** 阶位解锁门槛:前一阶累计投入 ≥ 该点数才能升级下一阶天赋 */
export const TALENT_TIER_UNLOCK_THRESHOLD = 10;