Ejemplo n.º 1
0
        /// <summary>
        /// Enter the scene
        /// </summary>
        /// <param name="parameters">Scene parameters</param>
        public override void Enter(object parameters)
        {
            mGameReady = false;

            var enterParams = (EnterParameters)parameters;

            mResultSet = new ResultSet();
            mConsole   = new Console(new Vector2i((int)(RB.DisplaySize.width * 0.66f), RB.DisplaySize.height / 3));

            if (enterParams.testMap)
            {
                InitializeNewGame.SetupTestGameVariables(ref mPlayer, ref mGameMap);
                mGameState  = GameState.PLAYER_TURN;
                mGameReady  = true;
                mSaveOnExit = true;
            }
            else if (enterParams.savedFilename == null)
            {
                InitializeNewGame.SetupGameVariables(ref mPlayer, ref mGameMap);
                mGameState  = GameState.PLAYER_TURN;
                mGameReady  = true;
                mSaveOnExit = true;
            }
            else
            {
                var ret = DataLoaders.LoadGame(enterParams.savedFilename, ref mPlayer, ref mGameMap, ref mGameState, mConsole);
                if (ret == false)
                {
                    return;
                }
                else
                {
                    mGameReady  = true;
                    mSaveOnExit = true;
                }
            }

            mFOVRecompute = true;
            mFloodMap     = new FloodMap(mGameMap.size);

            mCamera.SetPos(mPlayer);
            ChangeState(GameState.PLAYER_TURN);

            mConsole.Log(C.FSTR.Set("Welcome! Press H for help."));

            RB.MusicPlay(mGameMap.music);
            mCurrentMusic = mGameMap.music;

            RB.MusicVolumeSet(0.75f);

            // If some key is down when entering scene then lock input until all keys are up. This prevents
            // the player accidentally moving
            if (RB.AnyKeyDown())
            {
                mInputLocked = true;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Update scene
        /// </summary>
        /// <returns>True if update consumed</returns>
        public override bool Update()
        {
            // If game is not ready for some reason then bail out to Main Menu
            if (!mGameReady)
            {
                var game = (RetroDungeoneerGame)RB.Game;
                game.ChangeScene(SceneEnum.MAIN_MENU);
                return(false);
            }

            if (mFOVRecompute)
            {
                mGameMap.RecomputeFov(mPlayer, C.FOV_RADIUS);
                mFOVRecompute = false;
            }

            if (mFloodRecompute)
            {
                mFloodMap.Refresh(mPlayer.e.pos, (C.SCREEN_WIDTH / 2) + 2);
                mFloodRecompute = false;
            }

            if (mGameState == GameState.ENEMY_TURN)
            {
                DoEnemyTurn();
                ChangeState(GameState.PLAYER_TURN);
            }
            else
            {
                if (!mInputLocked && DoPlayerTurn())
                {
                    if (mGameState != GameState.LEVEL_UP)
                    {
                        ChangeState(GameState.ENEMY_TURN);
                    }
                }
            }

            mCamera.Follow(mPlayer);

            RenderFunctions.Update();

            SoundBank.Instance.Process();
            EffectManager.Instance.Update(mResultSet);
            HandleEffectResults();

            if (mInputLocked && !RB.AnyKeyDown())
            {
                mInputLocked = false;
            }

            return(false);
        }