Files
Continentis/Assets/Scripts/MainGame/Character/CharacterBuff/CombatBuffBase.cs

111 lines
3.4 KiB
C#
Raw Normal View History

2025-10-03 00:02:43 -04:00
using System.Linq;
using Continentis.MainGame.Card;
using Continentis.MainGame.UI;
using UnityEngine;
namespace Continentis.MainGame.Character
{
public abstract partial class CombatBuffBase : CharacterBuffBase
{
public CardLogicBase sourceCard;
2025-10-23 00:49:44 -04:00
public CountSubmodule actionCountSubmodule;
2025-10-03 00:02:43 -04:00
public CountSubmodule combatRoundTimeSubmodule;
public UnitedStackSubmodule unitedStackSubmodule;
public IndependentStackSubmodule independentStackSubmodule;
public CoreAttributeSubmodule coreAttributeSubmodule;
public GeneralAttributeSubmodule generalAttributeSubmodule;
public StatusSubmodule statusSubmodule;
}
public partial class CombatBuffBase
{
public sealed override bool OnBuffApply(out BuffBase<CharacterBase> existingBuff)
{
throw new System.NotImplementedException("请使用类型约束更强的OnBuffApply方法");
}
public virtual bool OnBuffApply(out CombatBuffBase existingBuff)
{
throw new System.NotImplementedException(); //需要在子类中实现
}
public override void OnAfterFirstApply()
{
}
2025-10-23 00:49:44 -04:00
public override void OnBuffRemove()
2025-10-03 00:02:43 -04:00
{
2025-10-23 00:49:44 -04:00
RefreshAttributes();
iconSubmodule?.Remove();
2025-10-03 00:02:43 -04:00
}
}
public partial class CombatBuffBase
{
2025-10-23 00:49:44 -04:00
protected bool FindExistingSameBuff<T>(out T existingBuff) where T : CharacterBuffBase
2025-10-03 00:02:43 -04:00
{
2025-10-23 00:49:44 -04:00
return FindExistingSameBuff(out existingBuff, attachedCharacter.combatBuffSubmodule.buffList);
2025-10-03 00:02:43 -04:00
}
public override void Apply(CharacterBase attachedCharacter, CharacterBase sourceCharacter = null)
{
this.Apply(attachedCharacter, sourceCharacter, null);
}
public void Apply(CharacterBase attachedCharacter, CharacterBase sourceCharacter = null, CardLogicBase sourceCard = null)
{
this.attachedCharacter = attachedCharacter;
this.sourceCharacter = sourceCharacter;
this.sourceCard = sourceCard;
2025-10-23 00:49:44 -04:00
2025-10-03 00:02:43 -04:00
if (OnBuffApply(out CombatBuffBase existingBuff))
{
this.attachedCharacter.combatBuffSubmodule.buffList.Add(this);
2025-10-23 00:49:44 -04:00
2025-10-03 00:02:43 -04:00
OnAfterFirstApply();
2025-10-23 00:49:44 -04:00
if (iconSubmodule != null)
2025-10-03 00:02:43 -04:00
{
2025-10-23 00:49:44 -04:00
(attachedCharacter.characterView.hudContainer.enablingHUDs["CharacterBuffCollection"] as HUD_CharacterBuffCollection)
?.AddBuffIcon(this);
2025-10-03 00:02:43 -04:00
}
}
else
{
2025-10-23 00:49:44 -04:00
existingBuff.iconSubmodule?.buffIcon.UpdateIcon();
2025-10-03 00:02:43 -04:00
}
2025-10-23 00:49:44 -04:00
RefreshAttributes();
iconSubmodule?.Update();
2025-10-03 00:02:43 -04:00
}
public override void Remove()
{
OnBuffRemove();
this.attachedCharacter.combatBuffSubmodule.buffList.Remove(this);
}
public override void UntriggerRemove()
{
this.attachedCharacter.combatBuffSubmodule.buffList.Remove(this);
}
}
2025-10-23 00:49:44 -04:00
public partial class CombatBuffBase
{
private void RefreshAttributes()
{
if (coreAttributeSubmodule != null)
{
coreAttributeSubmodule.RefreshAllModifiedAttributes();
}
else
{
generalAttributeSubmodule?.RefreshAllModifiedAttributes();
}
}
}
2025-10-03 00:02:43 -04:00
}