public void Suivre(Unite unite) { List <Unite> liste = new List <Unite> { }; double distance = Outil.DistanceUnites(this, unite); bool ok = distance > Portee * Map.TailleTiles.X; if (ok) { foreach (Unite u in Map.unites) { if (Outil.DistanceUnites(this, u) <= 1 * Map.TailleTiles.X) { if (u != unite && u != this) { liste.Add(u); } } } suivreactuel = 0; List <Noeud> chemin = PathFinding.TrouverChemin(PositionTile, unite.PositionTile, Map.Taille, liste, Map.unitesStatic, false); if (chemin != null) { ObjectifListe = chemin; ObjectifListe.RemoveAt(0); } else { ObjectifListe.Clear(); body.LinearVelocity = Vector2.Zero; } } else { suivreactuel++; } }
public virtual void Deplacer() { if (ObjectifListe.Count > 0) { // Bug, je sais pas pourquoi // body.Position = ConvertUnits.ToSimUnits(new Vector2((float)Math.Round(ConvertUnits.ToDisplayUnits(body.Position.X)), (float)Math.Round(ConvertUnits.ToDisplayUnits(body.Position.Y) ))); // HAUT GAUCHE if (PositionTile.X > ObjectifListe[0].Position.X && PositionTile.Y > ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(-Vitesse / 1.41f, -Vitesse / 1.41f) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = true; if (direction != Direction.HautGauche || Animation.Count == 0) { Animation = packAnimation.HautDroite(); } direction = Direction.HautGauche; } // HAUT DROITE else if (PositionTile.X < ObjectifListe[0].Position.X && PositionTile.Y > ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(Vitesse / 1.41f, -Vitesse / 1.41f) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = false; if (direction != Direction.HautDroite || Animation.Count == 0) { Animation = packAnimation.HautDroite(); } direction = Direction.HautDroite; } // BAS DROITE else if (PositionTile.X < ObjectifListe[0].Position.X && PositionTile.Y < ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(Vitesse / 1.41f, Vitesse / 1.41f) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = false; if (direction != Direction.BasDroite || Animation.Count == 0) { Animation = packAnimation.BasDroite(); } direction = Direction.BasDroite; } // BAS GAUCHE else if (PositionTile.X > ObjectifListe[0].Position.X && PositionTile.Y < ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(-Vitesse / 1.41f, Vitesse / 1.41f) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = true; if (direction != Direction.BasGauche || Animation.Count == 0) { Animation = packAnimation.BasDroite(); } direction = Direction.BasGauche; } // GAUCHE else if (PositionTile.X > ObjectifListe[0].Position.X) { body.LinearVelocity = new Vector2(-Vitesse, 0) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = true; if (direction != Direction.Gauche || Animation.Count == 0) { Animation = packAnimation.Droite(); } direction = Direction.Gauche; } // DROITE else if (PositionTile.X < ObjectifListe[0].Position.X) { body.LinearVelocity = new Vector2(Vitesse, 0) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = false; if (direction != Direction.Droite || Animation.Count == 0) { Animation = packAnimation.Droite(); } direction = Direction.Droite; } // HAUT else if (PositionTile.Y > ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(0, -Vitesse) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = false; if (direction != Direction.Haut || Animation.Count == 0) { Animation = packAnimation.Haut(); } direction = Direction.Haut; } // BAS else if (PositionTile.Y < ObjectifListe[0].Position.Y) { body.LinearVelocity = new Vector2(0, Vitesse) * Map.gametime.ElapsedGameTime.Milliseconds; FlipH = false; if (direction != Direction.Bas || Animation.Count == 0) { Animation = packAnimation.Bas(); } direction = Direction.Bas; } else { ObjectifListe.RemoveAt(0); } } else { body.LinearVelocity *= 0.01f; } }