two empoered actions on cooldown
This commit is contained in:
@ -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();
|
||||
|
Reference in New Issue
Block a user