This commit is contained in:
SoulliesOfficial
2025-10-24 09:11:22 -04:00
parent 61a397dd4c
commit 76157e3cb1
329 changed files with 8609 additions and 4549 deletions

View File

@@ -1,11 +1,13 @@
using System.Collections.Generic;
using System.Linq;
using Continentis.MainGame.Card;
using Continentis.MainGame.UI;
using SLSFramework.General;
using UnityEngine;
namespace Continentis.MainGame.Character
{
public abstract partial class CombatBuffBase : CharacterBuffBase
public abstract partial class CharacterCombatBuffBase : CharacterBuffBase
{
public CardLogicBase sourceCard;
@@ -19,31 +21,32 @@ namespace Continentis.MainGame.Character
public StatusSubmodule statusSubmodule;
}
public partial class CombatBuffBase
public partial class CharacterCombatBuffBase
{
public sealed override bool OnBuffApply(out BuffBase<CharacterBase> existingBuff)
{
throw new System.NotImplementedException("请使用类型约束更强的OnBuffApply方法");
}
public virtual bool OnBuffApply(out CombatBuffBase existingBuff)
public virtual bool OnBuffApply(out CharacterCombatBuffBase existingBuff)
{
throw new System.NotImplementedException(); //需要在子类中实现
}
public override void OnAfterFirstApply()
{
statusSubmodule?.AddStatus();
}
public override void OnBuffRemove()
{
RefreshAttributes();
statusSubmodule?.RemoveStatus();
iconSubmodule?.Remove();
}
}
public partial class CombatBuffBase
public partial class CharacterCombatBuffBase
{
protected bool FindExistingSameBuff<T>(out T existingBuff) where T : CharacterBuffBase
{
@@ -61,9 +64,9 @@ namespace Continentis.MainGame.Character
this.sourceCharacter = sourceCharacter;
this.sourceCard = sourceCard;
if (OnBuffApply(out CombatBuffBase existingBuff))
if (OnBuffApply(out CharacterCombatBuffBase existingBuff))
{
this.attachedCharacter.combatBuffSubmodule.buffList.Add(this);
this.attachedCharacter.combatBuffSubmodule.buffList.AddByPriority(this);
OnAfterFirstApply();
@@ -92,9 +95,44 @@ namespace Continentis.MainGame.Character
{
this.attachedCharacter.combatBuffSubmodule.buffList.Remove(this);
}
/// <summary>
/// 检查并处理专注类Buff的添加逻辑。
/// 如果已有相同Buff存在则返回true并通过out参数返回该Buff。
/// 如果没有相同Buff存在则返回false并在必要时移除优先级最低的专注类Buff以腾出空间。
/// </summary>
/// <param name="existingBuff"></param>
/// <returns></returns>
public bool FocusingCheck(out CharacterCombatBuffBase existingBuff)
{
// 移除超出上限的专注类Buff
List<CharacterCombatBuffBase> focusingBuffs =
attachedCharacter.combatBuffSubmodule.buffList.Where(buff => buff.buffType == BuffType.Focusing).ToList();
focusingBuffs.Sort();
int maximumFocusingBuffAmount = attachedCharacter.GetAttribute("MaximumFocusingBuffAmount", 1);
for (int i = maximumFocusingBuffAmount; i < focusingBuffs.Count; i++)
{
focusingBuffs[i].Remove();
}
// 检查是否已有相同Buff存在
if (FindExistingSameBuff(out existingBuff))
{
return true;
}
// 如果没有相同Buff存在但已达上限则移除优先级最低的专注类Buff将由新Buff替代
if(focusingBuffs.Count >= maximumFocusingBuffAmount)
{
CharacterCombatBuffBase lowestPriorityBuff = focusingBuffs[focusingBuffs.Count - 1];
lowestPriorityBuff.Remove();
}
return false;
}
}
public partial class CombatBuffBase
public partial class CharacterCombatBuffBase
{
private void RefreshAttributes()
{