public LevelState(string name, int startLevel) : base(name) { Camera = new FirstPersonCamera(); Camera.BoundingRadius = 2.0f; Camera.UpdateBoundingVolumes(); YnG.ShowMouse = (GameConfiguration.EnabledMouse ? true : false); YnG.AudioManager.SoundEnabled = GameConfiguration.EnabledSound; YnG.AudioManager.MusicVolume = GameConfiguration.MusicVolume; groundPlayerBoundingSphere = new BoundingSphere(Camera.Position, Camera.BoundingRadius); _mazeLevel = new MazeLevel(startLevel); Add(_mazeLevel); _gameHUD = new GameHUD(); timeTimer = new MazeTimer(); score = new Score(startLevel); gameState = MazeGameState.Playing; elapsedPartyTime = 0; soundTimer = new YnTimer(1000, 0); if (YnG.AudioManager.SoundEnabled) { soundTimer.Completed += (s, e) => YnG.AudioManager.SoundEnabled = true; } else { soundTimer.Completed += (s, e) => { } }; control = new MazeController(Camera); Scene.SceneLight.AmbientIntensity = 0.85f; Scene.SceneLight.DirectionalLights[0].Enabled = true; Scene.SceneLight.DirectionalLights[0].Direction = new Vector3(-1, 0.75f, -1); Scene.SceneLight.DirectionalLights[0].DiffuseColor = Color.WhiteSmoke.ToVector3(); Scene.SceneLight.DirectionalLights[0].DiffuseIntensity = 1.0f; Scene.SceneLight.DirectionalLights[0].SpecularColor = new Vector3(233, 33, 33); }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (gameState == MazeGameState.Playing) { if (YnG.Keys.JustPressed(Keys.Escape) || YnG.Gamepad.JustPressed(PlayerIndex.One, Buttons.Back)) { gameState = MazeGameState.Terminated; OnExitRequest(EventArgs.Empty); } soundTimer.Update(gameTime); elapsedPartyTime += gameTime.ElapsedGameTime.Milliseconds; timeTimer.Update(gameTime.ElapsedGameTime.Milliseconds); _gameHUD.Update(gameTime); _gameHUD.Time = timeTimer.ToString(); control.Update(gameTime); #if DEBUG if (YnG.Keys.JustPressed(Keys.F8)) { OnLevelFinished(new LevelFinishEventArgs(score, (_mazeLevel.Id + 1), false)); } #endif string collider = control.ValidatePosition(_mazeLevel.Walls); if (collider == "END") { gameState = MazeGameState.Ending; UpdateScore(50); } else if (collider == "WALL") { if (YnG.AudioManager.SoundEnabled) { YnG.AudioManager.PlaySound("Audio/bat", 1.0f, 1.0f, 0.0f); YnG.AudioManager.SoundEnabled = false; soundTimer.Start(); } } groundPlayerBoundingSphere.Center = new Vector3(Camera.Position.X, 1, Camera.Position.Z); foreach (YnMeshModel model in _mazeLevel.Items) { if (model.Active) { if (groundPlayerBoundingSphere.Intersects(model.BoundingSphere)) { YnG.AudioManager.PlaySound("Audio/kristal", 1.0f, 1.0f, 0.0f); UpdateScore((model as AnimatedItemMesh).Points); _gameHUD.MiniMap.UpdateItemStatus(Camera.X, Camera.Z); _gameHUD.UpdateNbCrystals(); model.Active = false; } } } if (_gameHUD.MiniMap.Enabled) { _gameHUD.MiniMap.UpdatePlayerPosition(Camera.X, Camera.Z); } if (virtualPad.Enabled) { virtualPad.Update(gameTime); } } else if (gameState == MazeGameState.Ending) { gameState = MazeGameState.Terminated; bool finishedGame = false; int nextLevel = (_mazeLevel.Id + 1); if (nextLevel > GameConfiguration.LevelCount) { nextLevel = 1; finishedGame = true; } score.ElapsedTime = elapsedPartyTime; OnLevelFinished(new LevelFinishEventArgs(score, nextLevel, finishedGame)); } }