public static LevelStateChangeEventArgs Create(LevelData levelData, EnumLevelState lastState, EnumLevelState currentState, object userData = null)
        {
            LevelStateChangeEventArgs levelStateChangeEventArgs = ReferencePool.Acquire <LevelStateChangeEventArgs>();

            levelStateChangeEventArgs.LevelData    = levelData;
            levelStateChangeEventArgs.LastState    = lastState;
            levelStateChangeEventArgs.CurrentState = currentState;
            return(levelStateChangeEventArgs);
        }
        private void OnLevelStateChange(object sender, GameEventArgs e)
        {
            LevelStateChangeEventArgs ne = (LevelStateChangeEventArgs)e;

            if (ne == null)
            {
                return;
            }

            if (ne.CurrentState == EnumLevelState.Pause)
            {
                levelControl.Pause();
            }
            else if (ne.LastState == EnumLevelState.Pause)
            {
                levelControl.Resume();
            }
        }
        private void OnLevelStateChange(object sender, GameEventArgs e)
        {
            LevelStateChangeEventArgs ne = (LevelStateChangeEventArgs)e;

            if (ne == null)
            {
                return;
            }

            if (ne.CurrentState == EnumLevelState.Normal)
            {
                btnStartWave.gameObject.SetActive(false);
                waveInfoPanel.SetActive(true);

                Level level = dataLevel.CurrentLevel;
                SetWaveInfo(level.CurrentWaveIndex, level.WaveCount, 0);
            }
            else if (ne.CurrentState == EnumLevelState.Prepare)
            {
                btnStartWave.gameObject.SetActive(true);
                waveInfoPanel.SetActive(false);
            }
        }