public EnemyHit(string hitID, Rectangle casterRect, Vector2 direction, GameplayScreen gpScreen, int dmgModifier) : base(hitID, casterRect, direction, gpScreen, dmgModifier) { }
public virtual void Update(GameTime gameTime, InputManager inputManager, GameplayScreen gpScreen, Map map, Layer layer) { }
private void DecideDirection(GameTime gameTime, GameplayScreen gpScreen, Map map) { int dist = (int)(Position - map.Player.Position).Length(); if (decisionCounter == 0) { if (dist > VisionRange) { randVal = GlobalRandom.Instance.Next(0, 9); } else { if (dist <= range) { Attack(gpScreen, enemyID + "Hit"); } if (map.Player.Position.X < Position.X && map.Player.Position.Y < Position.Y) { if (Math.Abs(map.Player.Position.Y - Position.Y) > moveAnimation.FrameHeight) { randVal = 5; } else { randVal = 1; } } else if (map.Player.Position.X > Position.X && map.Player.Position.Y < Position.Y) { if (Math.Abs(map.Player.Position.Y - Position.Y) > moveAnimation.FrameHeight) { randVal = 4; } else { randVal = 0; } } else if (map.Player.Position.Y > Position.Y) { if (Math.Abs(map.Player.Position.X - Position.X) > moveAnimation.FrameWidth) { randVal = 7; } else { randVal = 3; } } else if (map.Player.Position.Y < Position.Y) { if (Math.Abs(map.Player.Position.X - Position.X) > moveAnimation.FrameWidth) { randVal = 6; } else { randVal = 2; } } decisionCounter += 5; } } decisionCounter += (int)gameTime.ElapsedGameTime.TotalMilliseconds; if (decisionCounter > decisionCounterLimit) { decisionCounter = 0; } }
public override void Update(GameTime gameTime, InputManager inputManager, GameplayScreen gpScreen, Map map, Layer layer) { if (Health <= 0) { Dead = true; } if (inputManager.KeyPressed(Keys.Space)) { Attack(gpScreen, "PlayerHit"); } if (inputManager.KeyPressed(Keys.V)) { Attack(gpScreen, "PlayerMeleeHit"); } if (inputManager.KeyPressed(Keys.Y)) { TakeDamage(40); } moveAnimation.IsActive = true; bool keyDown = false; Vector2 testPosition = Position; if (inputManager.KeyDown(Keys.Right)) { moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 2); testPosition.X += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; } if (inputManager.KeyDown(Keys.Left)) { moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 1); testPosition.X -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; } if (inputManager.KeyDown(Keys.Up)) { moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 3); testPosition.Y -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; } if (inputManager.KeyDown(Keys.Down)) { moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 0); testPosition.Y += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; } if (!keyDown) { moveAnimation.IsActive = false; } List <Collision.Type> collisionCheck = new List <Collision.Type>(); foreach (List <Tile> tilesRow in layer.Tiles) { foreach (Tile tile in tilesRow) { if (tile.State1 == Tile.State.Solid) { if (Collision.CheckCollision( new Rectangle((int)testPosition.X, (int)testPosition.Y, moveAnimation.FrameWidth, moveAnimation.FrameHeight), new Rectangle((int)tile.Position.X, (int)tile.Position.Y, tile.TileImage.Width, tile.TileImage.Height))) { if (Position.X > tile.Position.X - moveAnimation.FrameWidth && Position.X < tile.Position.X + tile.TileImage.Width) { testPosition.Y = Position.Y; } if (Position.Y > tile.Position.Y - moveAnimation.FrameHeight && Position.Y < tile.Position.Y + tile.TileImage.Height) { testPosition.X = Position.X; } } collisionCheck.Clear(); } } } if (testPosition.X < 0) { testPosition.X = 0; } if (testPosition.Y < 0) { testPosition.Y = 0; } if (testPosition.X > layer.Bounds.X - moveAnimation.FrameWidth) { testPosition.X = layer.Bounds.X - moveAnimation.FrameWidth; } if (testPosition.Y > layer.Bounds.Y - moveAnimation.FrameHeight) { testPosition.Y = layer.Bounds.Y - moveAnimation.FrameHeight; } Position = testPosition; moveAnimation.Position = Position; ssAnimation.Update(gameTime, ref moveAnimation); Camera.Instance.SetFocalPoint(Position); }
public override void Update(GameTime gameTime, InputManager inputManager, GameplayScreen gpScreen, Map map, Layer layer) { if (Health <= 0) { Dead = true; DropItem(gpScreen); } if (InCameraRange()) { moveAnimation.IsActive = true; bool keyDown = false; DecideDirection(gameTime, gpScreen, map); Vector2 testPosition = Position; switch (randVal) { case 0: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 2); testPosition.X += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 1: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 1); testPosition.X -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 2: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 3); testPosition.Y -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 3: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 0); testPosition.Y += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 4: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 3); testPosition.X += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; testPosition.Y -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 5: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 3); testPosition.X -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; testPosition.Y -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 6: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 0); testPosition.X += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; testPosition.Y += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; case 7: moveAnimation.CurrentFrame = new Vector2(moveAnimation.CurrentFrame.X, 0); testPosition.X -= moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; testPosition.Y += moveSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds; keyDown = true; break; } if (!keyDown) { moveAnimation.IsActive = false; } foreach (List <Tile> tilesRow in layer.Tiles) { foreach (Tile tile in tilesRow) { if (tile.State1 == Tile.State.Solid) { if (Collision.CheckCollision( new Rectangle((int)testPosition.X, (int)testPosition.Y, moveAnimation.FrameWidth, moveAnimation.FrameHeight), new Rectangle((int)tile.Position.X, (int)tile.Position.Y, tile.TileImage.Width, tile.TileImage.Height))) { if (Position.X > tile.Position.X - moveAnimation.FrameWidth && Position.X < tile.Position.X + tile.TileImage.Width) { testPosition.Y = Position.Y; } if (Position.Y > tile.Position.Y - moveAnimation.FrameHeight && Position.Y < tile.Position.Y + tile.TileImage.Height) { testPosition.X = Position.X; } } } } } if (testPosition.X < 0) { testPosition.X = 0; } if (testPosition.Y < 0) { testPosition.Y = 0; } if (testPosition.X > layer.Bounds.X - moveAnimation.FrameWidth) { testPosition.X = layer.Bounds.X - moveAnimation.FrameWidth; } if (testPosition.Y > layer.Bounds.Y - moveAnimation.FrameHeight) { testPosition.Y = layer.Bounds.Y - moveAnimation.FrameHeight; } Position = testPosition; moveAnimation.Position = Position; ssAnimation.Update(gameTime, ref moveAnimation); } else { moveAnimation.IsActive = false; } }