public void Update(GW gw) { Angle = gw.hero.Angle - 180; Advance(starSpeed); this.Respawn(); }
/// <summary> /// Fonction dont le rôle est d'assurer le comportement de l'ennemi de base en toutes /// cirsonstances. L'ennemi suivra un parcourt aléatoire lorsqu'il ne détectera pas le /// joueur et foncera sur celui-ci s'il le perçoit tout en ouvrant le feu. Retourner VRAI /// si l'ennemi est toujours considéré comme vivant. /// </summary> /// <param name="deltaT">Représente la vitesse de rafraichissement du jeu</param> /// <param name="gw">Représente le jeu</param> /// <returns>Vaux VRAI si l'ennemi est toujours considéré comme viable et FAUX dans le cas contraire</returns> public override bool Update(Single deltaT, GW gw) { //Initialisation de l'effet de particule gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(enemyColor.R, enemyColor.G, enemyColor.B, (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.55f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1))); //En stade de spawn... if (IsSpawning) { Advance(1.50f); if (DateTime.Now >= timeSpawn) { spawnMusic.Play(); IsSpawning = false; //Trouver une cible aléatoire cible = new Vector2f(rnd.Next(15, GW.WIDTH - 50), rnd.Next(15, GW.HEIGHT - 50)); angleCible = TargetAngle(cible); timeInvMax = new DateTimeOffset(DateTime.Now.AddSeconds(3.40f)); } } //En stade de repérage if (DateTime.Now > timeChase) { BasicEnemySpeed = 0.17f; if (this.Position.X >= cible.X - 5 && this.Position.X <= cible.X + 5 && this.Position.Y >= cible.Y - 5 && this.Position.Y <= cible.Y + 5 || DateTime.Now > timeInvMax) { timeInvMax = DateTime.Now.AddSeconds(rnd.Next(2, 4)); cible = new Vector2f(rnd.Next(30, GW.WIDTH - 30), rnd.Next(30, GW.HEIGHT - 30)); angleCible = TargetAngle(cible); } if (Angle > angleCible) { Rotate(-BasicEnemySpeed); } else if (Angle < angleCible) { Rotate(BasicEnemySpeed); } if (Angle < TargetAngle(gw.hero.Position) + 10 && Angle > TargetAngle(gw.hero.Position) - 10) { timeChase = DateTime.Now.AddSeconds(rnd.Next(6, 15 + 1)); } Advance(BasicEnemySpeed); } //En stade de tir else if (DateTime.Now < timeChase) { BasicEnemySpeed = 0.50f; float angleCible = TargetAngle(gw.hero.Position); if (Angle > angleCible + 12) { Rotate(-90 * deltaT); } else if (Angle < angleCible - 12) { Rotate(90 * deltaT); } else if (rnd.Next(0, 45 + 1) == 1) { for (int i = 0; i < 4; i++) { fireSound.Play(); gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 0)); gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 90)); gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 180)); gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 7.50f, 360 / this.Size / 2, 270)); } } Advance(BasicEnemySpeed); } return(true); }
/// <summary> /// Fonction dont le rôle est d'assurer le comportement de l'ennemi de base en toutes /// cirsonstances. L'ennemi suivra un parcourt aléatoire lorsqu'il ne détectera pas le /// joueur et foncera sur celui-ci s'il le perçoit tout en ouvrant le feu. Retourner VRAI /// si l'ennemi est toujours considéré comme vivant. /// </summary> /// <param name="deltaT">Représente la vitesse de rafraichissement du jeu</param> /// <param name="gw">Représente le jeu</param> /// <returns>Vaux VRAI si l'ennemi est toujours considéré comme viable et FAUX dans le cas contraire</returns> public override bool Update(Single deltaT, GW gw) { //Initialisation de l'effet de particule gw.AddParticle(new Particle(Position.X, Position.Y, 4, new Color(enemyColor.R, enemyColor.G, enemyColor.B, (byte)rnd.Next(25, 255 + 1)), 5.35f, 0.55f, -rnd.Next(180 - (int)Angle - 5, 180 - (int)Angle + 5 + 1))); //En stade de spawn... if (IsSpawning) { Advance(1.50f); if (DateTime.Now >= timeSpawn) { spawnMusic.Play(); IsSpawning = false; //Trouver une cible aléatoire cible = new Vector2f(rnd.Next(15, GW.WIDTH - 50), rnd.Next(15, GW.HEIGHT - 50)); angleCible = TargetAngle(cible); timeInvMax = new DateTimeOffset(DateTime.Now.AddSeconds(3.40f)); } } //En stade de repérage if (DateTime.Now > timeChase) { BasicEnemySpeed = 0.75f; if (canExplode) { canExplode = false; } if (Color.R != 63) { if (Color.R > 63) { enemyColor.R -= (byte)1; Color = enemyColor; } else if (Color.R < 63) { enemyColor.R += (byte)1; Color = enemyColor; } } if (this.Position.X >= cible.X - 5 && this.Position.X <= cible.X + 5 && this.Position.Y >= cible.Y - 5 && this.Position.Y <= cible.Y + 5 || DateTime.Now > timeInvMax) { timeInvMax = DateTime.Now.AddSeconds(rnd.Next(2, 4)); cible = new Vector2f(rnd.Next(30, GW.WIDTH - 30), rnd.Next(30, GW.HEIGHT - 30)); angleCible = TargetAngle(cible); } if (Angle > angleCible) { Rotate(-BasicEnemySpeed); } else if (Angle < angleCible) { Rotate(BasicEnemySpeed); } if (Angle < TargetAngle(gw.hero.Position) + 10 && Angle > TargetAngle(gw.hero.Position) - 10 && Math.Abs(Position.X) + 5 >= Math.Abs(gw.hero.Position.X) && Math.Abs(Position.Y) + 5 >= Math.Abs(gw.hero.Position.Y)) { timeChase = DateTime.Now.AddSeconds(rnd.Next(12, 15 + 1)); } Advance(BasicEnemySpeed); } //En stade de chasse else if (DateTime.Now < timeChase) { canExplode = true; BasicEnemySpeed = 0.75f; if (Color.R != 191) { if (Color.R > 191) { enemyColor.R -= (byte)1; Color = enemyColor; } else if (Color.R < 191) { enemyColor.R += (byte)1; Color = enemyColor; } //Tirer de façons aléatoire for (int i = 0; i < 2; i++) { gw.AddProjectile(new Projectile(CharacterType.ENNEMI, Position.X, Position.Y, 4, enemyColor, 5.00f, this.Size / 100, rnd.Next(0, 360 + 1))); } } } return(true); }
public void Update(GW gw) { Advance(Speed); }
public bool Update(GW gw) { if (Keyboard.IsKeyPressed(Keyboard.Key.Up)) { Advance(heroSpeed); //"flamme" derrière le hero gw.particles.Add(new Particule(Position.X, Position.Y, Color.Yellow, 1.3f, Angle - rnd.Next(170, 190), 5)); } if (Keyboard.IsKeyPressed(Keyboard.Key.Down)) { Advance(-heroSpeed); } if (Keyboard.IsKeyPressed(Keyboard.Key.Right)) { Rotate(5); } if (Keyboard.IsKeyPressed(Keyboard.Key.Left)) { Rotate(-5); } if (Keyboard.IsKeyPressed(Keyboard.Key.Space)) { if (fireDelay.Enabled == false) { fireDelay.Enabled = true; gw.projectiles.Add(new Projectile(CharacterType.Hero, Position.X, Position.Y, 0, Color.Blue, Angle, 10)); } } if (Keyboard.IsKeyPressed(Keyboard.Key.Return)) { //effet de la bombe if (bombDelay.Enabled == false) { if (nbBombs > 0) { for (int i = 0; i < 360; i++) { gw.particles.Add(new Particule(Position.X, Position.Y, Color.Yellow, 0.5f, i, 25)); } foreach (Enemy enemy in gw.enemies) { gw.enemiesToRemove.Add(enemy); } foreach (Enemy enemy in gw.basicEnemies) { gw.enemiesToRemove.Add(enemy); } nbBombs--; } bombDelay.Enabled = true; } } if (Keyboard.IsKeyPressed(Keyboard.Key.F4)) { gw.CurrentLanguage = Language.French; } if (Keyboard.IsKeyPressed(Keyboard.Key.F5)) { gw.CurrentLanguage = Language.English; } return(true); }