/// <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) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } // TODO: Add your update logic here if (player.Health > 0) { player.Update(gameTime); } cam.LookAt(player.Position); foreach (Projectile proj in Projectile.projectiles) { proj.Update(gameTime); foreach (Enemy en in Enemy.enemies) { int sum = proj.Radius + en.Radius; if (Vector2.Distance(proj.Postition, en.Position) < sum) { proj.Collided = true; en.Health--; } } if (Obstacle.DidCollide(proj.Postition, proj.Radius)) { proj.Collided = true; } } foreach (Enemy en in Enemy.enemies) { en.Update(gameTime, player.Position); int sum = player.Radius + en.Radius; if (Vector2.Distance(player.Position, en.Position) < sum && player.HealthTimer <= 0) { player.Health--; player.HealthTimer = 1.5F; } } Projectile .projectiles .RemoveAll(p => p.Collided); Enemy .enemies .RemoveAll(e => e.Health <= 0); base.Update(gameTime); }
public void Update(GameTime gameTime, Vector2 playerPos) { float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; // this new Vector2D points to player position Vector2 moveDir = playerPos - position; /* sitas sutrumpina vektoriaus ilgi i vieneta. * this makes vector length equal to one. It does not matter how long Vector was. * So vector points to the same position, only his length will be equal to one. * It makes easier to work with. */ moveDir.Normalize(); Vector2 temPos = position; // at the end "* dt" protects from frame drops. temPos += moveDir * speed * dt; if (!Obstacle.DidCollide(temPos, radius)) { position += moveDir * speed * dt; } }
public void Update(GameTime gameTime) { KeyboardState kState = Keyboard.GetState(); float dt = (float)gameTime.ElapsedGameTime.TotalSeconds; if (healthTimer > 0) { healthTimer -= dt; } /// <summary> /// this one liner is a better version of switch statement below. /// Because "directions" is enum, so basically /// it resolves to [0, 1, 2, 3] /// </summary> animSprite = animations[(int)direction]; //switch (direction) //{ // case Dir.Down: // animSprite = animations[0]; // break; // case Dir.Up: // animSprite = animations[1]; // break; // case Dir.Left: // animSprite = animations[2]; // break; // case Dir.Right: // animSprite = animations[3]; // break; // default: // break; //} // for stopping character to always moving if (isMoving) { animSprite.Update(gameTime); } else { animSprite.SetFrame(1); } #region Changing direction // every frame will be false and only if keys are down, it will be true isMoving = false; if (kState.IsKeyDown(Keys.Right)) { direction = Dir.Right; isMoving = true; } if (kState.IsKeyDown(Keys.Left)) { direction = Dir.Left; isMoving = true; } if (kState.IsKeyDown(Keys.Up)) { direction = Dir.Up; isMoving = true; } if (kState.IsKeyDown(Keys.Down)) { direction = Dir.Down; isMoving = true; } #endregion if (isMoving) { // holding current player position at this particular moment Vector2 tempPos = position; switch (direction) { case Dir.Right: tempPos.X += speed * dt; if (!Obstacle.DidCollide(tempPos, radius)) { position.X += speed * dt; } break; case Dir.Left: tempPos.X -= speed * dt; if (!Obstacle.DidCollide(tempPos, radius)) { position.X -= speed * dt; } break; case Dir.Up: tempPos.Y -= speed * dt; if (!Obstacle.DidCollide(tempPos, radius)) { position.Y -= speed * dt; } break; case Dir.Down: tempPos.Y += speed * dt; if (!Obstacle.DidCollide(tempPos, radius)) { position.Y += speed * dt; } break; default: break; } } // this makes projectile shoot once only when Space key is pressed down if (kState.IsKeyDown(Keys.Space) && kStateOld.IsKeyUp(Keys.Space)) { Projectile.projectiles.Add(new Projectile(position, direction)); } kStateOld = kState; }
//============= // ===UPDATE=== //============= protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } // TODO: Add your update logic here if (player.Health > 0) { player.Update(gameTime); } // shooting projectiles foreach (Projectile proj in Projectile.projectiles) { proj.Update(gameTime); } // executing all enemies updates foreach (Enemy en in Enemy.enemies) { en.Update(gameTime, player.Position); } // checking for enemy collision with projectiles. // On collision destroying enemies and projectiles foreach (Projectile proj in Projectile.projectiles) { foreach (Enemy en in Enemy.enemies) { int sum = proj.Radius + en.Radius; if (Vector2.Distance(proj.Position, en.Position) < sum) { proj.Collided = true; en.Health--; } } if (Obstacle.DidCollide(proj.Position, proj.Radius)) { proj.Collided = true; } } // checking if enemies colliding with the player foreach (Enemy en in Enemy.enemies) { int sum = player.Radius + en.Radius; if (Vector2.Distance(player.Position, en.Position) < sum && player.HealthTimer <= 0) { player.Health--; player.HealthTimer = 1.5f; } } // actually destroying enemies and projectiles Projectile.projectiles.RemoveAll(p => p.Collided == true); Enemy.enemies.RemoveAll(e => e.Health <= 0); base.Update(gameTime); }// end of UPDATE