Files
Continentis/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs
SoulliesOfficial d09b58fd80 架构大更
2026-03-20 11:56:50 -04:00

109 lines
3.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
{
/// <summary>
/// 基类的泛型签名由此层密封并桥接到强类型版本,子类请实现
/// <see cref="OnBuffApply(out CardCombatBuffBase)" />。
/// </summary>
public sealed override bool OnBuffApply(out BuffBase<CardInstance> existingBuff)
{
var result = OnBuffApply(out var typed);
existingBuff = typed;
return result;
}
/// <summary>
/// Buff被尝试添加到卡牌时调用。
/// 返回 true 表示这是全新 Buff返回 false 表示已有同类 Buff 存在(通过 out 参数返回)。
/// </summary>
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<T>(out T existingBuff) where T : CardBuffBase
{
var result = FindExistingSameBuffs(out List<T> 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);
}
}
}