getting the weapon tutorial
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 16s
Create tag and build when new code gets to main / Export (push) Successful in 4m47s

This commit is contained in:
2025-10-31 16:18:59 +01:00
parent 2d3a1b0d4c
commit fd16342aca
8 changed files with 105 additions and 97 deletions

View File

@@ -50,6 +50,8 @@ public partial class PlayerController : CharacterBody3D
private Timer _timeScaleAimInAirTimer;
private Timer _simpleDashCooldownTimer;
private Timer _powerCooldownTimer;
[Export] public Marker3D TutorialWeaponTarget;
[ExportCategory("Movement")]
[ExportGroup("Ground")]
@@ -156,26 +158,22 @@ public partial class PlayerController : CharacterBody3D
PlayerUi.SetNumberOfDashesLeft(value);
}
}
public bool TutorialDone { get; set; } = false;
private bool _canDashAirborne = true;
private bool _isWallJumpAvailable = true;
private bool _canDash = true;
private bool _shouldMantleOnDashEnded = false;
private StateChart _playerState;
private StateChartState _weaponInHand;
private StateChartState _aiming;
private StateChartState _weaponThrown;
private StateChartState _actionHanging;
private StateChartState _empowerOn;
private StateChartState _empowerOff;
private StateChartState _powerExpired;
private StateChartState _powerRecharging;
private StateChartState _powerFull;
private StateChartState _grounded;
private StateChartState _mantling;
private StateChartState _movHanging;
private StateChartState _airborne;
private StateChartState _coyoteEnabled;
private StateChartState _simpleJump;
@@ -184,13 +182,9 @@ public partial class PlayerController : CharacterBody3D
private StateChartState _simpleDash;
private StateChartState _poweredDash;
private StateChartState _aimedDash;
private StateChartState _doubleJumpEnabled;
private StateChartState _onWall;
private StateChartState _onWallHugCanceled;
private StateChartState _onWallHugging;
private StateChartState _onWallHanging;
private StateChartState _falling;
private StateChartState _to_weapon_dash;
private Transition _onJumpFromWall;
private Transition _onMegajumpFromWall;
@@ -277,31 +271,22 @@ public partial class PlayerController : CharacterBody3D
// State management
_playerState = StateChart.Of(GetNode("StateChart"));
_weaponInHand = StateChartState.Of(GetNode("StateChart/Root/WeaponState/InHand"));
_weaponThrown = StateChartState.Of(GetNode("StateChart/Root/WeaponState/Flying"));
_aiming = StateChartState.Of(GetNode("StateChart/Root/Aim/On"));
_simpleDash = StateChartState.Of(GetNode("StateChart/Root/Movement/Dashing/Dash"));
_poweredDash = StateChartState.Of(GetNode("StateChart/Root/Movement/Dashing/PoweredDash"));
_aimedDash = StateChartState.Of(GetNode("StateChart/Root/Movement/Dashing/AimedDash"));
// _actionHanging = StateChartState.Of(GetNode("StateChart/Root/Actions/Hanging"));
_empowerOn = StateChartState.Of(GetNode("StateChart/Root/Empower/On"));
_empowerOff = StateChartState.Of(GetNode("StateChart/Root/Empower/Off"));
_powerExpired = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Expired"));
_powerRecharging = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/AtLeastOneCharge"));
_powerFull = StateChartState.Of(GetNode("StateChart/Root/PowerReserve/Full"));
_grounded = StateChartState.Of(GetNode("StateChart/Root/Movement/Grounded"));
_mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling"));
_movHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging"));
_airborne = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne"));
_coyoteEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne/CoyoteEnabled"));
_simpleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/SimpleJump"));
_doubleJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/DoubleJump"));
_megaJump = StateChartState.Of(GetNode("StateChart/Root/Movement/Jump/MegaJump"));
_doubleJumpEnabled = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne/DoubleJumpEnabled"));
_falling = StateChartState.Of(GetNode("StateChart/Root/Movement/Airborne/Falling"));
_to_weapon_dash = StateChartState.Of(GetNode("StateChart/Root/Movement/Dashing/ToWeaponDash"));
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
_onMegajumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnMegajump"));
_onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging"));
@@ -347,11 +332,11 @@ public partial class PlayerController : CharacterBody3D
Stamina.SetSpeeds(WalkSpeed, WalkSpeed);
EmpoweredActionsLeft = MaxNumberOfEmpoweredActions;
PlaceWeaponForTutorial();
///////////////////////////
// Signal setup ///////////
///////////////////////////
_weaponInHand.StateProcessing += HandleWeaponInHand;
_aiming.StatePhysicsProcessing += HandleAiming;
_aiming.StateEntered += OnAimingEntered;
_aiming.StateExited += ResetTimeScale;
@@ -363,8 +348,6 @@ public partial class PlayerController : CharacterBody3D
_coyoteEnabled.StateEntered += StartCoyoteTime;
_timeScaleAimInAirTimer.Timeout += ResetTimeScale;
// _weaponThrown.StateEntered += OnWeaponThrown;
_powerFull.StateEntered += StopPowerCooldown;
_powerFull.StateExited += StartPowerCooldown;
@@ -401,8 +384,12 @@ public partial class PlayerController : CharacterBody3D
_onJumpFromWall.Taken += OnJumpFromWall;
_onMegajumpFromWall.Taken += OnMegajumpFromWall;
}
private bool _canDashAirborne = true;
public void OnTutorialDone(Node3D _)
{
TutorialDone = true;
GD.Print("tutorial done");
}
public void OnWallDetected()
{
@@ -833,6 +820,14 @@ public partial class PlayerController : CharacterBody3D
{
_playerState.SendEvent("dash_finished");
}
public void PlaceWeaponForTutorial()
{
RemoveChild(WeaponRoot);
GetTree().GetRoot().CallDeferred(Node.MethodName.AddChild, WeaponRoot);
WeaponRoot.CallDeferred(Node3D.MethodName.SetGlobalPosition, TutorialWeaponTarget.GlobalPosition);
WeaponSystem.CallDeferred(WeaponSystem.MethodName.PlaceWeaponForTutorial, TutorialWeaponTarget.GlobalPosition);
}
public void ThrowWeapon()
{
@@ -914,7 +909,7 @@ public partial class PlayerController : CharacterBody3D
public bool CanPerformEmpoweredAction()
{
return EmpoweredActionsLeft > 0;
return EmpoweredActionsLeft > 0 && TutorialDone;
}
public void PerformEmpoweredAction()
@@ -949,13 +944,6 @@ public partial class PlayerController : CharacterBody3D
_playerState.SendEvent("grounded");
}
// Regular processes
public void HandleWeaponInHand(float delta)
{
if (WeaponSystem.InHandState.Active)
RotateWeaponWithPlayer();
}
///////////////////////////
// Stateless logic ////////
///////////////////////////
@@ -1105,12 +1093,15 @@ public partial class PlayerController : CharacterBody3D
CameraModifications((float) delta);
HandleStairs((float) delta);
if (WeaponSystem.InHandState.Active && !_aiming.Active)
if (WeaponSystem.InHandState.Active)
RotateWeaponWithPlayer();
if (WeaponSystem.InHandState.Active && !_aiming.Active && TutorialDone)
{
DashIndicatorMesh.Visible = false;
}
if (!WeaponSystem.InHandState.Active)
if (!WeaponSystem.InHandState.Active && TutorialDone)
{
DashIndicatorMesh.Visible = true;