2025-12-13 23:28:23 -05:00
|
|
|
|
using System.Collections.Generic;
|
2025-10-03 00:02:43 -04:00
|
|
|
|
using Continentis.MainGame.Character;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Continentis.MainGame.Card
|
|
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
public abstract partial class CardCombatBuffBase : CardBuffBase
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
|
|
|
|
|
public CountSubmodule combatActionTimeSubmodule;
|
|
|
|
|
|
public CountSubmodule combatRoundTimeSubmodule;
|
2026-03-20 11:56:50 -04:00
|
|
|
|
public CardLogicBase sourceCard;
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-24 09:11:22 -04:00
|
|
|
|
public partial class CardCombatBuffBase
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 基类的泛型签名由此层密封并桥接到强类型版本,子类请实现
|
|
|
|
|
|
/// <see cref="OnBuffApply(out CardCombatBuffBase)" />。
|
|
|
|
|
|
/// </summary>
|
2025-11-15 12:17:34 -05:00
|
|
|
|
public sealed override bool OnBuffApply(out BuffBase<CardInstance> existingBuff)
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
var result = OnBuffApply(out var typed);
|
|
|
|
|
|
existingBuff = typed;
|
|
|
|
|
|
return result;
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 11:56:50 -04:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Buff被尝试添加到卡牌时调用。
|
|
|
|
|
|
/// 返回 true 表示这是全新 Buff;返回 false 表示已有同类 Buff 存在(通过 out 参数返回)。
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public abstract bool OnBuffApply(out CardCombatBuffBase existingBuff);
|
|
|
|
|
|
|
2025-10-03 00:02:43 -04:00
|
|
|
|
public override void OnAfterFirstApply()
|
|
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
}
|
2025-10-03 00:02:43 -04:00
|
|
|
|
|
|
|
|
|
|
public override void OnBuffRemove()
|
|
|
|
|
|
{
|
2025-11-10 12:57:04 -05:00
|
|
|
|
//attachedCard.combatBuffSubmodule.buffList.For(buff => buff.eventSubmodule.onOtherBuffRemoved.Invoke(this));
|
2025-10-03 00:02:43 -04:00
|
|
|
|
attributeSubmodule?.RefreshAllModifiedAttributes();
|
|
|
|
|
|
}
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
2025-10-03 00:02:43 -04:00
|
|
|
|
public virtual void OnUsage()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public virtual void OnRoundStart()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public virtual void OnRoundEnd()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
2025-10-03 00:02:43 -04:00
|
|
|
|
public virtual void OnActionStart()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public virtual void OnActionEnd()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
2025-10-24 09:11:22 -04:00
|
|
|
|
public partial class CardCombatBuffBase
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
2025-11-01 06:13:58 -04:00
|
|
|
|
protected bool FindExistingSameBuff<T>(out T existingBuff) where T : CardBuffBase
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
var result = FindExistingSameBuffs(out List<T> existingBuffs, attachedCard.combatBuffSubmodule.buffList);
|
2025-12-13 23:28:23 -05:00
|
|
|
|
existingBuff = result ? existingBuffs[0] : null;
|
|
|
|
|
|
return result;
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
2025-11-15 12:17:34 -05:00
|
|
|
|
public override void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null)
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
Apply(attachedCard, sourceCharacter);
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-20 11:56:50 -04:00
|
|
|
|
public void Apply(CardInstance attachedCard, CharacterBase sourceCharacter = null,
|
|
|
|
|
|
CardLogicBase sourceCard = null)
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
|
|
|
|
|
this.attachedCard = attachedCard;
|
|
|
|
|
|
this.sourceCharacter = sourceCharacter;
|
|
|
|
|
|
this.sourceCard = sourceCard;
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
|
|
|
|
|
if (OnBuffApply(out var existingBuff))
|
2025-10-03 00:02:43 -04:00
|
|
|
|
{
|
|
|
|
|
|
this.attachedCard.combatBuffSubmodule.buffList.Add(this);
|
|
|
|
|
|
OnAfterFirstApply();
|
|
|
|
|
|
}
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
2025-11-01 06:13:58 -04:00
|
|
|
|
attributeSubmodule?.RefreshAllModifiedAttributes();
|
2025-11-08 09:50:55 -05:00
|
|
|
|
attachedCard.contentSubmodule.dirtyMark = true;
|
2026-03-20 11:56:50 -04:00
|
|
|
|
|
|
|
|
|
|
Debug.Log(this.attachedCard.contentSubmodule.interpretedFunctionText);
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void Remove()
|
|
|
|
|
|
{
|
|
|
|
|
|
OnBuffRemove();
|
2025-11-10 12:57:04 -05:00
|
|
|
|
attachedCard.combatBuffSubmodule.buffList.Remove(this);
|
|
|
|
|
|
//attachedCard.combatBuffSubmodule.buffList.Exclude(this).For(buff => buff.eventSubmodule?.onOtherBuffRemoved.Invoke(this));
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void UntriggerRemove()
|
|
|
|
|
|
{
|
2026-03-20 11:56:50 -04:00
|
|
|
|
attachedCard.combatBuffSubmodule.buffList.Remove(this);
|
2025-10-03 00:02:43 -04:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|