/// <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 }
/// <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 }