Ejemplo n.º 1
0
        public GameScreen Update(GameTime gameTime)
        {
            for (int i = 0; i < player.Length; i++)
            {
                if (player[i] != null && info[i].HasLives())
                {
                    player[i].Update();
                    if (player[i].IsDead || player[i].Position.Y * MainGame.METER_TO_PIXEL > 1080)
                    {
                        if (info[i].RespawnTimer < 0)
                            info[i].Kill();

                        if (info[i].ShouldRespawn())
                        {
                            player[i].Destroy();
                            if (info[i].HasLives())
                                player[i] = player[i].Respawn();
                            else
                                player[i] = null;
                            info[i].RespawnTimer--;
                        }
                        else
                            info[i].RespawnTimer--;
                    }
                }
            }

            // Update ammo
            foreach (TrapAmmo t in ammo)
                if (t != null)
                    t.Update();

            // Endgame
            if (!gameOver)
            {
                gameOver = true;
                winners.Clear();
                for (int i = 0; i < info.Length; i++)
                {
                    if (info[i].Lives > 0)
                    {
                        winners.Add(i);
                        if (winners.Count >= 2)
                        {
                            gameOver = false;
                            winners.Clear();
                            break;
                        }
                    }
                }

                if (timed && !gameOver)
                {
                    millisLeft -= gameTime.ElapsedGameTime.Milliseconds;
                    if (millisLeft <= 0)
                    {
                        gameOver = true;
                        winners.Add(0);
                        for (int i = 1, max = info[0].Lives; i < info.Length; i++)
                        {
                            if (info[i].Lives > max)
                            {
                                winners.Clear();
                                winners.Add(i);
                                max = info[i].Lives;
                            }
                            else if (info[i].Lives == max)
                                winners.Add(i);
                        }
                    }
                }
            }
            else
            {
                if (winStick == null)
                {
                    winStick = new StickFigure(world, new Vector2(600, 500) * MainGame.PIXEL_TO_METER, Category.None, 3f, 1, 1, false, player[winners[0]].Color);
                    winStick.Stand();
                }
                winStick.Update();
                winStick.ApplyForce(world.Gravity * -1);

                if ((Keyboard.GetState().IsKeyDown(Keys.Enter) || GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.A) || GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.Start)))
                    return GoBack();
            }

            world.Step((float)gameTime.ElapsedGameTime.TotalSeconds);
            return this;
        }
        public void Update(World w)
        {
            if (state != State.SelectingPlayer && state != State.Ready)
                state = GetState();

            if (state == State.Keyboard)
            {
                if (Keyboard.GetState().IsKeyDown(Keys.Enter))
                {
                    if (!joinPressed)
                    {
                        joinPressed = true;
                        usesKeyboard = true;
                        state = State.SelectingPlayer;
                    }
                }
                else
                    joinPressed = false;
            }
            else if (state == State.Controller)
            {
                if (GamePad.GetState(index).IsButtonDown(Buttons.A))
                {
                    if (!joinPressed)
                    {
                        joinPressed = true;
                        state = State.SelectingPlayer;
                    }
                }
                else
                    joinPressed = false;
            }
            else if (state == State.SelectingPlayer)
            {
                if (player == null)
                {
                    player = new StickFigure(w, (position + Vector2.UnitY * 200 + Vector2.UnitX * 250) * MainGame.PIXEL_TO_METER, Category.None, 3f, 1f, 1f, false, LocalPlayer.Colors[selectedColor]);
                    player.Invulnerability = 0;
                    player.Stand();
                }
                else
                {
                    player.Color = LocalPlayer.Colors[selectedColor];
                    player.Update();
                }

                bool pressingLeft, pressingRight, pressingBack;
                if (usesKeyboard)
                {
                    pressingLeft = Keyboard.GetState().IsKeyDown(Keys.Left);
                    pressingRight = Keyboard.GetState().IsKeyDown(Keys.Right);
                    pressingBack = Keyboard.GetState().IsKeyDown(Keys.Back) || Keyboard.GetState().IsKeyDown(Keys.Escape);
                }
                else
                {
                    pressingLeft = GamePad.GetState(index).IsButtonDown(Buttons.DPadLeft) || GamePad.GetState(index).IsButtonDown(Buttons.LeftThumbstickLeft);
                    pressingRight = GamePad.GetState(index).IsButtonDown(Buttons.DPadRight) || GamePad.GetState(index).IsButtonDown(Buttons.LeftThumbstickRight);
                    pressingBack = GamePad.GetState(index).IsButtonDown(Buttons.Back) || GamePad.GetState(index).IsButtonDown(Buttons.B);
                }

                if (pressingLeft)
                {
                    if (!leftPressed)
                    {
                        selectedColor = selectedColor == 0 ? LocalPlayer.Colors.Length - 1 : selectedColor - 1;
                        leftPressed = true;
                    }
                }
                else
                    leftPressed = false;

                if (pressingRight)
                {
                    if (!rightPressed)
                    {
                        selectedColor = selectedColor == LocalPlayer.Colors.Length - 1 ? 0 : selectedColor + 1;
                        rightPressed = true;
                    }
                }
                else
                    rightPressed = false;

                if (pressingBack)
                {
                    if (!backPressed)
                    {
                        backPressed = true;
                        usesKeyboard = false;
                        if (usesKeyboard)
                            state = State.Keyboard;
                        else
                            state = State.Controller;
                    }
                }
                else
                    backPressed = false;

                if ((!usesKeyboard && GamePad.GetState(index).IsButtonDown(Buttons.A)) || (usesKeyboard && Keyboard.GetState().IsKeyDown(Keys.Enter)))
                {
                    if (!joinPressed)
                    {
                        joinPressed = true;
                        state = State.Ready;
                    }
                }
                else
                    joinPressed = false;
            }
            else if (state == State.Ready)
            {
                bool pressingBack;
                if (usesKeyboard)
                    pressingBack = Keyboard.GetState().IsKeyDown(Keys.Escape) || Keyboard.GetState().IsKeyDown(Keys.Back);
                else
                    pressingBack = GamePad.GetState(index).IsButtonDown(Buttons.Back) || GamePad.GetState(index).IsButtonDown(Buttons.B);

                if (pressingBack)
                {
                    if (!backPressed)
                    {
                        state = State.SelectingPlayer;
                        backPressed = true;
                    }
                }
                else
                    backPressed = false;
            }
        }
