public void Update(GameTime gameTime) { for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++) { Enemie enemie = SceneGameplay.enemieManager.lstEnemies[i]; if (enemie.GotHurt) { Damage = enemie.LastDamageTaken; Position = new Vector2(enemie.Position.X, enemie.Position.Y - enemie.BoundingBox.Height / 1.5f); enemie.GotHurt = false; CurrentColor = color; DrawDamage = true; } } if (DrawDamage) { timer += (float)gameTime.ElapsedGameTime.TotalSeconds; CurrentColor = new Color(CurrentColor.R, CurrentColor.G, CurrentColor.B, CurrentColor.A * 0.9f); Position = new Vector2(Position.X, Position.Y - 0.8f); if (timer >= time) { timer = 0; DrawDamage = false; } } }
public void Update(GameTime gameTime) { for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++) { Enemie enemie = SceneGameplay.enemieManager.lstEnemies[i]; if (enemie.Position.Y - enemie.BoundingBox.Height / 2 > currentScene.myCharacter.Position.Y - currentScene.myCharacter.BoundingBox.Height / 2 * 0.7f) { enemie.SetLayer(0f); } else { enemie.SetLayer(1f); } } }
public Champiglu(Enemie pCopy, Vector2 pPosition, Hero pPlayer) : base(pCopy, pPlayer) { Position = pPosition; AnimationList = new Dictionary <string, AnimatedSprite>() { { "walk", new AnimatedSprite(pCopy.lstTextures[0], 25, 100, 25, 25, 0.3f, 2) }, { "attack", new AnimatedSprite(pCopy.lstTextures[1], 25, 100, 25, 25, 0.2f, 2) }, }; CurrentSprite = AnimationList["walk"]; inMovement = false; CurrentState = eState.idle; CurrentSpeed = Speed; spawnPosition = Position; basicAI = new BasicAI(this, pPlayer); }
private void ParticleUpdate(GameTime gameTime, Particle particle) { particle.timer += (float)gameTime.ElapsedGameTime.TotalSeconds; Vector2 newTargetPosition = new Vector2(targetPosition.X + particle.AleaNumber, particle.BeginPosition.Y + (targetPosition.Y - particle.BeginPosition.Y)); Vector2 newPos2 = new Vector2(particle.BeginPosition.X + particle.AleaNumber + (targetPosition.X - particle.BeginPosition.X) * 2 / 3, particle.BeginPosition.Y - 400); particle.Position = new Vector2(particle.Position.X + (float)Math.Cos(particle.Angle) * particle.Velocity.X, particle.Position.Y + (float)Math.Sin(particle.Angle) * particle.Velocity.Y); particle.Velocity *= 1.01f; for (int a = 0; a < SceneGameplay.enemieManager.lstEnemies.Count; a++) { Enemie enemie = SceneGameplay.enemieManager.lstEnemies[a]; if (enemie.BoundingBox.Contains(particle.Position)) { Die(particle); enemie.GetDamage(Damage); if (enemie.CurrentState == Enemie.eState.idle) { enemie.Aggro(); } } } for (int i = 0; i < TileMap.LstCollision.Count; i++) { if (TileMap.LstCollision[i].Contains(particle.Position) || particle.Position.X < 0 || particle.Position.Y < 0 || particle.Position.X >= TileMap.MapWidth * TileMap.TileWidth || particle.Position.Y >= TileMap.MapHeight * TileMap.TileHeight) { Die(particle); } } }
public override void Update(GameTime gameTime) { switch (CurrentState) { case eState.idle: inMovement = false; if (util.getDistance(Position, Player.Position) < RadiusVisionLength && basicAI.CanSeePlayer) { CurrentState = eState.walkTo; } break; case eState.walkTo: inMovement = true; if (util.getDistance(Position, spawnPosition) > 400) { CurrentState = eState.comeBack; } else if (util.getDistance(Position, Player.Position) > 20) { Vector2 pos = TileMap.GetTilePosAt((int)Position.X, (int)Position.Y, 0); Vector2 playerPos = TileMap.GetTilePosAt((int)Player.Position.X, (int)Player.Position.Y, 0); float angle = util.getAngle(Player.Position, Position); Direction = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); if (util.getDistance(Position, Player.Position) > 200) { CurrentSpeed = SprintSpeed; } else { CurrentSpeed = Speed; } Position += Direction * CurrentSpeed; } else if (attackReady && CurrentSprite.count == 0) { CurrentSprite = AnimationList["attack"]; CurrentSprite.count = 0; CurrentState = eState.attack; } break; case eState.attack: inMovement = true; attackTimer += (float)gameTime.ElapsedGameTime.TotalSeconds; Console.WriteLine("test"); if (attackTimer > attackTime) { attackTimer = 0; Console.WriteLine("Attack"); CurrentSprite = AnimationList["walk"]; attackReady = false; CurrentState = eState.walkTo; } break; case eState.comeBack: inMovement = true; if (!(Position.X > spawnPosition.X - 1 && Position.X < spawnPosition.X + 1) && !(Position.Y > spawnPosition.Y - 1 && Position.Y < spawnPosition.Y + 1)) { float angle = util.getAngle(spawnPosition, Position); Direction = new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); Position += Direction * Speed; inMovement = true; } else { CurrentSprite.count = 0; CurrentState = eState.idle; } break; default: break; } if (!attackReady) { attackCooldownTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;; if (attackCooldownTimer > attackCooldown) { attackReady = true; attackCooldownTimer = 0; } } if (inMovement) { CurrentSprite.Update(gameTime); } for (int i = 0; i < SceneGameplay.enemieManager.lstEnemies.Count; i++) { Enemie friend = SceneGameplay.enemieManager.lstEnemies[i]; if (util.getDistance(Position, friend.Position) < 100) { if ((friend.CurrentState == Enemie.eState.attack || friend.CurrentState == Enemie.eState.walkTo) && (CurrentState == eState.idle) && friend != this && basicAI.CanSeePlayer) { Aggro(); } } } if (util.getDistance(Position, Player.Position) < MainGame.ScreenWidth) { basicAI.Update(gameTime); } base.Update(gameTime); }
public Enemie(Enemie pCopy, Hero pPlayer) { //AnimationList = pCopy.AnimationList; Life = pCopy.Life; Player = pPlayer; }
public void AddEnemie(Enemie pEnemie) { lstEnemies.Add(pEnemie); }
public BasicAI(Enemie pEnemie, Hero pPlayer) { enemie = pEnemie; player = pPlayer; primitive = new Primitive(); }