/// <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; } }
/// <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); }