feat(talent): 重构天赋系统配置并添加图标显示

- 将天赋配置从 TalentsComp.ts 提取到独立的 TalentSet.ts 文件
- 为每个天赋添加图标支持,在天赋名称前显示对应图标
- 改进天赋描述,使用动态数值替换模板中的 {value} 占位符
- 更新天赋项预制件以支持新的配置结构
- 修改 UI 图片资源并调整预制件的视觉样式
This commit is contained in:
walkpan
2026-04-27 23:41:58 +08:00
parent faae9627a6
commit c48e529392
8 changed files with 2619 additions and 1369 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 KiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@@ -55,6 +55,8 @@ export class SingletonModuleComp extends ecs.Comp {
noStop:false,
showInfo:true,
}
guides:any=[0,0,0,0,0]
current_guide:number=0
fight_hero: number = 5001; // 单个出战英雄

View File

@@ -0,0 +1,107 @@
/**
* @file TalentSet.ts
* @description 天赋系统配置数据,包含经验要求、消耗、每个天赋的具体加成数值和描述。
*/
export interface TalentInfo {
/** 天赋 ID */
id: number;
/** 天赋名称 */
name: string;
/** 天赋图标或标识(可选) */
icon?: string;
/** 描述模板,使用 {value} 替换具体数值 */
desc: string;
/** 最大等级 */
maxLevel: number;
/** 每级提升的数值 */
valuePerLevel: number;
/** 获取指定等级下的实际加成数值 */
getValue: (level: number) => number;
}
export const TalentConfig = {
// 玩家升级所需经验配置
expRequirements: [
{ maxLevel: 10, expPerLevel: 100 },
{ maxLevel: 20, expPerLevel: 150 },
{ maxLevel: 30, expPerLevel: 200 }
],
// 天赋升级消耗点数 (第1级到第5级消耗)
costPerLevel: [1, 1, 2, 2, 3],
// 天赋列表
talents: [
{
id: 1, name: "攻击强化", icon: "⚔️",
desc: "所有英雄 ATK +{value}%",
maxLevel: 5,
valuePerLevel: 3,
getValue: (level: number) => level * 3
},
{
id: 2, name: "生命强化", icon: "❤️",
desc: "所有英雄 HP +{value}%",
maxLevel: 5,
valuePerLevel: 5,
getValue: (level: number) => level * 5
},
{
id: 3, name: "暴击强化", icon: "🔥",
desc: "所有英雄暴击率 +{value}%",
maxLevel: 5,
valuePerLevel: 2,
getValue: (level: number) => level * 2
},
{
id: 4, name: "风怒强化", icon: "⚡",
desc: "所有英雄风怒率 +{value}%",
maxLevel: 5,
valuePerLevel: 2,
getValue: (level: number) => level * 2
},
{
id: 5, name: "冰冻强化", icon: "❄️",
desc: "所有英雄冰冻率 +{value}%",
maxLevel: 5,
valuePerLevel: 2,
getValue: (level: number) => level * 2
},
{
id: 6, name: "穿刺强化", icon: "🗡️",
desc: "所有英雄穿刺 +{value}",
maxLevel: 5,
valuePerLevel: 0.2,
getValue: (level: number) => Number((level * 0.2).toFixed(1))
},
{
id: 7, name: "护盾强化", icon: "🛡️",
desc: "所有护盾效果 +{value}%",
maxLevel: 5,
valuePerLevel: 5,
getValue: (level: number) => level * 5
},
{
id: 8, name: "采购优惠", icon: "🛒",
desc: "购买英雄 -{value}金",
maxLevel: 5,
valuePerLevel: 1,
getValue: (level: number) => level * 1
},
{
id: 9, name: "刷新优惠", icon: "🔄",
desc: "刷新重抽 -{value}金",
maxLevel: 5,
valuePerLevel: 0.5,
getValue: (level: number) => Number((level * 0.5).toFixed(1))
},
{
id: 10, name: "出售补贴", icon: "💰",
desc: "出售英雄返还 +{value}%金币",
maxLevel: 5,
valuePerLevel: 10,
getValue: (level: number) => level * 10
}
] as TalentInfo[]
};

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "76a850b1-5eda-481f-a6e1-8e12e41db6c8",
"files": [],
"subMetas": {},
"userData": {}
}

View File

@@ -24,37 +24,10 @@ import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/modu
import { mLogger } from "../common/Logger";
import { smc } from "../common/SingletonModuleComp";
import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops";
import { TalentConfig, TalentInfo } from "../common/config/TalentSet";
const { ccclass, property } = _decorator;
/**
* 天赋系统配置数据
*/
export const TalentConfig = {
// 升级所需经验配置
expRequirements: [
{ maxLevel: 10, expPerLevel: 100 },
{ maxLevel: 20, expPerLevel: 150 },
{ maxLevel: 30, expPerLevel: 200 }
],
// 天赋升级消耗点数
costPerLevel: [1, 1, 2, 2, 3], // 第1到第5级消耗
// 天赋列表
talents: [
{ id: 1, name: "攻击强化", desc: "所有英雄 ATK +3%", maxLevel: 5 },
{ id: 2, name: "生命强化", desc: "所有英雄 HP +5%", maxLevel: 5 },
{ id: 3, name: "暴击强化", desc: "所有英雄暴击率 +2%", maxLevel: 5 },
{ id: 4, name: "风怒强化", desc: "所有英雄风怒率 +2%", maxLevel: 5 },
{ id: 5, name: "冰冻强化", desc: "所有英雄冰冻率 +2%", maxLevel: 5 },
{ id: 6, name: "穿刺强化", desc: "所有英雄穿刺 +0.2", maxLevel: 5 },
{ id: 7, name: "护盾强化", desc: "所有护盾效果 +5%", maxLevel: 5 },
{ id: 8, name: "采购优惠", desc: "购买英雄 -1金", maxLevel: 5 },
{ id: 9, name: "刷新优惠", desc: "刷新重抽 -0.5金", maxLevel: 5 },
{ id: 10, name: "出售补贴", desc: "出售英雄返还 +10%金币", maxLevel: 5 }
]
};
/**
* TalentsComp —— 天赋系统界面组件
*
@@ -186,7 +159,7 @@ export class TalentsComp extends CCComp {
}
/** 更新单个天赋项的显示 */
private updateTalentItem(itemNode: Node, talentInfo: any, currentLevel: number) {
private updateTalentItem(itemNode: Node, talentInfo: TalentInfo, currentLevel: number) {
let lblName = itemNode.getChildByName("lbl_name")?.getComponent(Label);
let lblDesc = itemNode.getChildByName("lbl_desc")?.getComponent(Label);
let lblLevel = itemNode.getChildByName("lbl_level")?.getComponent(Label);
@@ -194,8 +167,15 @@ export class TalentsComp extends CCComp {
let btnUpgradeNode = itemNode.getChildByName("btn_upgrade");
let btnUpgrade = btnUpgradeNode?.getComponent(Button);
if (lblName) lblName.string = talentInfo.name;
if (lblDesc) lblDesc.string = talentInfo.desc;
if (lblName) {
lblName.string = (talentInfo.icon ? `${talentInfo.icon} ` : '') + talentInfo.name;
}
if (lblDesc) {
let currentVal = talentInfo.getValue(currentLevel);
lblDesc.string = talentInfo.desc.replace('{value}', currentVal.toString());
}
if (lblLevel) lblLevel.string = `Lv.${currentLevel}`;
let isMax = currentLevel >= talentInfo.maxLevel;