refactor(英雄视图): 重构buff清理逻辑,支持按增益/减益类型过滤
将removeBuff方法替换为更通用的clearBuffs方法,支持清理指定属性或所有属性的buff,并能区分增益和减益效果。新增私有方法clearBuffsForAttr处理具体清理逻辑,提高代码复用性。
This commit is contained in:
@@ -402,45 +402,45 @@ export class HeroViewComp extends CCComp {
|
||||
|
||||
// ==================== BUFF 辅助方法 ====================
|
||||
/**
|
||||
* 移除特定属性的某个buff实例
|
||||
* @param attrIndex 属性索引
|
||||
* @param value buff效果值
|
||||
* @param isTemporary 是否为临时buff(true=临时,false=持久)
|
||||
* @return 是否移除成功
|
||||
* 清空buff
|
||||
* @param attrIndex 属性索引,如果为空则清理所有buff(包括临时和持久)
|
||||
* @param isBuff true时清理value>0的增益buff,false时清理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 是否仅清空临时buff(true=仅临时,false=全部)
|
||||
* @param isBuff true清理增益buff,false清理减益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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user