Files
MovementTests/forge/abilities/ForgeEffectApplicationBehavior.cs

42 lines
1.3 KiB
C#

using Gamesmiths.Forge.Abilities;
using Gamesmiths.Forge.Core;
using Gamesmiths.Forge.Effects;
using Gamesmiths.Forge.Godot.Resources;
using Gamesmiths.Forge.Godot.Resources.Abilities;
using Godot;
namespace Movementtests.forge.abilities;
public class EffectApplicationBehavior(EffectData effectData) : IAbilityBehavior
{
private Effect? _effect;
private ActiveEffectHandle? _effectHandle;
public void OnStarted(AbilityBehaviorContext context)
{
_effect = new Effect(effectData, new EffectOwnership(context.Owner, context.Owner));
_effectHandle = context.Owner.EffectsManager.ApplyEffect(_effect);
context.AbilityHandle.CommitAbility();
}
public void OnEnded(AbilityBehaviorContext context)
{
if (_effectHandle is not null)
context.Owner.EffectsManager.RemoveEffect(_effectHandle);
context.InstanceHandle.End();
}
}
[Tool]
[GlobalClass]
public partial class ForgeEffectApplicationBehavior : ForgeAbilityBehavior
{
[Export] public ForgeEffectData? EffectData { get; set; }
public override IAbilityBehavior GetBehavior()
{
if (EffectData == null)
throw new System.ArgumentException("EffectData is null");
return new EffectApplicationBehavior(EffectData.GetEffectData());
}
}