Files
przygody-pana-cegly/scripts/components/Movement/JumpAbility.cs
2025-08-30 23:06:12 +02:00

41 lines
1.2 KiB
C#

using Godot;
namespace Mr.BrickAdventures.scripts.components;
[GlobalClass]
public partial class JumpAbility : MovementAbility
{
[Export] public float JumpVelocity { get; set; } = -400.0f;
[Export] public int CoyoteFrames { get; set; } = 6;
private Timer _coyoteTimer;
private bool _wasOnFloor = false;
public override void Initialize(PlayerController controller)
{
base.Initialize(controller);
_coyoteTimer = new Timer { OneShot = true, WaitTime = CoyoteFrames / (float)Engine.GetPhysicsTicksPerSecond() };
AddChild(_coyoteTimer);
}
public override Vector2 ProcessMovement(Vector2 velocity, double delta)
{
if (!_body.IsOnFloor() && _wasOnFloor)
{
_coyoteTimer.Start();
}
if (_input.JumpHeld)
{
if (_body.IsOnFloor() || !_coyoteTimer.IsStopped())
{
velocity.Y = JumpVelocity;
_controller.EmitSignal(PlayerController.SignalName.JumpInitiated);
_coyoteTimer.Stop();
}
}
_wasOnFloor = _body.IsOnFloor();
return velocity;
}
}