Exemple #1
0
        public void ChangeState(gxGameState pState, bool destroyPrevious = true)
        {
            Common.UDebug.Assert(m_stateIndex >= 0);
            m_pStateStack[m_stateIndex].Release();
            if (destroyPrevious)
            {
                m_pStateStack[m_stateIndex] = null;
            }
            m_stateIndex--;


            if (pState == null)
            {
                Common.UDebug.Assert(false, "Tried to add a NULL state !!");
                ClearStateStack();
            }

            Common.UDebug.Assert(m_stateIndex < GAME_STATES_STACK_SIZE);

            m_stateIndex++;
            m_pStateStack[m_stateIndex] = pState;

            int result = pState.Initalize();

            if (result < 0)
            {
                Common.UDebug.Log(" state create failed with " + result);
                Common.UDebug.Assert(false, "Failed to create the current state!!!!");
                ClearStateStack();
            }
            else
            {
                pState.Resume();
            }
        }
Exemple #2
0
    //等这一帧运行完,在进行调用
    protected void LateChangeState(GameStateEnum eGameStateEnum)
    {
        if (m_curGameStateEnum == eGameStateEnum)
        {
            return;
        }
        if (m_gameState != null)
        {
            m_gameState.Exit();
            m_gameState.Deinitialization();
            m_gameState = null;
        }

        switch (eGameStateEnum)
        {
        case GameStateEnum.GameStateEnum_Login:
        case GameStateEnum.GameStateEnum_Resert:
            m_gameState = new GameLoginState();
            break;
        }
        m_gameState.Initalize();
        if (eGameStateEnum == GameStateEnum.GameStateEnum_Resert)
        {
            eGameStateEnum = GameStateEnum.GameStateEnum_Login;
        }
        m_curGameStateEnum = eGameStateEnum;
    }
Exemple #3
0
        void ClearStateStack()
        {
            while (m_stateIndex >= 0)
            {
                m_pStateStack[m_stateIndex].Pause();
                m_pStateStack[m_stateIndex].Release();
                m_pStateStack[m_stateIndex] = null;
                m_stateIndex--;
            }

            ResetTouch();

            while (m_pStatePushed.Count > 0)
            {
                m_pStatePushed.Pop();
            }
            m_pStatePoped = null;
        }
Exemple #4
0
        public void Update(float timestamp)
        {
            if (m_pStatePoped != null)
            {
                m_pStatePoped.Pause();
                m_pStatePoped.Release();
                m_stateIndex--;

                if (m_stateIndex >= 0)
                {
                    m_pStateStack[m_stateIndex].Resume();
                }
                ResetTouch();

                m_pStatePoped = null;
            }

            if (m_pStatePushed.Count > 0)
            {
                gxGameState pState = m_pStatePushed.Pop();

                if (pState == null)
                {
                    Common.UDebug.Assert(false, "Tried to add a NULL state !!!");
                    ClearStateStack();
                }

                Common.UDebug.Assert(m_stateIndex < GAME_STATES_STACK_SIZE);

                gxGameState oldState = CurrentState();
                if (oldState != null)
                {
                    oldState.Pause();
                }
                m_stateIndex++;
                m_pStateStack[m_stateIndex] = pState;

                if (pState.Initalize() < 0)
                {
                    Common.UDebug.Assert(false, "Failed to create the current state!!!!");
                    ClearStateStack();
                }
                else
                {
                    pState.Resume();
                    pState.SetLoading(true);
                }
                ResetTouch();
            }

            if (m_stateIndex < 0)
            {
                return;
            }
            if (m_pStateStack[m_stateIndex].IsLoading())
            {
                m_pStateStack[m_stateIndex].SetLoading(m_pStateStack[m_stateIndex].Load());
            }
            else
            {
                m_pStateStack[m_stateIndex].Update(timestamp);
            }
        }
Exemple #5
0
 public override void Initalize()
 {
     m_stateIndex  = -1;
     m_pStatePoped = null;
 }
Exemple #6
0
 public void PopState(bool bResume)
 {
     Common.UDebug.Assert(m_stateIndex >= 0);
     m_pStatePoped = m_pStateStack[m_stateIndex];
     m_pStateStack [m_stateIndex] = null;     //解除引用
 }
Exemple #7
0
 public void PushState(gxGameState pState)
 {
     m_pStatePushed.Add(pState);
 }