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