removed wall run tutorial and fixed wall run leave auto dash

This commit is contained in:
2026-02-13 15:00:25 +01:00
parent 81ce45a0dc
commit 88b0911c6c
3 changed files with 85 additions and 103 deletions

View File

@@ -159,6 +159,7 @@ WallHugDownwardMaxSpeed = 4.0
WallHugHorizontalDeceleration = 1.0
WallRunUpwardVelocityFactor = 0.5
MinimumWallRunUpwardSpeed = 4.0
MinimumWallRunHorizontalSpeed = 8.0
WallRunAltitudeLossSpeed = 8.0
WallRunSpeedThreshold = 1.0
@@ -1119,7 +1120,7 @@ delay_in_seconds = "0.0"
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=342055859]
script = ExtResource("28_n7qhm")
to = NodePath("../../Jump/SimpleJump")
to = NodePath("../../Jump/DoubleJump")
event = &"wall_jump"
delay_in_seconds = "0.0"
@@ -1156,6 +1157,12 @@ script = ExtResource("27_34snm")
[node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=766545186]
script = ExtResource("27_34snm")
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=1699673966]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Jump/SimpleJump")
event = &"wall_jump"
delay_in_seconds = "0.0"
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=73239479]
script = ExtResource("28_n7qhm")
to = NodePath("../../../Airborne/CoyoteEnabled")

View File

@@ -360,6 +360,7 @@ public partial class PlayerController : CharacterBody3D,
private Transition _onJumpFromWall;
private Transition _onJumpFromWallFalling;
private Transition _onJumpFromWallRunning;
private Transition _onLeaveWallFromRun;
private Transition _onAirborneToGrounded;
@@ -502,6 +503,7 @@ public partial class PlayerController : CharacterBody3D,
_mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling"));
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
_onJumpFromWallFalling = Transition.Of(GetNode("StateChart/Root/Movement/Airborne/Falling/OnWallJump"));
_onJumpFromWallRunning = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Running/OnJump"));
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
_onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging"));
_onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging"));
@@ -629,6 +631,7 @@ public partial class PlayerController : CharacterBody3D,
_onJumpFromWall.Taken += OnJumpFromWall;
_onJumpFromWallFalling.Taken += OnJumpFromWall;
_onJumpFromWallRunning.Taken += OnJumpFromWall;
_onLeaveWallFromRun.Taken += OnLeaveWallFromRun;
_onAirborneToGrounded.Taken += OnAirborneToGrounded;
@@ -1192,7 +1195,7 @@ public partial class PlayerController : CharacterBody3D,
// return;
var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
// if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4) return;
if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4 && _onWall.Active) return;
_wallHugStartNormal = newWallNormal;
}
@@ -1296,7 +1299,6 @@ public partial class PlayerController : CharacterBody3D,
public bool ShouldStartWallRun()
{
GD.Print(_wallHugStartNormal);
if (_wallHugStartNormal.Length() < Mathf.Epsilon)
{
// GD.Print("No wall normal");
@@ -1365,7 +1367,7 @@ public partial class PlayerController : CharacterBody3D,
public bool IsInputForwardOrTowardsWall()
{
return GetInputLocalHDirection().Z < -0.2f || IsInputTowardsWall(_wallHugStartNormal);
return IsPlayerInputtingForward() || IsInputTowardsWall(_wallHugStartNormal);
}
public bool CanKeepWallRun()
@@ -1440,12 +1442,7 @@ public partial class PlayerController : CharacterBody3D,
}
if (_onWallRunning.Active || _onWallHanging.Active) // Always allow jumping out of wall run and hang
{
_playerState.SendEvent("wall_jump");
return;
}
if (_onWallHugging.Active && _isWallJumpAvailable) // Limit number of jumps doable when hugging
if (_onWall.Active) // Always allow jumping out of wall run and hang
{
_playerState.SendEvent("wall_jump");
return;
@@ -1547,19 +1544,10 @@ public partial class PlayerController : CharacterBody3D,
SetHorizontalVelocity(currentHorizontalVelocity + wallJumpHorizontalVelocity);
}
public bool IsOnWallForLongEnough()
{
return _timeOnWall >= 0.1f;
}
public void OnJumpFromWall()
{
// if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall()))
// {
// ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
// }
if (IsOnWallForLongEnough() || _onWallRunning.Active)
if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall()) || _onWallRunning.Active)
ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
// OnJumpStarted(DoubleJumpStartVelocity);