two empoered actions on cooldown

This commit is contained in:
2025-07-29 11:08:02 +02:00
parent cd9e6da4e9
commit ffdb3366a5
3 changed files with 88 additions and 69 deletions

View File

@ -91,6 +91,9 @@ public partial class PlayerController : CharacterBody3D
private StateChartState _actionHanging;
private StateChartState _empowerOn;
private StateChartState _empowerOff;
private StateChartState _powerExpired;
private StateChartState _powerRecharging;
private StateChartState _powerFull;
private StateChartState _grounded;
private StateChartState _crouched;
@ -114,9 +117,10 @@ public partial class PlayerController : CharacterBody3D
// General use stuff
TweenQueueSystem = GetNode<TweenQueueSystem>("TweenQueueSystem");
PlayerUi = GetNode<PlayerUi>("UI");
DashIndicator = GetNode<TextureRect>("%DashIndicator");
// DashIndicator = GetNode<TextureRect>("%DashIndicator");
DashCooldownIndicator = GetNode<ColorRect>("%DashCooldownIndicator");
DashCooldownIndicator.Visible = false;
EmpoweredActionsLeft = MaxNumberOfDashActions;
// Node3D mapNode = GetTree().Root.FindChild("Map", true, false) as Node3D;
@ -165,6 +169,9 @@ public partial class PlayerController : CharacterBody3D
// _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"));
_standing = StateChartState.Of(GetNode("StateChart/Root/Movement/Grounded/Standing"));
@ -251,42 +258,42 @@ public partial class PlayerController : CharacterBody3D
_dashing.StatePhysicsProcessing += Dashing;
// _weaponThrown.StateEntered += OnWeaponThrown;
_empowerOn.StateEntered += OnEmpowerStarted;
_empowerOn.StateProcessing += HandleEmpower;
_empowerTimeDownscale.Timeout += EmpowerTimerTimeout;
_dashCooldownTimer.Timeout += ResetDashes;
// _empowerOn.StateEntered += OnEmpowerStarted;
// _empowerOn.StateProcessing += HandleEmpower;
// _empowerOff.StateEntered += EmpowerStopped;
// _empowerTimeDownscale.Timeout += EmpowerTimerTimeout;
_powerFull.StateExited += StartDashCooldown;
_powerRecharging.StateEntered += StartDashCooldown;
_powerFull.StateEntered += StopDashCooldown;
_dashCooldownTimer.Timeout += DashCooldownExpired;
_powerRecharging.StateProcessing += PowerRecharging;
_powerExpired.StateProcessing += PowerRecharging;
}
public void ResetDashes()
public void PowerRecharging(float delta)
{
_isDashOnCooldown = false;
var progress = (float) (_dashCooldownTimer.TimeLeft / _dashCooldownTimer.WaitTime);
DashCooldownIndicator.SetSize(new Vector2(100 * progress, 10));
}
public void StartDashCooldown()
{
_dashCooldownTimer.Start();
DashCooldownIndicator.Visible = true;
}
public void StopDashCooldown()
{
_dashCooldownTimer.Stop();
DashCooldownIndicator.Visible = false;
}
public void OnEmpowerStarted()
public void DashCooldownExpired()
{
_empowerTimeDownscale.Start();
}
public void HandleEmpower(float delta)
{
var progress = (float) (_empowerTimeDownscale.TimeLeft / _empowerTimeDownscale.WaitTime);
DashIndicator.SetCustomMinimumSize(Vector2.One * DashIndicatorStartSize * progress);
DashIndicator.Visible = true;
}
public void EmpowerTimerTimeout()
{
EmpowerStopped();
_isDashOnCooldown = true;
_dashCooldownTimer.Start();
}
public void EmpowerStopped()
{
DashIndicator.Visible = false;
_playerState.SendEvent("empower_released");
EmpoweredActionsLeft += 1;
var eventToSend = EmpoweredActionsLeft == MaxNumberOfDashActions ? "fully_charged" : "recharge";
_playerState.SendEvent(eventToSend);
}
///////////////////////////
@ -418,25 +425,20 @@ public partial class PlayerController : CharacterBody3D
private void RestoreEmpoweredActions()
{
EmpoweredActionsLeft = MaxNumberOfDashActions;
// EmpoweredActionsLeft = MaxNumberOfDashActions;
_isWallJumpAvailable = true;
}
public bool CanPerformEmpoweredAction()
{
return !_isDashOnCooldown;
return EmpoweredActionsLeft > 0;
}
public void PerformEmpoweredAction()
{
_isWallJumpAvailable = true;
if (!_isActionPerfectlyTimed)
{
EmpoweredActionsLeft--;
}
_empowerTimeDownscale.Stop();
EmpowerStopped();
EmpoweredActionsLeft--;
_playerState.SendEvent(EmpoweredActionsLeft <= 0 ? "expired" : "power_used");
}
// Jumping
@ -546,8 +548,6 @@ public partial class PlayerController : CharacterBody3D
}
public void OnDashEnded()
{
_playerState.SendEvent("empower_down");
// Regular dash
if (WeaponSystem.InHandState.Active)
{
@ -805,13 +805,6 @@ public partial class PlayerController : CharacterBody3D
///////////////////////////
public override void _PhysicsProcess(double delta)
{
if (_isDashOnCooldown)
{
var progress = (float) (_dashCooldownTimer.TimeLeft / _dashCooldownTimer.WaitTime);
DashCooldownIndicator.SetCustomMinimumSize(new Vector2(100 * progress, 10));
DashCooldownIndicator.Visible = true;
}
TweenQueueSystem.ProcessTweens();
LookAround();