using System.Linq; using Continentis.MainGame.Card; using Continentis.MainGame.Character; using SLSFramework.General; using UnityEngine; namespace Continentis.MainGame.Card { public partial class CardCombatBuffBase : CardBuffBase { public CardLogicBase sourceCard; public CountSubmodule combatActionTimeSubmodule; public CountSubmodule combatRoundTimeSubmodule; } public partial class CardCombatBuffBase { public sealed override bool OnBuffApply(out BuffBase existingBuff) { throw new System.NotImplementedException("请使用类型约束更强的OnBuffApply方法"); } public virtual bool OnBuffApply(out CardCombatBuffBase existingBuff) { throw new System.NotImplementedException(); //需要在子类中实现 } 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 { return base.FindExistingSameBuff(out existingBuff, attachedCard.combatBuffSubmodule.buffList); } public override void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null) { this.Apply(attachedCard, sourceCharacter, null); } public void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null, CardLogicBase sourceCard = null) { this.attachedCard = attachedCard; this.sourceCharacter = sourceCharacter; this.sourceCard = sourceCard; if (OnBuffApply(out CardCombatBuffBase existingBuff)) { this.attachedCard.combatBuffSubmodule.buffList.Add(this); OnAfterFirstApply(); } attributeSubmodule?.RefreshAllModifiedAttributes(); attachedCard.contentSubmodule.dirtyMark = true; Debug.Log(base.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() { this.attachedCard.combatBuffSubmodule.buffList.Remove(this); } } }