Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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;
                }
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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++;
            }
        }
Esempio n. 7
0
        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;
            }
        }
Esempio n. 8
0
        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
                }
            }
        }