simple slam and changed wall hugging to only work when input is towards the wall
This commit is contained in:
@@ -128,6 +128,10 @@ public partial class PlayerController : CharacterBody3D
|
||||
public float PostDashSpeed { get; set; } = 100f;
|
||||
[Export(PropertyHint.Range, "0,1,0.01,or_greater")]
|
||||
public float TimeScaleAimInAir { get; set; } = 0.05f;
|
||||
// Slam
|
||||
[ExportSubgroup("Slam")]
|
||||
[Export(PropertyHint.Range, "0,100,1,or_greater")]
|
||||
public float SlamSpeed { get; set; } = 50.0f;
|
||||
|
||||
// Sliding and gliding
|
||||
[ExportGroup("Slide")]
|
||||
@@ -254,12 +258,14 @@ public partial class PlayerController : CharacterBody3D
|
||||
private StateChartState _sliding;
|
||||
private StateChartState _groundSliding;
|
||||
private StateChartState _airGliding;
|
||||
private StateChartState _slamming;
|
||||
private StateChartState _onWall;
|
||||
private StateChartState _onWallHugging;
|
||||
private StateChartState _onWallHanging;
|
||||
private StateChartState _onWallRunning;
|
||||
|
||||
private Transition _onJumpFromWall;
|
||||
private Transition _onJumpFromWallFalling;
|
||||
private Transition _onLeaveWallFromRun;
|
||||
|
||||
public override void _Ready()
|
||||
@@ -322,6 +328,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_sliding = StateChartState.Of(GetNode("StateChart/Root/Movement/Sliding"));
|
||||
_groundSliding = StateChartState.Of(GetNode("StateChart/Root/Movement/Sliding/GroundSlide"));
|
||||
_airGliding = StateChartState.Of(GetNode("StateChart/Root/Movement/Sliding/AirGlide"));
|
||||
_slamming = StateChartState.Of(GetNode("StateChart/Root/Movement/Slamming"));
|
||||
|
||||
// _actionHanging = StateChartState.Of(GetNode("StateChart/Root/Actions/Hanging"));
|
||||
_powerExpired = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Expired"));
|
||||
@@ -336,6 +343,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_doubleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/DoubleJump"));
|
||||
_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"));
|
||||
_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"));
|
||||
@@ -414,6 +422,10 @@ public partial class PlayerController : CharacterBody3D
|
||||
_groundSliding.StatePhysicsProcessing += HandleGroundSlide;
|
||||
_airGliding.StatePhysicsProcessing += HandleAirGlide;
|
||||
|
||||
_slamming.StateEntered += SlamStarted;
|
||||
_slamming.StateExited += SlamEnded;
|
||||
_slamming.StatePhysicsProcessing += HandleSlam;
|
||||
|
||||
_simpleDashCooldownTimer.Timeout += DashCooldownTimeout;
|
||||
_airborneDashCooldownTimer.Timeout += AirborneDashCooldownTimeout;
|
||||
|
||||
@@ -424,6 +436,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_onWallRunning.StatePhysicsProcessing += HandleWallRunning;
|
||||
|
||||
_onJumpFromWall.Taken += OnJumpFromWall;
|
||||
_onJumpFromWallFalling.Taken += OnJumpFromWall;
|
||||
_onLeaveWallFromRun.Taken += OnLeaveWallFromRun;
|
||||
}
|
||||
|
||||
@@ -528,7 +541,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
Velocity = new Vector3(horizontalVelocity.X, Velocity.Y, horizontalVelocity.Z);
|
||||
}
|
||||
|
||||
private void HandleStairs(float delta)
|
||||
private void MoveSlideAndHandleStairs(float delta)
|
||||
{
|
||||
StairsSystem.UpStairsCheckParams upStairsCheckParams = new StairsSystem.UpStairsCheckParams
|
||||
{
|
||||
@@ -638,7 +651,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
}
|
||||
|
||||
// If all else fail and we go down, we hug
|
||||
if (Velocity.Y < 0 && !_coyoteEnabled.Active)
|
||||
if (Velocity.Y < 0 && IsInputTowardsWall(wallNormal))
|
||||
{
|
||||
_playerState.SendEvent("wall_hug");
|
||||
}
|
||||
@@ -876,6 +889,11 @@ public partial class PlayerController : CharacterBody3D
|
||||
///////////////////////////
|
||||
// On wall management //
|
||||
///////////////////////////
|
||||
|
||||
public bool IsInputTowardsWall(Vector3 wallNormal)
|
||||
{
|
||||
return wallNormal.Dot(GetInputGlobalHDirection()) < -0.5;
|
||||
}
|
||||
public void HandleOnWall(float delta)
|
||||
{
|
||||
if (IsTryingToMantle()) _playerState.SendEvent("mantle");
|
||||
@@ -914,10 +932,8 @@ public partial class PlayerController : CharacterBody3D
|
||||
WallHug(delta);
|
||||
if (isOnFloorCustom())
|
||||
_playerState.SendEvent("grounded");
|
||||
if (!WallHugSystem.IsWallHugging())
|
||||
{
|
||||
if (!WallHugSystem.IsWallHugging() || !IsInputTowardsWall(_wallHugStartNormal))
|
||||
_playerState.SendEvent("start_falling");
|
||||
}
|
||||
}
|
||||
public void HandleWallHanging(float delta)
|
||||
{
|
||||
@@ -1001,7 +1017,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
_playerState.SendEvent("mantle");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
_playerState.SendEvent("jump");
|
||||
}
|
||||
|
||||
@@ -1198,7 +1214,20 @@ public partial class PlayerController : CharacterBody3D
|
||||
///////////////////////////
|
||||
public void OnInputSlamPressed()
|
||||
{
|
||||
GD.Print("Slam pressed");
|
||||
_playerState.SendEvent("slam");
|
||||
}
|
||||
|
||||
public void SlamStarted()
|
||||
{
|
||||
SetHorizontalVelocity(Vector2.Zero);
|
||||
SetVerticalVelocity(-SlamSpeed);
|
||||
}
|
||||
public void HandleSlam(float delta)
|
||||
{
|
||||
if (isOnFloorCustom()) _playerState.SendEvent("grounded");
|
||||
}
|
||||
public void SlamEnded()
|
||||
{
|
||||
}
|
||||
|
||||
///////////////////////////
|
||||
@@ -1438,7 +1467,7 @@ public partial class PlayerController : CharacterBody3D
|
||||
|
||||
LookAround(delta);
|
||||
CameraModifications((float) delta);
|
||||
HandleStairs((float) delta);
|
||||
MoveSlideAndHandleStairs((float) delta);
|
||||
MantleSystem.ProcessMantle(_grounded.Active);
|
||||
if (WeaponSystem.InHandState.Active)
|
||||
RotateWeaponWithPlayer();
|
||||
|
||||
Reference in New Issue
Block a user