예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }