using Godot; namespace Mr.BrickAdventures.scripts.components; [GlobalClass] public partial class DoubleJumpAbility : MovementAbility { [Export] public float JumpHeight { get; set; } = 100f; [Export] public float JumpTimeToPeak { get; set; } = 0.5f; private bool _hasDoubleJumped = false; private float _jumpVelocity; public override void Initialize(PlayerController controller) { base.Initialize(controller); _jumpVelocity = (2.0f * JumpHeight) / JumpTimeToPeak * -1.0f; } public override Vector2 ProcessMovement(Vector2 velocity, double delta) { if (_body.IsOnFloor()) { _hasDoubleJumped = false; } if (_input.JumpPressed && !_body.IsOnFloor() && !_hasDoubleJumped) { velocity.Y = _jumpVelocity; _controller.EmitSignal(PlayerController.SignalName.JumpInitiated); _hasDoubleJumped = true; } return velocity; } }