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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user