using System.Collections.Generic; using Continentis.MainGame.Character; using UnityEngine; namespace Continentis.MainGame.Card { public abstract partial class CardCombatBuffBase : CardBuffBase { public CountSubmodule combatActionTimeSubmodule; public CountSubmodule combatRoundTimeSubmodule; public CardLogicBase sourceCard; } public partial class CardCombatBuffBase { /// /// 基类的泛型签名由此层密封并桥接到强类型版本,子类请实现 /// 。 /// public sealed override bool OnBuffApply(out BuffBase existingBuff) { var result = OnBuffApply(out var typed); existingBuff = typed; return result; } /// /// Buff被尝试添加到卡牌时调用。 /// 返回 true 表示这是全新 Buff;返回 false 表示已有同类 Buff 存在(通过 out 参数返回)。 /// public abstract bool OnBuffApply(out CardCombatBuffBase existingBuff); public override void OnAfterFirstApply() { } public override void OnBuffRemove() { //attachedCard.combatBuffSubmodule.buffList.For(buff => buff.eventSubmodule.onOtherBuffRemoved.Invoke(this)); attributeSubmodule?.RefreshAllModifiedAttributes(); } public virtual void OnUsage() { } public virtual void OnRoundStart() { } public virtual void OnRoundEnd() { } public virtual void OnActionStart() { } public virtual void OnActionEnd() { } } public partial class CardCombatBuffBase { protected bool FindExistingSameBuff(out T existingBuff) where T : CardBuffBase { var result = FindExistingSameBuffs(out List existingBuffs, attachedCard.combatBuffSubmodule.buffList); existingBuff = result ? existingBuffs[0] : null; return result; } public override void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null) { Apply(attachedCard, sourceCharacter); } public void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null, CardLogicBase sourceCard = null) { this.attachedCard = attachedCard; this.sourceCharacter = sourceCharacter; this.sourceCard = sourceCard; if (OnBuffApply(out var existingBuff)) { this.attachedCard.combatBuffSubmodule.buffList.Add(this); OnAfterFirstApply(); } attributeSubmodule?.RefreshAllModifiedAttributes(); attachedCard.contentSubmodule.dirtyMark = true; Debug.Log(this.attachedCard.contentSubmodule.interpretedFunctionText); } public override void Remove() { OnBuffRemove(); attachedCard.combatBuffSubmodule.buffList.Remove(this); //attachedCard.combatBuffSubmodule.buffList.Exclude(this).For(buff => buff.eventSubmodule?.onOtherBuffRemoved.Invoke(this)); } public override void UntriggerRemove() { attachedCard.combatBuffSubmodule.buffList.Remove(this); } } }