42 lines
1.4 KiB
C#
42 lines
1.4 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 ActiveEffectHandle? _effectHandle;
|
|
public void OnStarted(AbilityBehaviorContext context)
|
|
{
|
|
GD.Print("This is applying the periodic effect to the flying weapon");
|
|
_effectHandle = context.Owner.EffectsManager.ApplyEffect(new Effect(effectData, new EffectOwnership(context.Owner, context.Owner)));
|
|
context.AbilityHandle.CommitAbility();
|
|
}
|
|
|
|
public void OnEnded(AbilityBehaviorContext context)
|
|
{
|
|
GD.Print("This is removing the periodic effect from the flying weapon");
|
|
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());
|
|
}
|
|
} |