Movement refactor

This commit is contained in:
2025-08-30 23:06:12 +02:00
committed by GitHub
parent d786ef4c22
commit 88c7a0a055
41 changed files with 656 additions and 122 deletions

View File

@@ -0,0 +1,41 @@
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;
}
}