示例#1
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            KeyboardState keyState = Keyboard.GetState();

            #region Keyboard Control
            if (keyState.IsKeyDown(Keys.W))
            {
                units[0].MoveUnit(new Vector2(0, 1));
            }
            if (keyState.IsKeyDown(Keys.S))
            {
                units[0].MoveUnit(new Vector2(0, -1));
            }
            if (keyState.IsKeyDown(Keys.A))
            {
                units[0].MoveUnit(new Vector2(-1, 0));
            }
            if (keyState.IsKeyDown(Keys.D))
            {
                units[0].MoveUnit(new Vector2(1, 0));
            }

            if (keyState.IsKeyDown(Keys.Q))
            {
                units[0].Fire();
            }

            if (keyState.IsKeyDown(Keys.Up))
            {
                units[1].MoveUnit(new Vector2(0, 1));
            }
            if (keyState.IsKeyDown(Keys.Down))
            {
                units[1].MoveUnit(new Vector2(0, -1));
            }
            if (keyState.IsKeyDown(Keys.Left))
            {
                units[1].MoveUnit(new Vector2(-1, 0));
            }
            if (keyState.IsKeyDown(Keys.Right))
            {
                units[1].MoveUnit(new Vector2(1, 0));
            }

            if (keyState.IsKeyDown(Keys.Escape))
            {
                foreach (BaseUnit unit in units)
                {
                    unit.Reset();
                }
            }
            #endregion

            #region Gamepad Control
            state = BeastyStates.Normal;
            foreach (Controller controller in controllers)
            {
                if (controller.Update(gameTime) == ControllerState.Exit)
                {
                    this.Exit();
                }
                if (controller.paused)
                {
                    state = BeastyStates.Paused;
                }
            }
            #endregion

            #region Units and Camera Update
            // Updates each unit
            if (state == BeastyStates.Normal)
            {
                if (projectiles.Count > 0)
                {
                    projectiles.RemoveAll(i => i.life <= 0);

                    foreach (BaseUnit projectile in projectiles)
                    {
                        projectile.Update(gameTime);
                    }
                }

                foreach (BaseUnit unit in units)
                {
                    unit.Update(gameTime);
                }

                // HAHA, ridiculous, no sense of momentum >__<
                // try using p=mv to conserve momentum, mmmmkay?
                if (Collider.collides(this.units[0], this.units[1]))
                {
                    this.units[0].Collide(this.units[1]);
                    //this.units[1].Collide(this.units[0]);
                }

                cameraPosition.Z = Math.Min(7000f, Math.Max(1000f,
                                                            Vector2.Distance(units[0].position, units[1].position) * 1.2f));
                cameraLookAt.X   = (units[0].position.X + units[1].position.X) / 2;
                cameraLookAt.Y   = (units[0].position.Y + units[1].position.Y) / 2;
                cameraPosition.X = cameraLookAt.X;
                cameraPosition.Y = cameraLookAt.Y;

                base.Update(gameTime);
            }
            #endregion
        }
示例#2
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            KeyboardState keyState = Keyboard.GetState();

            #region Keyboard Control
            if (keyState.IsKeyDown(Keys.W)) { units[0].MoveUnit(new Vector2(0, 1)); }
            if (keyState.IsKeyDown(Keys.S)) { units[0].MoveUnit(new Vector2(0, -1)); }
            if (keyState.IsKeyDown(Keys.A)) { units[0].MoveUnit(new Vector2(-1, 0)); }
            if (keyState.IsKeyDown(Keys.D)) { units[0].MoveUnit(new Vector2(1, 0)); }

            if (keyState.IsKeyDown(Keys.Q)) { units[0].Fire(); }

            if (keyState.IsKeyDown(Keys.Up)) { units[1].MoveUnit(new Vector2(0, 1)); }
            if (keyState.IsKeyDown(Keys.Down)) { units[1].MoveUnit(new Vector2(0, -1)); }
            if (keyState.IsKeyDown(Keys.Left)) { units[1].MoveUnit(new Vector2(-1, 0)); }
            if (keyState.IsKeyDown(Keys.Right)) { units[1].MoveUnit(new Vector2(1, 0)); }

            if (keyState.IsKeyDown(Keys.Escape))
            {
                foreach (BaseUnit unit in units) { unit.Reset(); }
            }
            #endregion

            #region Gamepad Control
            state = BeastyStates.Normal;
            foreach (Controller controller in controllers)
            {
                if (controller.Update(gameTime) == ControllerState.Exit) this.Exit();
                if (controller.paused) {
                    state = BeastyStates.Paused;

                }
            }
            #endregion

            #region Units and Camera Update
            // Updates each unit
            if(state == BeastyStates.Normal)
            {
                if (projectiles.Count > 0)
                {
                    projectiles.RemoveAll(i => i.life <= 0);

                    foreach (BaseUnit projectile in projectiles)
                    { projectile.Update(gameTime); }
                }

                foreach (BaseUnit unit in units)
                { unit.Update(gameTime); }

                // HAHA, ridiculous, no sense of momentum >__<
                // try using p=mv to conserve momentum, mmmmkay?
                if (Collider.collides(this.units[0], this.units[1]))
                {
                    this.units[0].Collide(this.units[1]);
                    //this.units[1].Collide(this.units[0]);
                }

                cameraPosition.Z = Math.Min(7000f, Math.Max(1000f,
                    Vector2.Distance(units[0].position, units[1].position) * 1.2f));
                cameraLookAt.X = (units[0].position.X + units[1].position.X) / 2;
                cameraLookAt.Y = (units[0].position.Y + units[1].position.Y) / 2;
                cameraPosition.X = cameraLookAt.X;
                cameraPosition.Y = cameraLookAt.Y;

                base.Update(gameTime);
            }
            #endregion
        }