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);
}
}
}