Movement refactor
This commit is contained in:
37
scripts/components/Movement/WallJumpAbility.cs
Normal file
37
scripts/components/Movement/WallJumpAbility.cs
Normal file
@@ -0,0 +1,37 @@
|
||||
using Godot;
|
||||
|
||||
namespace Mr.BrickAdventures.scripts.components;
|
||||
|
||||
[GlobalClass]
|
||||
public partial class WallJumpAbility : MovementAbility
|
||||
{
|
||||
[ExportGroup("Wall Jump Design")]
|
||||
[Export] public Vector2 WallJumpVelocity { get; set; } = new(500.0f, -350.0f);
|
||||
|
||||
[ExportGroup("Wall Slide Feel")]
|
||||
[Export(PropertyHint.Range, "0.0, 1.0, 0.05")] public float WallSlideGravityMultiplier { get; set; } = 0.7f;
|
||||
[Export] public float MaxWallSlideSpeed { get; set; } = 150.0f;
|
||||
|
||||
public override Vector2 ProcessMovement(Vector2 velocity, double delta)
|
||||
{
|
||||
var isOnWall = _body.IsOnWall();
|
||||
|
||||
if (isOnWall && !_body.IsOnFloor() && velocity.Y > 0f)
|
||||
{
|
||||
var gravity = (float)ProjectSettings.GetSetting("physics/2d/default_gravity");
|
||||
var newYVelocity = velocity.Y + gravity * WallSlideGravityMultiplier * (float)delta;
|
||||
|
||||
velocity.Y = Mathf.Min(newYVelocity, MaxWallSlideSpeed);
|
||||
}
|
||||
|
||||
if (isOnWall && _input.JumpHeld)
|
||||
{
|
||||
var wallNormal = _body.GetWallNormal();
|
||||
|
||||
_controller.EmitSignal(PlayerController.SignalName.JumpInitiated);
|
||||
velocity = new Vector2(wallNormal.X * WallJumpVelocity.X, WallJumpVelocity.Y);
|
||||
}
|
||||
|
||||
return velocity;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user