Ejemplo n.º 3
0
        public GameScreen Update(GameTime gameTime)
        {
            startPause--;
            if (startPause == 0)
            {
                foreach (StickFigure s in player)
                    if (s != null)
                        s.LockControl = false;
            }

            for (int i = 0; i < player.Length; i++)
            {
                if (player[i] != null && info[i].HasLives())
                {
                    player[i].Update();
                    if (player[i].IsDead)
                    {
                        if (info[i].RespawnTimer < 0)
                            info[i].Kill();

                        if (info[i].ShouldRespawn())
                        {
                            player[i].Destroy();
                            if (info[i].HasLives())
                                player[i] = player[i].Respawn();
                            else
                                player[i] = null;
                            info[i].RespawnTimer--;
                        }
                        else
                            info[i].RespawnTimer--;
                    }
                }
            }

            foreach (StickFigure s in enemies)
            {
                s.Update();
                if (s.IsDead && !toRemove.ContainsKey(s))
                {
                    if (!gameOver)
                        kills++;
                    toRemove.Add(s, 255);
                }
            }
            temp.Clear();
            foreach (StickFigure s in from StickFigure s in toRemove.Keys select s)
                if (!temp.Contains(s))
                    temp.Add(s);
            foreach (StickFigure s in temp)
            {
                toRemove[s]--;
                if (toRemove[s] <= 0)
                {
                    enemies.Remove(s);
                    toRemove.Remove(s);
                    s.Destroy();
                }
            }

            if (enemies.Count - toRemove.Count < (int)maxEnemies && startPause < 0)
            {
                enemies.Add(new BotPlayer(world, new Vector2(new Random().Next(1000) + 460, 0) * MainGame.PIXEL_TO_METER, Category.Cat2, 1.5f, this.limbStrength, suddenDeath ? 0.001f : 0.4f, true, Color.White, PlayerIndex.Four, player));
                enemies[enemies.Count - 1].Invulnerability = 0;
            }

            // Update ammo
            foreach (TrapAmmo t in ammo)
                if (t != null)
                    t.Update();

            // Endgame
            if (!gameOver)
            {
                if (maxEnemies < 4)
                    maxEnemies += 0.0002f;
                if (startPause < 0)
                    millis += gameTime.ElapsedGameTime.Milliseconds;
                gameOver = GameIsOver();

                if (Keyboard.GetState().IsKeyDown(Keys.Enter) || GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.Start))
                    enterPressed = true;
            }
            else
            {
                if (winStick == null)
                {
                    winStick = new StickFigure(world, new Vector2(960, 440) * MainGame.PIXEL_TO_METER, Category.None, 3f, 1, 1, true, Color.White);
                    winStick.Invulnerability = 0;
                    winStick.Stand();
                }

                if (winStick != null)
                {
                    winStick.Update();
                    winStick.ApplyForce(world.Gravity * -1);
                }

                if (Keyboard.GetState().IsKeyDown(Keys.Enter) || GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.Start))
                {
                    if (!enterPressed)
                        return GoBack();
                }
                else
                    enterPressed = false;
            }

            world.Step((float)gameTime.ElapsedGameTime.TotalSeconds);
            return this;
        }