コード例 #1
0
    private void InitFiniteStateMachine()
    {
        // Init all states
        MainMenuState mainMenu = new MainMenuState(this);

        mainMenu.AddTransition(StateTransition.PressStart, StateID.LevelSelect);

        LevelSelectState levelSelect = new LevelSelectState(this);

        levelSelect.AddTransition(StateTransition.ViewCard, StateID.CardView);
        levelSelect.AddTransition(StateTransition.ChoseLevel, StateID.GameScene);
        levelSelect.AddTransition(StateTransition.ViewOption, StateID.OptionView);
        levelSelect.AddTransition(StateTransition.ViewPay, StateID.PayView);

        CardViewState cardView = new CardViewState(this);

        cardView.AddTransition(StateTransition.BackToLevelSelect, StateID.LevelSelect);

        GameSceneState gameScene = new GameSceneState(this);

        gameScene.AddTransition(StateTransition.BackToLevelSelect, StateID.LevelSelect);

        OptionViewState optionView = new OptionViewState(this);

        optionView.AddTransition(StateTransition.BackToLevelSelect, StateID.LevelSelect);

        PayViewState payView = new PayViewState(this);

        payView.AddTransition(StateTransition.BackToLevelSelect, StateID.LevelSelect);

        // Init finite state machine
        _fsm = new FiniteStateMachine();
        _fsm.AddFiniteState(mainMenu);
        _fsm.AddFiniteState(levelSelect);
        _fsm.AddFiniteState(cardView);
        _fsm.AddFiniteState(gameScene);
        _fsm.AddFiniteState(optionView);
        _fsm.AddFiniteState(payView);
    }
コード例 #2
0
ファイル: SelectLevelModel.cs プロジェクト: schlash/Box-XNA
 /// <summary>
 /// Select next level to the right
 /// </summary>
 private void SelectRight()
 {
     // cant select anything to the right
     if (m_currentIndex >= m_levels.Count - 1)
         return;
     m_currentIndex++;
     m_currentPosition = new Vector2(1, 0);
     m_levelSourcePosition = new Vector2(1, 0);
     m_levelTargetPosition = new Vector2(0, 0);
     m_state = LevelSelectState.LEVEL_SELECT_STATE_ANIMATING;
 }
コード例 #3
0
ファイル: SelectLevelModel.cs プロジェクト: schlash/Box-XNA
 /// <summary>
 /// Select next level to the left
 /// </summary>
 private void SelectLeft()
 {
     // cant select anything to the left..
     if (m_currentIndex == 0)
         return;
     m_currentIndex--;
     m_currentPosition = new Vector2(-1, 0);
     m_levelSourcePosition = new Vector2(-1, 0);
     m_levelTargetPosition = new Vector2(0, 0);
     m_state = LevelSelectState.LEVEL_SELECT_STATE_ANIMATING;
 }
コード例 #4
0
ファイル: SelectLevelModel.cs プロジェクト: schlash/Box-XNA
        /// <summary>
        /// Update model
        /// </summary>
        /// <param name="time">Delta time</param>
        public void Update(GameTime time)
        {
            float elapsedTime = (float)time.ElapsedGameTime.TotalSeconds;
            //

            // Calculate transition interpolation when level
            // selection animation is running.
            if (m_state == LevelSelectState.LEVEL_SELECT_STATE_ANIMATING)
            {
                // Update transition timer
                m_levelTransitionTimer += elapsedTime;
                // Check if the transition is complete
                // Then just set positions to target, and change ingame state to none
                if (m_levelTransitionTimer >= LEVEL_TRANSITION_TIME)
                {
                    m_levelTransitionTimer = 0;
                    m_currentPosition = m_levelTargetPosition;
                    m_state = LevelSelectState.LEVEL_SELECT_STATE_NONE;
                }
                else
                {
                    // Calculate offset in transition.
                    m_currentPosition = m_levelSourcePosition + ((m_levelTargetPosition - m_levelSourcePosition) * (m_levelTransitionTimer / LEVEL_TRANSITION_TIME));
                }
            }
        }