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