private void SetState(BoostState newState) { if (State != newState) { BoostState oldState = State; State = newState; switch (State) { case BoostState.ReadyToActivate: { } break; case BoostState.Active: { ActiveTimer = Services.ResourceService.Defaults.x20BoostActiveInterval; } break; case BoostState.Locked: { CooldownTimer = Services.ResourceService.Defaults.x20BoostStartCooldown * Mathf.Pow(2, NextCooldownPowerOfTwo); NextCooldownPowerOfTwo++; CooldownInterval = CooldownTimer; } break; } GameEvents.OnBoostX20StateChanged(oldState, State); } }
private void UpdateWithSleepInterval(float sleepInterval) { switch (State) { case BoostState.FirstCharger: { FirstChargerTimer -= sleepInterval; if (FirstChargerTimer <= 0.0f) { SetState(BoostState.ReadyToActivate); } } break; case BoostState.Active: { ActiveTimer -= sleepInterval; if (ActiveTimer <= 0.0f) { float remain = Mathf.Abs(ActiveTimer); CooldownTimer = Services.ResourceService.Defaults.x20BoostStartCooldown * Mathf.Pow(2, NextCooldownPowerOfTwo); NextCooldownPowerOfTwo++; CooldownInterval = CooldownTimer; if (remain > CooldownTimer) { CooldownTimer = 0f; State = BoostState.ReadyToActivate; //Game State Changed GameEvents.OnBoostX20StateChanged(BoostState.Active, BoostState.ReadyToActivate); } else { CooldownTimer -= remain; State = BoostState.Locked; //Game State Chnaged GameEvents.OnBoostX20StateChanged(BoostState.Active, State); } } } break; case BoostState.Locked: { CooldownTimer -= sleepInterval; if (CooldownTimer <= 0.0f) { SetState(BoostState.ReadyToActivate); } } break; } }
private void UpdateWithSleepInterval(float sleepInterval) { switch (State) { case BoostState.FirstCharger: { FirstChargerTimer -= sleepInterval; if (FirstChargerTimer <= 0f) { SetState(BoostState.ReadyToActivate); } } break; case BoostState.Active: { ActiveTimer -= sleepInterval; if (ActiveTimer <= 0f) { float remain = Mathf.Abs(ActiveTimer); CooldownTimer = kCooldownInterval; if (remain >= CooldownTimer) { CooldownTimer = 0f; State = BoostState.ReadyToActivate; GameEvents.OnBoostX20StateChanged(BoostState.Active, BoostState.ReadyToActivate); } else { CooldownTimer -= remain; State = BoostState.Locked; GameEvents.OnBoostX20StateChanged(BoostState.Active, State); } } } break; case BoostState.Locked: { CooldownTimer -= sleepInterval; if (CooldownTimer <= 0f) { SetState(BoostState.ReadyToActivate); } } break; } }
private void SetState(BoostState newState) { if (State != newState) { BoostState oldState = State; State = newState; switch (State) { case BoostState.ReadyToActivate: { } break; case BoostState.Active: { ActiveTimer = kActiveInterval; } break; case BoostState.Locked: { CooldownTimer = kCooldownInterval; } break; } GameEvents.OnBoostX20StateChanged(oldState, State); } }