refactor: movement system - MovementPreset, decouple abilities, fix timing
This commit is contained in:
@@ -7,19 +7,26 @@ 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;
|
||||
|
||||
|
||||
private float _gravity;
|
||||
|
||||
public override void Initialize(PlayerController controller)
|
||||
{
|
||||
base.Initialize(controller);
|
||||
_gravity = (float)ProjectSettings.GetSetting("physics/2d/default_gravity");
|
||||
}
|
||||
|
||||
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;
|
||||
var newYVelocity = velocity.Y + _gravity * WallSlideGravityMultiplier * (float)delta;
|
||||
|
||||
velocity.Y = Mathf.Min(newYVelocity, MaxWallSlideSpeed);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user