using Gamesmiths.Forge.Abilities; using Gamesmiths.Forge.Effects; using Gamesmiths.Forge.Godot.Resources; using Gamesmiths.Forge.Godot.Resources.Abilities; using Godot; namespace Movementtests.forge.abilities; public class ManualCancelHitBehavior(ForgeEffectData[] effects) : IAbilityBehavior { public void OnStarted(AbilityBehaviorContext context) { if (context.Target == null) return; var sourceLocation = (context.Source as Node3D)?.GlobalPosition ?? Vector3.Zero; var targetLocation = (context.Target as Node3D)?.GlobalPosition ?? Vector3.Zero; var magnitude = context.Magnitude == 0 ? 1 : context.Magnitude; foreach (var effectData in effects) { var effect = new Effect(effectData.GetEffectData(), new EffectOwnership(context.Owner, context.Owner)); context.Target.EffectsManager.ApplyEffect(effect, new SimpleHitEffectData(sourceLocation, targetLocation, magnitude)); } } public void OnEnded(AbilityBehaviorContext context) { context.AbilityHandle.CommitAbility(); } } [Tool] [GlobalClass] public partial class ForgeManualCancelHitBehavior : ForgeAbilityBehavior { [Export] public ForgeEffectData[] OnHitEffects { get; set; } = []; public override IAbilityBehavior GetBehavior() => new ManualCancelHitBehavior(OnHitEffects); }