コード例 #1
0
        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);
        }
コード例 #2
0
        public void respawnPlayer(LocalPlayer player)
        {
            int index = Global.rand.Next(0, spawnPoints.Count * 100) / 100; //better distribution C# Random sucks

            player.respawn(spawnPoints[index]);
        }
コード例 #3
0
ファイル: Player.cs プロジェクト: marwahaha/Games3Project2
        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);
        }