refactor(英雄视图): 重构buff清理逻辑,支持按增益/减益类型过滤

将removeBuff方法替换为更通用的clearBuffs方法,支持清理指定属性或所有属性的buff,并能区分增益和减益效果。新增私有方法clearBuffsForAttr处理具体清理逻辑,提高代码复用性。
This commit is contained in:
2025-10-25 15:38:56 +08:00
parent e62eecd214
commit 957cd6d453

View File

@@ -402,45 +402,45 @@ export class HeroViewComp extends CCComp {
// ==================== BUFF 辅助方法 ====================
/**
* 移除特定属性的某个buff实例
* @param attrIndex 属性索引
* @param value buff效果值
* @param isTemporary 是否为临时bufftrue=临时false=持久)
* @return 是否移除成功
* 清空buff
* @param attrIndex 属性索引如果为空则清理所有buff包括临时和持久
* @param isBuff true时清理value>0的增益bufffalse时清理value<0的减益buff
*/
removeBuff(attrIndex: number, value: number, isTemporary: boolean = true): boolean {
const buffDict = isTemporary ? this.BUFFS_TEMP : this.BUFFS;
if (!buffDict[attrIndex] || buffDict[attrIndex].length === 0) {
return false;
}
const buffs = buffDict[attrIndex];
const index = buffs.findIndex(buff => buff.value === value);
if (index > -1) {
buffs.splice(index, 1);
// 如果该属性所有buff都被移除删除该属性键
if (buffs.length === 0) {
delete buffDict[attrIndex];
clearBuffs(attrIndex?: number, isBuff: boolean = true): void {
if (attrIndex === undefined) {
// 清理所有buff根据isBuff过滤
for (const attrIndex in this.BUFFS_TEMP) {
this.clearBuffsForAttr(parseInt(attrIndex), isBuff);
}
// 重新计算属性
this.recalculateSingleAttr(attrIndex);
return true;
} else {
// 清理指定属性的buff根据isBuff过滤
this.clearBuffsForAttr(attrIndex, isBuff);
}
return false;
}
/**
* 清空某个属性的所有buff
* 清理指定属性的buff,根据增益/减益类型过滤
* @param attrIndex 属性索引
* @param clearTemporaryOnly 是否仅清空临时bufftrue=仅临时false=全部)
* @param isBuff true清理增益bufffalse清理减益buff
*/
clearBuffs(attrIndex: number, clearTemporaryOnly: boolean = false): void {
if (!clearTemporaryOnly) {
delete this.BUFFS[attrIndex];
private clearBuffsForAttr(attrIndex: number, isBuff: boolean): void {
const buffContainer = this.BUFFS_TEMP;
if (!buffContainer[attrIndex]) return;
// 过滤buff数组保留不符合清理条件的buff
buffContainer[attrIndex] = buffContainer[attrIndex].filter(buff => {
const shouldClear = isBuff ? buff.value > 0 : buff.value < 0;
return !shouldClear;
});
// 如果数组为空,删除该属性条目
if (buffContainer[attrIndex].length === 0) {
delete buffContainer[attrIndex];
}
delete this.BUFFS_TEMP[attrIndex];
// 重新计算该属性
this.recalculateSingleAttr(attrIndex);
}