refactor(hero): 重构天赋触发机制和属性类型

将天赋触发值从布尔类型改为数值类型以支持更灵活的触发条件
修改天赋配置描述和数值以更准确反映效果
优化天赋触发逻辑,支持同时检查多个天赋
添加天赋触发后的具体效果处理
This commit is contained in:
2025-11-19 16:51:36 +08:00
parent bcaa377cf6
commit 94d5aa8920
3 changed files with 57 additions and 28 deletions

View File

@@ -1,5 +1,6 @@
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
import { TalAttrs, talConf, TalEffet, TalTarget, TriType} from "../common/config/TalSet";
import { HeroAttrsComp } from "./HeroAttrsComp";
import { HeroViewComp } from "./HeroViewComp";
/**
@@ -56,30 +57,30 @@ export class TalComp extends ecs.Comp {
/**
* 为英雄添加一个新天赋
* @param talUuid 要添加的天赋ID
* @param uuid 要添加的天赋ID
*
* 添加流程:
* 1. 检查天赋是否已存在
* 2. 检查天赋配置是否存在
* 3. 创建并初始化天赋数据
*/
addTal(talUuid: number) {
addTal(uuid: number) {
// 检查天赋是否已存在
if (this.Tals[talUuid]) {
console.error(`[TalComp]天赋已存在,天赋ID:${talUuid}`);
if (this.Tals[uuid]) {
console.error(`[TalComp]天赋已存在,天赋ID:${uuid}`);
return;
}
// 获取天赋配置
const tConf = talConf[talUuid];
const tConf = talConf[uuid];
if (!tConf) {
console.error(`[TalComp]天赋配置不存在,天赋ID:${talUuid}`);
console.error(`[TalComp]天赋配置不存在,天赋ID:${uuid}`);
return;
}
// 创建并初始化天赋数据
this.Tals[talUuid] = {
uuid: talUuid,
this.Tals[uuid] = {
uuid: uuid,
name: tConf.name,
triType: tConf.triType,
target: tConf.target,
@@ -116,35 +117,35 @@ export class TalComp extends ecs.Comp {
/**
* 更新天赋的效果数值
* @param talUuid 天赋ID
* @param uuid 天赋ID
* @param val 要增减的数值
*
* 功能:
* - 用于调整天赋的实际效果数值
* - 可通过正负数来增加或减少效果
*/
updateVal(talUuid: number, val: number) {
updateVal(uuid: number, val: number) {
// 检查天赋是否存在
if (!this.Tals[talUuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
if (!this.Tals[uuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
return;
}
// 更新天赋效果数值
this.Tals[talUuid].value_add += val;
this.Tals[uuid].value_add += val;
}
updateTrigger(talUuid: number, val: number) {
updateTrigger(uuid: number, val: number) {
// 检查天赋是否存在
if (!this.Tals[talUuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${talUuid}`);
if (!this.Tals[uuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
return;
}
// 更新天赋触发阈值
this.Tals[talUuid].Trigger_add += val;
if (this.Tals[talUuid].Trigger-this.Tals[talUuid].Trigger_add <= 1) {
this.Tals[talUuid].Trigger_add = this.Tals[talUuid].Trigger-1;
this.Tals[uuid].Trigger_add += val;
if (this.Tals[uuid].Trigger-this.Tals[uuid].Trigger_add <= 1) {
this.Tals[uuid].Trigger_add = this.Tals[uuid].Trigger-1;
}
}
/**
@@ -161,14 +162,42 @@ export class TalComp extends ecs.Comp {
for (let uuid in this.Tals) {
const talent = this.Tals[uuid];
// 找到第一个匹配类型的天赋并更新
// 找到所有匹配类型的天赋并更新
if (talent.triType == triType) {
talent.cur += val;
break; // 只更新第一个匹配的天赋
this.checkTrigger(talent.uuid);
}
}
}
checkTrigger(uuid:number){
const talent = this.Tals[uuid];
if (talent.cur >= (talent.Trigger - talent.Trigger_add)) { // 修复触发条件,累积值达到或超过触发阈值时触发
console.log(`[TalComp]天赋触发,天赋ID:${uuid}`);
this.doTriggerTal(talent.uuid);
// 重置累积值
talent.cur = 0;
}
}
doTriggerTal(uuid: number) {
// 检查天赋是否存在
if (!this.Tals[uuid]) {
console.error(`[TalComp]天赋不存在,天赋ID:${uuid}`);
return;
}
const talent = this.Tals[uuid];
const heroAttrs=this.ent.get(HeroAttrsComp);
switch(talent.effet){
case TalEffet.WFUNY:
heroAttrs.tal_WFuny.count += 1;
heroAttrs.tal_WFuny.value = talent.value+talent.value_add;
break;
case TalEffet.D_SKILL:
heroAttrs.tal_DSill.count += 1;
heroAttrs.tal_DSill.value = talent.value+talent.value_add;
break;
}
}
/**
* 重置组件状态
*