Ejemplo n.º 1
0
 /// <summary>
 /// met le schema dans le monde</br>
 /// cree accessoirement les chunk non cree en mode non generer
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="monde"></param>
 public void AppliquerSchema(int x, int y, Monde monde)
 {
     foreach (string block in blocks.Keys)
     {
         string[] s = block.Split('/');
         monde.SetBlock(x + int.Parse(s[0]), y + int.Parse(s[1]), blocks[block]);
     }
     foreach (Entite ent in entites)
     {
         Entite t = ent.Clone();
         t.Tp(t.X + x, t.Y + y);
         monde.Entites.Add(t);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// attaque
        /// </summary>
        /// <param name="joueur"></param>
        /// <returns>return true si tu dois rafraichir l'image</returns>
        public virtual bool CliqueGauche(Entite ent, int dommage, Monde monde)
        {
            int dommageAFaire = dommage;

            if (ent != null && ent is Joueur joueur)
            {
                Item item = joueur.Barre.GetItem(joueur.Maindroite);
                if (item is Arme arme)
                {
                    dommageAFaire = arme.Degat;
                }
            }
            vie -= dommageAFaire;
            if (vie <= 0)
            {
                monde.Entites.Remove(this);
                return(true);
            }
            return(false);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Permet de Sauvegarder un monde à l'endroit que tu veux</br>
        /// System.IO.Directory.GetCurrentDirectory() pour recuperer le dossier de l'application
        /// </summary>
        /// <param name="monde"></param>
        /// <param name="path"></param>
        public static void SauvegarderMonde(Monde monde, string path)
        {
            if (Directory.Exists(path))
            {
                Directory.Delete(path, true);
            }

            Directory.CreateDirectory(path);
            File.WriteAllLines(path + "\\info.txt", new string[] { "Generateur:" + monde.Generateur.Nom, "Seed:" + monde.Generateur.Noise.Seed });

            Directory.CreateDirectory(path + "\\Entities");
            for (int i = 0; i < monde.Entites.Count; i++)
            {
                Entite ent = monde.Entites[i];
                Directory.CreateDirectory(path + "\\Entities\\" + i + "." + ent.id());
                ent.Sauvegarder(path + "\\Entities\\" + i + "." + ent.id());
            }

            foreach (KeyValuePair <string, Chunk> chunks in monde.Chunks)
            {
                string[] s = chunks.Key.Split('/');
                string   c = s[0] + "." + s[1] + "." + chunks.Value.Generer;

                Directory.CreateDirectory(path + "\\Chunks\\" + c);
                for (int bx = 0; bx < 16; bx++)
                {
                    for (int by = 0; by < 16; by++)
                    {
                        Block block = chunks.Value.Blocks[bx, by];
                        if (block != null)
                        {
                            Directory.CreateDirectory(path + "\\Chunks\\" + c + "\\" + bx + "." + by + "." + block.Name);
                            block.Sauvegarder(path + "\\Chunks\\" + c + "\\" + bx + "." + by + "." + block.Name);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
 public virtual bool Equals(Entite ent)
 {
     return(ent != null && GetType() == ent.GetType() && x == ent.x && y == ent.y && vie == ent.vie);
 }
Ejemplo n.º 5
0
        /// <summary>
        /// place un block si ni a rien
        /// </summary>
        /// <param name="joueur"></param>
        /// <param name="bx"></param>
        /// <param name="by"></param>
        /// <param name="block"></param>
        /// <param name="entite"></param>
        /// <param name="monde"></param>
        /// <returns></returns>
        public override Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
        {
            if (block == null && entite == null)
            {
                monde.SetBlock(bx, by, this.block.Clone());
                Item it = Clone();
                it.Quantite = 1;
                joueur.EnleverItem(it);
                return(new Tuple <bool, Tuple <Ecrans, object> >(false, null));
            }

            return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
        }
Ejemplo n.º 6
0
 public override Tuple <bool, Tuple <Ecrans, object> > CliqueGauche(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     //dans le system de degat. les degats de larme son deja pris en compte
     if (entite != null)
     {
         durabiliter--;
         if (durabiliter == 0)
         {
             joueur.EnleverItem(this);
         }
     }
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }
Ejemplo n.º 7
0
 public override Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     //TODO : systeme de paré(se proteger)
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Permet de Charger un monde</br>
        /// System.IO.Directory.GetCurrentDirectory() pour recuperer le dossier de l'application</br>
        /// le monde recuperer (si le dossier du monde exists) il sera dans Sauvegarde.monde</br>
        /// le joueur sera initer avec le monde
        /// </summary>
        /// <param name="path"></param>
        public static void ChargerMonde(string path)
        {
            if (Directory.Exists(path))
            {
                string[]   mondeOptions = File.ReadAllLines(path + "\\info.txt");
                long       seed         = long.Parse(mondeOptions[1].Split(':')[1]);
                Generateur generateur   = null;
                switch (mondeOptions[0].Split(':')[1])
                {
                case "GenerateurParDefault":
                    generateur = new GenerateurParDefault(new Noise(seed));
                    break;

                case "VoidGenerateur":
                    generateur = new VoidGenerateur(new Noise(seed));
                    break;

                case "FlatGenerateur":
                    generateur = new FlatGenerateur(new Noise(seed));
                    break;
                }
                if (generateur != null)
                {
                    string[] ents = Directory.GetDirectories(path + "\\Entities");
                    int      max  = -1;
                    List <KeyValuePair <int, Entite> > entities = new List <KeyValuePair <int, Entite> >();
                    foreach (string entpath in ents)
                    {
                        string[] n   = entpath.Split('\\');
                        string[] a   = n[n.Length - 1].Split('.');
                        Entite   ent = Entite.Entites()[a[1]].Charger(entpath);
                        int      i   = int.Parse(a[0]);
                        if (i > max)
                        {
                            max = i;
                        }
                        entities.Add(new KeyValuePair <int, Entite>(i, ent));
                        if (ent is Joueur j)
                        {
                            joueur = j;
                        }
                    }

                    Entite[] entites = new Entite[max + 1];
                    foreach (KeyValuePair <int, Entite> ent in entities)
                    {
                        entites[ent.Key] = ent.Value;
                    }

                    monde = new Monde(generateur, entites.ToList());

                    string[] chunks = Directory.GetDirectories(path + "\\Chunks");
                    foreach (string cpath in chunks)
                    {
                        string[] blocksFile = Directory.GetDirectories(cpath);

                        Block[,] blocks = new Block[16, 16];

                        foreach (string blockfile in blocksFile)
                        {
                            string[] bnom   = blockfile.Split('\\');
                            string[] bcoord = bnom[bnom.Length - 1].Split('.');
                            int      bx     = int.Parse(bcoord[0]);
                            int      by     = int.Parse(bcoord[1]);
                            Block    block  = Block.Blocks()[bcoord[2]].Charger(blockfile);
                            blocks[bx, by] = block;
                        }

                        string[] cnom    = cpath.Split('\\');
                        string[] coord   = cnom[cnom.Length - 1].Split('.');
                        int      cx      = int.Parse(coord[0]);
                        int      cy      = int.Parse(coord[1]);
                        bool     generer = bool.Parse(coord[2]);
                        monde.SetChunk(cx, cy, new Chunk(blocks, generer));
                    }
                }
            }
        }
Ejemplo n.º 9
0
 public override bool CanPassThrough(Entite entite, bool byGravity)
 {
     return(generateur);
 }
Ejemplo n.º 10
0
 public override Tuple <bool, Tuple <Ecrans, object> > CliqueGauche(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     if (block != null)
     {
         durabiliter--;
         if (durabiliter == 0)
         {
             joueur.EnleverItem(this);
         }
     }
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }
Ejemplo n.º 11
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="joueur"></param>
 /// <param name="bx"></param>
 /// <param name="by"></param>
 /// <param name="block"></param>
 /// <param name="monde"></param>
 /// <returns>
 /// true si effectue le clique droit sur block / entite</br>
 /// null pour rester dans l'ecran</br>
 /// </returns>
 public virtual Tuple <bool, Tuple <Ecrans, object> > CliqueGauche(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     //Attaquer et creuser
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }
Ejemplo n.º 12
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="joueur"></param>
 /// <param name="bx"></param>
 /// <param name="by"></param>
 /// <param name="block"></param>
 /// <param name="monde"></param>
 /// <returns>true si effectue le clique droit sur block / entite</returns>
 public virtual Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }
Ejemplo n.º 13
0
 public override Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     //ouvre inventaire
     return(new Tuple <bool, Tuple <Ecrans, object> >(false, new Tuple <Ecrans, object>(Ecrans.Inventaire, new Inventaire[] { inventaire, joueur.Inventaire, joueur.Barre })));
 }
Ejemplo n.º 14
0
 /// <summary>
 /// si l'entite peut le traverser
 /// </summary>
 /// <param name="ent"></param>
 /// <param name="byGravity"></param>
 /// <returns></returns>
 public virtual bool CanPassThrough(Entite ent, bool byGravity)
 {
     return(false);
 }
Ejemplo n.º 15
0
 public override bool CanPassThrough(Entite ent, bool byGravity)
 {
     return(!byGravity);
 }
Ejemplo n.º 16
0
        public override Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
        {
            Item it = joueur.MainDroit();

            if (it is Casque casque)
            {
                joueur.Barre.SetItem(joueur.Maindroite, joueur.Casque);
                joueur.Casque = casque;
            }
            if (it is Plastron plastron)
            {
                joueur.Barre.SetItem(joueur.Maindroite, joueur.Plastron);
                joueur.Plastron = plastron;
            }
            if (it is Jambiere jambiere)
            {
                joueur.Barre.SetItem(joueur.Maindroite, joueur.Jambiere);
                joueur.Jambiere = jambiere;
            }
            if (it is Botte Botte)
            {
                joueur.Barre.SetItem(joueur.Maindroite, joueur.Botte);
                joueur.Botte = Botte;
            }
            return(new Tuple <bool, Tuple <Ecrans, object> >(false, null));
        }
Ejemplo n.º 17
0
 /// <summary>
 /// mange</br>
 /// N'ENLEVE PAS L'ITEM DE L'INVENTAIRE
 /// </summary>
 /// <param name="joueur"></param>
 /// <param name="bx"></param>
 /// <param name="by"></param>
 /// <param name="block"></param>
 /// <param name="entite"></param>
 /// <param name="monde"></param>
 /// <returns>true si effectue le clique droit sur block / entite</returns>
 public override Tuple <bool, Tuple <Ecrans, object> > CliqueDroite(Joueur joueur, int bx, int by, Block block, Entite entite, Monde monde)
 {
     if (entite == null)
     {
         joueur.Faim += faimRestoree;
         quantite--;
         return(new Tuple <bool, Tuple <Ecrans, object> >(false, null));
     }
     return(new Tuple <bool, Tuple <Ecrans, object> >(true, null));
 }