public byte[] Serialize() { ASCIIEncoding ascii = new ASCIIEncoding(); MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); // Definition du contenu Player p = new Player(); Joueur Local = Outil.GetJoueur(Client.id); // Pathfinding if (Mooved) { p.Mooved = true; List <Noeud> chemin = PathFinding.TrouverChemin(champion.PositionTile, ObjectifPoint, Map.Taille, new List <Unite> { }, Map.unitesStatic, false); p.objectifPointX = chemin[chemin.Count - 1].Position.X; p.objectifPointY = chemin[chemin.Count - 1].Position.Y; Mooved = false; } // Unité visé p.idUniteAttacked = Local.champion.idUniteAttacked; p.LastDeath = Serveur.LastDead; // Unit dernierement morte selon le serveur SendSpell(p); // meme map? p.level = SceneHandler.level; if (lastItemUsed != -1) { p.LastItemUsed = lastItemUsed; lastItemUsed = -1; } if (lastStuffUsed != -1) { p.LastStuffUsed = lastStuffUsed; lastStuffUsed = -1; } formatter.Serialize(stream, p); byte[] buffer = new byte[stream.Length]; stream.Position = 0; stream.Read(buffer, 0, buffer.Length); return(buffer); }
public bool CanReach(Vector2 Position) // renvoie vrai si le projectile peut atteindre sa cible { // le chemin du projectile List <Noeud> trajectoire = PathFinding.TrouverChemin(Position, Tireur.uniteAttacked.PositionTile, Map.Taille, new List <Unite> { }, new Noeud[(int)Map.Taille.X, (int)Map.Taille.Y], false); foreach (Noeud n in trajectoire) { if (Map.unitesStatic[(int)n.Position.X, (int)n.Position.Y] != null) { return(false); } } return(true); }
protected virtual void IA(List <Unite> unitsOnMap) { // Cast un heal si < à la moitié de vie if (Vie <= VieMax / 2 && IsCastable(0)) { Cast(spells[0], Vector2.Zero, null); } if (uniteAttacked != null) { if (IsRanged && NiveauDeBrain >= 3) { NiveauDeBrain = 0; // represente tous les noeuds possibles pour se rapprocher de la cible List <Noeud> Chemin = PathFinding.TrouverChemin(PositionTile, uniteAttacked.PositionTile, Map.Taille, new List <Unite> { }, Map.unitesStatic, false); Projectile = new Projectile(this, uniteAttacked); if (Chemin != null) { foreach (Noeud n in Chemin) // Pour chaque noeud possible { if (Projectile.CanReach(n.Position)) // Si on peut atteindre sa cible depuis ce noeud { ObjectifListe = new List <Noeud> { }; foreach (Noeud n2 in Chemin) // Alors on se déplace sur ce noeud { if (n2 != n) { ObjectifListe.Add(n2); } else { ObjectifListe.Add(n2); break; } } break; } } } OlduniteAttacked = uniteAttacked; uniteAttacked = null; } } }
bool body_OnCollision(Fixture fixtureA, Fixture fixtureB, FarseerPhysics.Dynamics.Contacts.Contact contact) { Unite objet1 = (Unite)(fixtureA.Body.UserData); if (objet1.isAChamp) { if (objet1.ObjectifListe.Count > 0) { Vector2 position = new Vector2((int)(ConvertUnits.ToDisplayUnits(objet1.body.Position.X) / 32), (int)(ConvertUnits.ToDisplayUnits(objet1.body.Position.Y) / 32)); List <Noeud> chemin = PathFinding.TrouverChemin(position, objet1.ObjectifListe[objet1.ObjectifListe.Count - 1].Position, Map.Taille, Map.unites, Map.unitesStatic, false); if (chemin != null) { objet1.ObjectifListe = chemin; } } } return(true); }
public bool DonnerOrdreAttaquer() { Vector2 ObjectifPoint = new Vector2(camera.Position.X + Interface.mouse.X, camera.Position.Y + Interface.mouse.Y) / Map.TailleTiles; ObjectifPoint = new Vector2((int)ObjectifPoint.X, (int)ObjectifPoint.Y); foreach (Unite u in Map.unites) { if (!u.isAChamp && !u.isApnj && Outil.DistancePoints(ObjectifPoint, u.PositionTile) <= 60) { champion.uniteAttacked = u; List <Noeud> chemin = PathFinding.TrouverChemin(champion.PositionTile, ObjectifPoint, Map.Taille, new List <Unite> { }, Map.unitesStatic, false); if (chemin != null) { champion.ObjectifListe = chemin; } return(true); } } return(false); }
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 void DonnerOrdreDeplacer() { if (Interface.mouse.X < CrystalGateGame.graphics.PreferredBackBufferWidth && Interface.mouse.Y < CrystalGateGame.graphics.PreferredBackBufferHeight) { ObjectifPoint = new Vector2(camera.Position.X + Interface.mouse.X, camera.Position.Y + Interface.mouse.Y) / Map.TailleTiles; ObjectifPoint = new Vector2((int)ObjectifPoint.X, (int)ObjectifPoint.Y); List <Noeud> chemin = PathFinding.TrouverChemin(champion.PositionTile, ObjectifPoint, Map.Taille, new List <Unite> { }, Map.unitesStatic, false); if (chemin != null) { if (SceneHandler.gameplayScene.isCoopPlay) { Mooved = true; } else { champion.ObjectifListe = chemin; } } champion.uniteAttacked = null; } }
public static void Unserialize(int IdDuJoueur, byte[] buffer) { // Traitement BinaryFormatter formatter = new BinaryFormatter(); MemoryStream stream = new MemoryStream(buffer); stream.Position = 0; // mettre un try catch Player player = (Player)formatter.Deserialize(stream); if (Outil.GetJoueur(IdDuJoueur) != null && player.level == SceneHandler.level) { Joueur joueur = Outil.GetJoueur(IdDuJoueur); // Pathfinding if (player.Mooved) { List <Noeud> path = PathFinding.TrouverChemin(joueur.champion.PositionTile, new Vector2(player.objectifPointX, player.objectifPointY), Map.Taille, Map.unites, Map.unitesStatic, true); if (path != null) { joueur.champion.ObjectifListe = path; } else { joueur.champion.ObjectifListe.Clear(); } } // Unité ciblé if (player.idUniteAttacked != 0) { foreach (Unite u in Map.unites) { if (u.id == player.idUniteAttacked) { joueur.champion.uniteAttacked = u; } } } else { joueur.champion.uniteAttacked = null; } // Sorts if (player.idSortCast != 0) { Unite u = joueur.champion; List <Spell> toutLesSpellsPossibles = new List <Spell> { new Explosion(u), new Soin(u), new Invisibilite(u), new FurieSanguinaire(u), new Polymorphe(u), new Tempete(u) }; foreach (Spell s in toutLesSpellsPossibles) { if (s.idSort == player.idSortCast) { s.Point = new Vector2(player.pointSortX, player.pointSortY); if (player.idUniteCibleCast != 0) { foreach (Unite un in Map.unites) { if (un.id == player.idUniteCibleCast) { s.UniteCible = un; } } } joueur.champion.Cast(s, new Vector2(player.pointSortX, player.pointSortY), s.UniteCible, true); break; } } } // Clear morts foreach (Unite u in Map.unites) { foreach (byte b in player.LastDeath) { if (u.id == b) { u.Vie = 0; break; } } } try { Unite u = joueur.champion; Vector2 v = Vector2.Zero; List <Item> items = new List <Item> { new PotionDeVie(u, v), new PotionDeMana(u, v) }; List <Stuff> stuffs = new List <Stuff> { new BottesDacier(u, v), new Epaulieres(u, v), new EpeeSolari(u, v), new GantsDeDevotion(u, v), new HelmetPurple(u, v), new RingLionHead(u, v) }; // Utilisation inventaire // Objets if (player.LastItemUsed != -1) { bool found = false; // On regarde si il est dans l'inventaire for (int i = 0; i < joueur.champion.Inventory.Count; i++) { if (joueur.champion.Inventory[i].id == player.LastItemUsed) { joueur.champion.Inventory[i].Utiliser(); found = true; break; } } // Sinon on l'ajoute if (!found) { foreach (Item i in items) { if (i.id == player.LastItemUsed) { joueur.champion.Inventory.Add(i); joueur.champion.Inventory[joueur.champion.Inventory.Count - 1].Utiliser(); } } } } // Stuff if (player.LastStuffUsed != -1) { bool found = false; // On regarde si il est dans l'inventaire for (int i = 0; i < joueur.champion.Inventory.Count; i++) { if (joueur.champion.Inventory[i].id == player.LastStuffUsed) { ((Stuff)joueur.champion.Inventory[i]).Equiper(); found = true; break; } } // Sinon on l'ajoute if (!found) { foreach (Stuff s in stuffs) { if (s.id == player.LastStuffUsed) { joueur.champion.Inventory.Add(s); ((Stuff)joueur.champion.Inventory[joueur.champion.Inventory.Count - 1]).Equiper(); } } } } } catch { // On sait jamais } } }