stunnable targets on hit

This commit is contained in:
2026-05-15 15:29:24 +02:00
parent a0e99a959f
commit afa335e7bf
19 changed files with 200 additions and 60 deletions

View File

@@ -6,18 +6,21 @@ using Godot;
namespace Movementtests.forge.abilities;
public class ManualCancelHitBehavior(ForgeEffectData? damage) : IAbilityBehavior
public class ManualCancelHitBehavior(ForgeEffectData[] effects) : IAbilityBehavior
{
public void OnStarted(AbilityBehaviorContext context)
{
if (context.Target == null || damage == null) return;
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;
var effect = new Effect(damage.GetEffectData(), new EffectOwnership(context.Owner, context.Owner));
context.Target.EffectsManager.ApplyEffect(effect, new SimpleHitEffectData(sourceLocation, targetLocation, 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)
@@ -30,6 +33,6 @@ public class ManualCancelHitBehavior(ForgeEffectData? damage) : IAbilityBehavior
[GlobalClass]
public partial class ForgeManualCancelHitBehavior : ForgeAbilityBehavior
{
[Export] public ForgeEffectData? DamageEffect { get; set; }
public override IAbilityBehavior GetBehavior() => new ManualCancelHitBehavior(DamageEffect);
[Export] public ForgeEffectData[] OnHitEffects { get; set; } = [];
public override IAbilityBehavior GetBehavior() => new ManualCancelHitBehavior(OnHitEffects);
}