using Godot;
namespace Mr.BrickAdventures.scripts.components;
[GlobalClass]
public partial class KnockbackComponent : Node
{
[Export] public float KnockbackForce { get; set; } = 400f;
[Export] public float KnockbackDuration { get; set; } = 0.2f; // Duration in seconds
///
/// Applies a knockback force to a target body, pushing it away from a source.
///
/// The CharacterBody2D to apply the knockback to.
/// The Node2D causing the knockback (e.g., the enemy, the cactus).
public void ApplyKnockback(CharacterBody2D target, Node2D source)
{
if (target == null || source == null)
{
return;
}
var direction = (target.GlobalPosition - source.GlobalPosition).Normalized();
if (direction == Vector2.Zero)
{
direction = Vector2.Up;
}
target.Velocity = direction * KnockbackForce;
var tween = CreateTween();
tween.TweenProperty(target, "velocity", Vector2.Zero, KnockbackDuration)
.SetEase(Tween.EaseType.Out)
.SetTrans(Tween.TransitionType.Quad);
}
}