protected override void Update(GameTime gameTime) { Global.gameTime = gameTime; Global.input.Update(); Global.networkManager.update(); if (Global.input.isFirstPress(Keys.OemTilde) || Global.input.isFirstPress(Buttons.DPadDown, PlayerIndex.One) || Global.input.isFirstPress(Buttons.DPadDown, PlayerIndex.Two) || Global.input.isFirstPress(Buttons.DPadDown, PlayerIndex.Three) || Global.input.isFirstPress(Buttons.DPadDown, PlayerIndex.Four)) { Global.debugMode = !Global.debugMode; //Toggle mode } switch (Global.gameState) { #region Intro case Global.GameState.Intro: splashTimer += Global.gameTime.ElapsedGameTime.Milliseconds; if (splashTimer > SPLASH_LENGTH || Global.input.isFirstPress(Buttons.A) || Global.input.isFirstPress(Buttons.Start) || Global.input.isFirstPress(Keys.Space) || Global.input.isFirstPress(Keys.Enter) || Global.input.isFirstPress(Keys.A)) { splashTimer = 0; Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.Menu; } break; #endregion //Intro #region Menu case Global.GameState.Menu: // Allows the game to exit if (Global.input.DetectBackPressedByAnyPlayer()) { this.Exit(); } switch (mainMenu.update()) { case 0: //Single Player Global.networkManager.hostSessionType = NetworkManager.HostSessionType.Host; Global.gameState = Global.GameState.SetupSinglePlayer; break; case 1: //Create New Game (Networking or Local) Global.networkManager.hostSessionType = NetworkManager.HostSessionType.Host; Global.gameState = Global.GameState.SetupLocalPlayers; break; case 2: //Join Game Global.gameState = Global.GameState.SetupLocalPlayers; Global.networkManager.hostSessionType = NetworkManager.HostSessionType.Client; break; case 3: //Heatmaps Global.debugMode = true; Global.gameState = Global.GameState.SetupLocalPlayersHeatmap; Global.networkManager.hostSessionType = NetworkManager.HostSessionType.Host; break; case 4: //Exit this.Exit(); break; } break; #endregion //Menu #region CreateMenu case Global.GameState.CreateMenu: if (Global.input.isFirstPress(Buttons.B)) { Global.gameState = Global.GameState.Menu; } switch (createGameMenu.update()) { case 0: //Local Global.networkManager.sessionType = NetworkSessionType.Local; Global.gameState = Global.GameState.LevelPicking; break; case 1: //System Link Global.networkManager.sessionType = NetworkSessionType.SystemLink; Global.gameState = Global.GameState.LevelPicking; break; case 2: //Player Match Global.networkManager.sessionType = NetworkSessionType.PlayerMatch; Global.gameState = Global.GameState.LevelPicking; break; } break; #endregion //CreateMenu #region JoinMenu case Global.GameState.JoinMenu: if (Global.input.isFirstPress(Buttons.B)) { Global.gameState = Global.GameState.Menu; } switch (joinGameMenu.update()) { case 0: //System Link Global.networkManager.sessionType = NetworkSessionType.SystemLink; Global.gameState = Global.GameState.Lobby; int localIndex1 = 1; if (Global.networkManager.joinSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex1++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } break; case 1: //Player Match Global.networkManager.sessionType = NetworkSessionType.PlayerMatch; Global.gameState = Global.GameState.Lobby; int localIndex2 = 1; if (Global.networkManager.joinSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex2++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } break; } break; #endregion //JoinMenu #region SetupLocalPlayers case Global.GameState.SetupLocalPlayers: setupLocalPlayers(); break; #endregion //SetupLocalPlayers #region SetupSinglePlayer case Global.GameState.SetupSinglePlayer: setupSinglePlayer(); break; #endregion //SetupSinglePlayer #region LevelPicking case Global.GameState.LevelPicking: if (Global.input.isFirstPress(Buttons.B)) { Global.gameState = Global.GameState.Menu; } switch (levelMenu.update()) { case 0: Global.gameState = Global.GameState.Lobby; Global.levelManager.currentLevel = 1; int localIndex = 1; if (Global.networkManager.createSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } break; case 1: Global.gameState = Global.GameState.Lobby; Global.levelManager.currentLevel = 2; localIndex = 1; if (Global.networkManager.createSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } break; case 2: Global.gameState = Global.GameState.Lobby; Global.networkManager.createSession(); Global.levelManager.currentLevel = 3; localIndex = 1; foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } break; } break; #endregion //LevelPicking #region Lobby case Global.GameState.Lobby: if (Global.networkManager.currentState == NetworkManager.CurrentState.Running) { if (Global.input.isFirstPress(Buttons.B)) { Global.gameState = Global.GameState.Menu; Global.networkManager.disposeNetworkSession(); } else if (Global.networkManager.hostSessionType == NetworkManager.HostSessionType.Host && Global.networkManager.networkSession.AllGamers.Count > 1 && (Global.input.isFirstPress(Buttons.A) || Global.input.isFirstPress(Buttons.Start))) { Global.networkManager.announceLevel(Global.levelManager.currentLevel); Global.networkManager.networkSession.StartGame(); Global.levelManager.setupLevel(); } } break; #endregion //Lobby #region SetupLocalPlayersHeatmap case Global.GameState.SetupLocalPlayersHeatmap: setupLocalPlayersHeatmap(); break; #endregion #region ChooseHeatmap case Global.GameState.ChooseHeatmap: switch (levelMenu.update()) { case 0: //Level 1 Global.levelManager.currentLevel = 1; Global.levelManager.setupLevel(); int localIndex = 1; if (Global.networkManager.createSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } Global.menusong.Stop(); Global.actionsong.Play(); Global.gameState = Global.GameState.playingHeatmap; break; case 1: //Level 2 Global.levelManager.currentLevel = 2; Global.levelManager.setupLevel(); int localIndex2 = 1; if (Global.networkManager.createSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex2++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } Global.menusong.Stop(); Global.actionsong.Play(); Global.gameState = Global.GameState.playingHeatmap; break; case 2: //Level 3 Global.levelManager.currentLevel = 3; Global.levelManager.setupLevel(); int localIndex3 = 1; if (Global.networkManager.createSession()) { foreach (LocalNetworkGamer gamer in Global.networkManager.networkSession.LocalGamers) { gamer.Tag = new LocalPlayer(Vector3.Zero, gamer.SignedInGamer.PlayerIndex, localIndex3++, gamer); Global.localPlayers.Add((LocalPlayer)gamer.Tag); } } Global.menusong.Stop(); Global.actionsong.Play(); Global.gameState = Global.GameState.playingHeatmap; break; } break; #endregion #region PlayHeatmap case Global.GameState.playingHeatmap: //commented music //Global.menusong.Stop(); //Global.actionsong.Play(); debug = true; if (!Global.debugMode) { Global.debugMode = true; } foreach (LocalPlayer player in Global.localPlayers) { player.update(); //if(player.isJuggernaught == true) then do the bugbot check else do nothing foreach (BugBot bot in Global.bugBots) { if ((bot.Position - player.Position).Length() < BugBot.ATTACK_RADIUS) { //shoot a bullet at the player if he is the juggernaught Vector3 dir = player.Position - bot.Position; dir.Normalize(); //bot.ShootBullet(dir); debug = false; } } } Global.BulletManager.update(); levelManager.update(); // Allows the game to exit if (Global.input.DetectBackPressedByAnyPlayer()) { Global.actionsong.Stop(); Global.jetpack.Stop(); Global.networkManager.disposeNetworkSession(); Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.Menu; } break; #endregion #region Playing case Global.GameState.Playing: //commented music //Global.menusong.Stop(); //Global.actionsong.Play(); foreach (LocalPlayer player in Global.localPlayers) { player.update(); if (player.score >= Global.Constants.MAX_SCORE) { for (int i = 0; i < Global.localPlayers.Count; i++) { Global.localPlayers[i].score = 0; } Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.GameOver; Global.winningPlayer = player.gamer.Gamertag; Global.graphics.GraphicsDevice.Viewport = new Viewport(0, 0, Global.viewPort.Width, Global.viewPort.Height); Global.networkManager.announceWinner(player.gamer); break; } } foreach (RemotePlayer rPlayer in Global.remotePlayers) { rPlayer.update(); } Global.BulletManager.update(); levelManager.update(); // Allows the game to exit if (Global.input.DetectBackPressedByAnyPlayer()) { Global.actionsong.Stop(); Global.menusong.Play(); Global.jetpack.Stop(); Global.networkManager.disposeNetworkSession(); Global.gameState = Global.GameState.Menu; } break; #endregion //Playing #region SinglePlayerPlaying case Global.GameState.SinglePlayerPlaying: timeInSinglePlayer += gameTime.ElapsedGameTime.Milliseconds; LocalPlayer singlePlayer = Global.localPlayers[0]; singlePlayer.update(); Global.BulletManager.update(); levelManager.update(); if (timeInSinglePlayer > SINGLE_PLAYER_LENGTH) { finalScore = Global.localPlayers[0].score; Global.networkManager.disposeNetworkSession(); Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.SinglePlayerGameOver; } // Allows the game to exit if (Global.input.DetectBackPressedByAnyPlayer()) { Global.networkManager.disposeNetworkSession(); Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.Menu; } break; #endregion //SinglePlayerPlaying #region Paused case Global.GameState.Paused: break; #endregion //Paused #region GameOver case Global.GameState.GameOver: if (Global.input.isAnyFirstPress(Buttons.A)) { Global.networkManager.disposeNetworkSession(); Global.actionsong.Stop(); Global.menusong.Play(); Global.gameState = Global.GameState.Menu; } break; #endregion //GameOver #region SinglePlayerGameOver case Global.GameState.SinglePlayerGameOver: if (Global.input.isAnyFirstPress(Buttons.A) || Global.input.isAnyFirstPress(Buttons.Start)) { Global.gameState = Global.GameState.Menu; } break; #endregion #region NetworkQuit case Global.GameState.NetworkQuit: if (Global.input.isAnyFirstPress(Buttons.A) || Global.input.isAnyFirstPress(Buttons.Start)) { Global.gameState = Global.GameState.Menu; } break; #endregion //NetworkQuit } base.Update(gameTime); }
public void respawnPlayer(LocalPlayer player) { int index = Global.rand.Next(0, spawnPoints.Count * 100) / 100; //better distribution C# Random sucks player.respawn(spawnPoints[index]); }
public void killed(NetworkGamer killer) { //TODO: Play "Die" noise //TODO: maybe trigger some message? if (!Global.debugMode) { Global.heatmapDeaths.addPoint(position); } if (isJuggernaut) { setAsNotJuggernaut(); if (killer == null) { if (Global.gameState == Global.GameState.SinglePlayerPlaying) { Global.localPlayers[0].score--; } if (Global.networkManager.networkSession.AllGamers.Count == 1) { killer = gamer; } else { int nextJuggernaut = Global.rand.Next(0, Global.networkManager.networkSession.AllGamers.Count); killer = Global.networkManager.networkSession.AllGamers[nextJuggernaut]; while (killer == gamer) { nextJuggernaut = Global.rand.Next(0, Global.networkManager.networkSession.AllGamers.Count); killer = Global.networkManager.networkSession.AllGamers[nextJuggernaut]; } } } if (killer.IsLocal) { LocalPlayer player = killer.Tag as LocalPlayer; player.setAsJuggernaut(); } else { RemotePlayer player = killer.Tag as RemotePlayer; player.setAsJuggernaut(); } Global.networkManager.newJuggernaut(killer); } else if (killer != null) { if (killer.IsLocal) { LocalPlayer player = killer.Tag as LocalPlayer; if (player.isJuggernaut) { player.score++; } } else { Global.networkManager.juggernautKill(); } } Global.levelManager.respawnPlayer(this); }