protected override void InitTris()
        {
            AddTri <Acte>("Nom prénom croissant", b => b.OrderBy(o => (o is Bapteme) ? (o as Bapteme).Nom :
                                                                 (o is Sepulture) ? (o as Sepulture).Nom :
                                                                 (((this.Nom != null) && (o as Mariage).Epouse.Nom.Contains(this.Nom)) || ((this.Prenom != null) && (o as Mariage).Epouse.Prenom.Contains(this.Prenom)) ?
                                                                  (o as Mariage).Epouse.Nom : (o as Mariage).Epoux.Nom))
                          .ThenBy(o => (o is Bapteme) ? (o as Bapteme).Prenom :
                                  (o is Sepulture) ? (o as Sepulture).Prenom :
                                  (((this.Nom != null) && (o as Mariage).Epouse.Nom.Contains(this.Nom)) || ((this.Prenom != null) && (o as Mariage).Epouse.Prenom.Contains(this.Prenom)) ?
                                   (o as Mariage).Epouse.Prenom : (o as Mariage).Epoux.Prenom)));


            AddTri <Acte>("Nom prénom décroissant", b => b.OrderByDescending(o => (o is Bapteme) ? (o as Bapteme).Nom :
                                                                             (o is Sepulture) ? (o as Sepulture).Nom :
                                                                             (((this.Nom != null) && (o as Mariage).Epouse.Nom.Contains(this.Nom)) || ((this.Prenom != null) && (o as Mariage).Epouse.Prenom.Contains(this.Prenom)) ?
                                                                              (o as Mariage).Epouse.Nom : (o as Mariage).Epoux.Nom))
                          .ThenByDescending(o => (o is Bapteme) ? (o as Bapteme).Prenom :
                                            (o is Sepulture) ? (o as Sepulture).Prenom :
                                            (((this.Nom != null) && (o as Mariage).Epouse.Nom.Contains(this.Nom)) || ((this.Prenom != null) && (o as Mariage).Epouse.Prenom.Contains(this.Prenom)) ?
                                             (o as Mariage).Epouse.Prenom : (o as Mariage).Epoux.Prenom)));

            AddTri <Acte>("Registre paroissial croissant", o => o.OrderBy(p => p.ParoisseRegistre.Nom + " - " + p.AnneeRegistreParoissial));
            AddTri <Acte>("Registre paroissial décroissant", o => o.OrderByDescending(p => p.ParoisseRegistre.Nom + " - " + p.AnneeRegistreParoissial));
            AddTri <Acte>("Page croissante", o => o.OrderBy(p => p.Pages.ListePagesTexte));
            AddTri <Acte>("Page décroissante", o => o.OrderByDescending(p => p.Pages.ListePagesTexte));


            Tri = Tris.First();
        }
        /// <summary>
        /// Méthode Click qui met à jour la liste auxiliaire si la checkbox est cliquée
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CheckBoxFavoris_Click(object sender, RoutedEventArgs e)
        {
            if (CheckBoxFavoris.IsChecked == true)                                  // vérifie si la textbox est cochée
            {
                Manager.ListeJeuxAux = Tris.TriFavoris(true, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux mis en favori par l'utilisateur connecté

                if (Manager.ListeJeuxAux.Count() == 0)                              // Si aucun jeu dans la liste de favoris alors message pr utilisateur disant qu'il faut qu'il en ajoute pr utiliser cette chekbox et remise à 0 de la liste auxiliaire
                {
                    ReinitialiserListeAux();
                    ReinitialiserCombobox();
                    MessageBox.Show("Vous n'avez pour l'instant ajouté aucun jeu à votre liste de favoris, veuillez en ajouter pour afficher votre liste de favori", "Erreur recherche", MessageBoxButton.OK, MessageBoxImage.Information);
                    CheckBoxFavoris.IsChecked = false;
                }
            }
            else if (CheckBoxFavoris.IsChecked == false)                             // Affichage des jeux non-favoris
            {
                Manager.ListeJeuxAux = Tris.TriFavoris(false, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux non favori de l'utilisateur connecté
            }

            if (Manager.ListeJeuxAux.Count() == 0)
            {
                ReinitialiserListeAux();
                ReinitialiserCombobox();
            }
        }
        private void UpdateTriangles()
        {
            int vertInd = (LoopCount - 1) * Config.VertsPerLoop;

            for (int i = 0; i < Config.VertsPerLoop - 1; i++)
            {
                Tris.Add(vertInd);
                Tris.Add(vertInd + Config.VertsPerLoop);
                Tris.Add(vertInd + Config.VertsPerLoop + 1);
                Tris.Add(vertInd);
                Tris.Add(vertInd + Config.VertsPerLoop + 1);
                Tris.Add(vertInd + 1);
                vertInd++;
            }

            //seam triangles
            Tris.Add(vertInd);
            Tris.Add(vertInd + Config.VertsPerLoop);
            Tris.Add(vertInd + 1);
            Tris.Add(vertInd);
            Tris.Add(vertInd + 1);
            Tris.Add(vertInd - Config.VertsPerLoop + 1);

            Mesh.SetTriangles(Tris, 0);
            Mesh.RecalculateNormals();
        }
Example #4
0
 public TexturedTestCube() : base("Resources/Objects/Cube.obj")
 {
     Debug.WriteLine(String.Join("\n", Tris.Select(i => i.ToStringFull()).ToArray()));
     Recalculate();
     Texture  = new Texture("Resources/Textures/Default.jpg", false);
     Name     = "TexturedTestCube";
     Position = new Vector3(0, 0, 0);
 }
Example #5
0
        public Mesh AddTris(Tri[] tris)
        {
            List <Tri> temp = Tris.ToList();

            temp.AddRange(tris);
            Tris = temp.ToArray();
            return(this);
        }
        private bool FlipIfNeeded(Tris trisA, Tris trisB, TrisVertex newPoint, out Tris rt)
        {
            var indexB     = trisB.IndexOfPoint(newPoint);
            var indexBNext = indexB < 2 ? indexB + 1 : 0;
            var indexBPrev = indexB > 0 ? indexB - 1 : 2;

            var indexA    = trisA.IndexOfThirdPoint(trisB[indexBNext], trisB[indexBPrev]);
            var downPoint = trisA[indexA];

            var indexANext = indexA < 2 ? indexA + 1 : 0;
            var indexAPrev = indexA > 0 ? indexA - 1 : 2;

            var needAnotherCut = trisA.IsPointBrokeDelaunay(newPoint);

            if (!needAnotherCut)
            {
                needAnotherCut = trisB.IsPointBrokeDelaunay(downPoint);
            }

            if (needAnotherCut)
            {
                // запоминаем треугольники, "ниже"

                var trA = downPoint.FindAnotherTrisWith(trisA, trisA[indexANext], downPoint);
                var trB = downPoint.FindAnotherTrisWith(trisA, trisA[indexAPrev], downPoint);

                // рубим по другому образуемый этими треугольниками четырехугольник.
                trisA[indexAPrev].Trises.Remove(trisA);
                trisB[indexBPrev].Trises.Remove(trisB);

                trisA.Points[indexAPrev] = newPoint;
                trisB.Points[indexBPrev] = downPoint;

                newPoint.Trises.Add(trisA);
                downPoint.Trises.Add(trisB);

                // вызываем рекурсивно для внутренних
                rt = trisA;
                Tris tmp;

                if (trA != null)
                {
                    if (FlipIfNeeded(trA, trisA, newPoint, out tmp))
                    {
                        rt = tmp;
                    }
                }

                if (trB != null)
                {
                    FlipIfNeeded(trB, trisB, newPoint, out tmp);
                }
                return(true);
            }

            rt = null;
            return(false);
        }
Example #7
0
        /////////PARENTS FUNCTION//////////
        public override void Load(BinaryReader reader, int size)
        {
            if (size < 20)
            {
                isEmpty = true;
                return;
            }
            someNumber = reader.ReadUInt32();
            uint triggerCount = reader.ReadUInt32();
            uint groupCount   = reader.ReadUInt32();
            uint triCount     = reader.ReadUInt32();
            uint vertexCount  = reader.ReadUInt32();

            Triggers.Clear();
            Groups.Clear();
            Tris.Clear();
            Vertices.Clear();
            for (int i = 0; i < triggerCount; i++)
            {
                Trigger trg = new Trigger
                {
                    X1    = reader.ReadSingle(),
                    Y1    = reader.ReadSingle(),
                    Z1    = reader.ReadSingle(),
                    Flag1 = reader.ReadInt32(),
                    X2    = reader.ReadSingle(),
                    Y2    = reader.ReadSingle(),
                    Z2    = reader.ReadSingle(),
                    Flag2 = reader.ReadInt32()
                };
                Triggers.Add(trg);
            }
            for (int i = 0; i < groupCount; i++)
            {
                GroupInfo grp = new GroupInfo
                {
                    Size   = reader.ReadUInt32(),
                    Offset = reader.ReadUInt32()
                };
                Groups.Add(grp);
            }
            for (int i = 0; i < triCount; i++)
            {
                ColTri tri    = new ColTri();
                ulong  legacy = reader.ReadUInt64();
                tri.Vert1   = (int)(legacy & mask);
                tri.Vert2   = (int)((legacy >> 18 * 1) & mask);
                tri.Vert3   = (int)((legacy >> 18 * 2) & mask);
                tri.Surface = (int)(legacy >> (18 * 3));
                Tris.Add(tri);
            }
            for (int i = 0; i < vertexCount; i++)
            {
                Pos vtx = new Pos(reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle(), reader.ReadSingle());
                Vertices.Add(vtx);
            }
        }
Example #8
0
        public void RemoveTri(Tri t)
        {
            // First remove all references to this tri from its points.
            foreach (Point p in t.Points)
            {
                p.Tris.Remove(t);
            }

            Tris.Remove(t);
        }
Example #9
0
        protected override void InitTris()
        {
            AddTri <Pretre>("Nom prénom croissant", o => o.OrderBy(p => p.Nom).ThenBy(p => p.Prenom));
            AddTri <Pretre>("Nom prénom décroissant", o => o.OrderByDescending(p => p.Nom).ThenByDescending(p => p.Prenom));
            AddTri <Pretre>("Naissance croissante", o => o.OrderBy(p => p.AnneeNaissance));
            AddTri <Pretre>("Naissance décroissante", o => o.OrderByDescending(p => p.AnneeNaissance));
            AddTri <Pretre>("Décès croissant", o => o.OrderBy(p => p.AnneeDeces));
            AddTri <Pretre>("Décès décroissant", o => o.OrderByDescending(p => p.AnneeDeces));

            Tri = Tris.First();
        }
        protected override void InitTris()
        {
            AddTri <Pretre>("Nom prénom croissant", o => o.OrderBy(p => p.Nom).ThenBy(p => p.Prenom));
            AddTri <Pretre>("Nom prénom décroissant", o => o.OrderByDescending(p => p.Nom).ThenByDescending(p => p.Prenom));
            AddTri <Pretre>("Année début croissante", o => o.OrderBy(p => p.FonctionsLieu.Min(fl => fl.AnneeDebut)));
            AddTri <Pretre>("Année début décroissante", o => o.OrderByDescending(p => p.FonctionsLieu.Max(fl => fl.AnneeDebut)));
            AddTri <Pretre>("Année fin croissante", o => o.OrderBy(p => p.FonctionsLieu.Min(fl => fl.AnneeFin)));
            AddTri <Pretre>("Année fin décroissante", o => o.OrderByDescending(p => p.FonctionsLieu.Max(fl => fl.AnneeFin)));

            Tri = Tris.First();
        }
Example #11
0
        /// <summary>
        /// Gets the triangles in the specified node
        /// </summary>
        /// <param name="node">Node</param>
        /// <returns>Returns the triangles in the specified node</returns>
        public Triangle[] GetTriangles(ChunkyTriMeshNode node)
        {
            if (node.I >= 0)
            {
                int[] indices = new int[node.N];
                Array.Copy(Tris.ToArray(), node.I, indices, 0, node.N);

                Triangle[] res = new Triangle[node.N];
                for (int i = 0; i < node.N; i++)
                {
                    res[i] = Triangles[indices[i]];
                }
                return(res);
            }

            return(new Triangle[] { });
        }
Example #12
0
        public void LoadIntoMesh(ref Mesh m)
        {
            m.Clear();

            m.SetVertices(Points);
            m.SetTriangles(Tris.ToArray(), 0);

            m.SetUVs(0, UVs);
            m.SetColors(Cols);

            if (Normals.Count != 0)
            {
                m.SetNormals(Normals);
            }
            else
            {
                m.RecalculateNormals();
            }
        }
        private void StartTubeSegment()
        {
            currentSegmentLength = 0;
            Verts.Clear();
            Tris.Clear();
            UVs.Clear();

            CurrentSegment = new GameObject();
            CurrentSegment.AddComponent <MeshFilter>();
            CurrentSegment.AddComponent <MeshRenderer>();

            Mesh = CurrentSegment.GetComponent <MeshFilter>().mesh;
            Mesh.MarkDynamic();
            CurrentSegment.GetComponent <Renderer>().material = Material;
            Mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;

            UpdateVertsAndUVs();
            Mesh.RecalculateNormals();
            LoopCount = 1;
        }
        public ushort CreateFreshSubMesh(ushort vertsToReserve, ushort trisToReserve)
        {
            // create custom List<> implementation with NativeArray that supports growth without assignment!
            SubMesh subMesh = new SubMesh((ushort)Verts.Count, (ushort)Tris.Count, vertsToReserve, trisToReserve);

            lastVert += vertsToReserve;
            lastTri  += trisToReserve;
            SubMeshes.Add(subMesh);
            for (int i = 0; i < vertsToReserve; i++)
            {
                Verts.Add(Vector3.zero); // this is multiple assignment! BAD!
                Normals.Add(Vector3.up);
                TextureUVs.Add(Vector2.zero);
                SubmaterialUVs.Add(Vector2.zero);
            }
            for (int i = 0; i < trisToReserve; i++)
            {
                Tris.Add(0); // more evil multiple assignment!
            }
            return((ushort)(SubMeshes.Count + SubMeshBaseIdx - 1));
        }
Example #15
0
    static public void Main(string[] args)
    {
//  int c1 = System.Environment.TickCount;

        /*
         * if (args.Length == 0)
         * {
         * Console.WriteLine("Usage: tris <size>");
         * return;
         * }
         * int n = Int32.Parse(args[0]);
         */
        int n = 10000;
        Tris <Type, string, object, Random> t = new Tris <Type, string, object, Random>(typeof(int), "1", new object(), new Random());

        object[] o = new object[n];
        t.Fill(o);
        Console.WriteLine(t.CountSimilars(o));
//  int c2 = System.Environment.TickCount;
//  System.Console.WriteLine("time = " + (c2-c1));
    }
        /// <summary>
        /// SelectionChanged de la combobox de Genre
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxGenre_SelectionChangedEvent(object sender, SelectionChangedEventArgs e)
        {
            ComboBox ComboBoxGenre = (ComboBox)sender;

            if (ComboBoxGenre.SelectedItem == null)
            {
                ReinitialiserListeAux();
                return;
            }
            var GenreSelectionné = (ComboBoxItem)ComboBoxGenre.SelectedItem; //Prend l'élément sélectionné de la combobox
            var Content          = (string)GenreSelectionné.Content;         //Convertit le genreSelectionné en string

            Genre g = (Genre)Enum.Parse(typeof(Genre), Content);             //Convertit le string en Enum Genre contenu dans la variable g

            Manager.ListeJeuxAux = Tris.TriGenre(g, Manager.ListeJeuxAux);   //Mets dans la ListeJeuxAux, les jeux possedant le genre selectionné par l'utilisateur
            if (Manager.ListeJeuxAux.Count() == 0)                           //Si pas de jeux trouvé pour le genre sélectionné alors remise à 0 de la ListeJeuxAux
            {
                ReinitialiserListeAux();
                ReinitialiserCombobox();
                MessageBox.Show("Aucun jeu ne correspond à votre recherche. Veuillez réessayez avec un autre critère.", "Erreur recherche", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
        /// <summary>
        /// SelectionChanged de la combobox Limite d'âge
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ComboBoxLimiteAge_SelectionChangedEvent(object sender, SelectionChangedEventArgs e)
        {
            ComboBox ComboBoxLimiteAge = (ComboBox)sender;

            if (ComboBoxLimiteAge.SelectedItem == null)
            {
                ReinitialiserListeAux();
                return;
            }
            var LimiteSelectionnée = (ComboBoxItem)ComboBoxLimiteAge.SelectedItem; //Prend l'élément sélectionné de la combobox

            if (LimiteSelectionnée == Pegi3)
            {
                Manager.ListeJeuxAux = Tris.TriLimiteAge(Pegi.Trois, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux possedant Pegi3 selectionné par l'utilisateur
            }
            if (LimiteSelectionnée == Pegi7)
            {
                Manager.ListeJeuxAux = Tris.TriLimiteAge(Pegi.Sept, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux possedant Pegi7 selectionné par l'utilisateur
            }
            if (LimiteSelectionnée == Pegi12)
            {
                Manager.ListeJeuxAux = Tris.TriLimiteAge(Pegi.Douze, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux possedant Pegi12 selectionné par l'utilisateur
            }
            if (LimiteSelectionnée == Pegi16)
            {
                Manager.ListeJeuxAux = Tris.TriLimiteAge(Pegi.Seize, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux possedant Pegi16 selectionné par l'utilisateur
            }
            if (LimiteSelectionnée == Pegi18)
            {
                Manager.ListeJeuxAux = Tris.TriLimiteAge(Pegi.DixHuits, Manager.ListeJeuxAux); //Mets dans la ListeJeuxAux, les jeux possedant Pegi18 selectionné par l'utilisateur
            }
            if (Manager.ListeJeuxAux.Count() == 0)                                             //Si pas de jeux trouvé pour le Pegi sélectionné alors remise à 0 de la ListeJeuxAux
            {
                ReinitialiserListeAux();
                ReinitialiserCombobox();
                MessageBox.Show("Aucun jeu ne correspond à votre recherche. Veuillez réessayez avec un autre critère.", "Erreur recherche", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
Example #18
0
 public void AddTri(HashSet <Point> points)
 {
     Tris.Add(new Tri(points));
 }
Example #19
0
        static void Main(string[] args)
        {
            Console.WriteLine("Test de la classe Manager\n\n");

            Manager mngr = new Manager(new StubDataManager());

            JeuVidéo jeuvidéo1 = new JeuVidéo("Minecraft", 4, 29.99f, "Minecraft est un jeu vidéo de type « bac à sable » (construction complètement libre). Il s'agit d'un univers composé de voxels et généré aléatoirement, qui intègre un système d'artisanat axé sur l'exploitation puis la transformation de ressources naturelles (minéralogiques, fossiles, animales et végétales). ",
                                              "https://youtu.be/MmB9b5njVbA",
                                              AppDomain.CurrentDomain.BaseDirectory + "../../../img/Minecraft.jpg", "https://www.instant-gaming.com/fr/442-acheter-cle-minecraft/",
                                              ModeleEco.Définitif, AppDomain.CurrentDomain.BaseDirectory + "../../../img/mojang.png",
                                              "Configuration minimale : Intel Core i3-3210 / AMD A8-7600; AMD Radeon R5 / Nvidia Geforce 4xx; 4Go de RAM; 1Go d'Espace Disque; Windows 7/8/10",
                                              Genre.Aventure, Pegi.Trois, new List <PlateForme>()
            {
                PlateForme.Pc, PlateForme.Ps4, PlateForme.Xbox360, PlateForme.XboxOne
            });

            JeuVidéo jeuvidéo2 = new JeuVidéo("GTAV", 5, 15.99f, "GTA V est un jeu en monde ouvert. Comprenez par là que le joueur peut aller où il veut quand il veut pour accomplir des missions ou simplement pour explorer les lieux et pratiquer plusieurs activités. Une liberté d’action que l’on retrouve au cœur même de l’aventure ; il est ainsi possible de remplir chaque mission de nombreuses manières. Au joueur de choisir son approche en choisissant la plus adaptée. L’objectif : organiser une série de braquages dont certains seront aussi épiques que dangereux. À chacun de définir son style et sa façon de procéder.",
                                              "https://youtu.be/QkkoHAzjnUs",
                                              AppDomain.CurrentDomain.BaseDirectory + "../../../img/GtaV.jpg", "https://www.instant-gaming.com/fr/186-acheter-cle-rockstar-grand-theft-auto-v/",
                                              ModeleEco.Définitif, AppDomain.CurrentDomain.BaseDirectory + "../../../img/RockstarGames.png",
                                              "Configuration minimale : Système d'exploitation : Windows 8.1 64 bits, Windows 8 64 bits, Windows 7 64 bits Service Pack 1 Processeur : Intel Core 2 Quad CPU Q6600 @ 2,40 GHz (4 CPUs) / AMD Phenom 9850 Quad-Core (4 CPUs) @ 2,5 GHz Mémoire : 4 Go Carte graphique : NVIDIA 9800 GT 1 Go / AMD HD 4870 1 Go (DX 10, 10.1, 11) Carte son : 100 % compatible avec DirectX 10 Espace disque dur : 65 Go",
                                              Genre.Action, Pegi.DixHuits, new List <PlateForme>()
            {
                PlateForme.Pc, PlateForme.Ps4, PlateForme.Xbox360, PlateForme.XboxOne, PlateForme.Ps3
            });

            JeuVidéo jeuvidéo3 = new JeuVidéo("Call of Duty Modern Warfare 3", 3, 13.99f, "Call of Duty : Modern Warfare 3 (Europe) pour PC est le troisième de la série Modern Warfare, le huitième de la franchise Call of Duty. C'est un jeu de tir à la première personne, avec, similaire aux autres jeux de la série, avec un décor de guerre, ou une série de décors et de lieux prenant place dans le monde entier. Vous et votre équipe êtes chargés de trouver l’ennemi et d'arrêter ses plans infâmes : vous devez d'abord l’éliminer et vous frayer un chemin à travers des hordes d'ennemis pour ce faire.",
                                              "https://www.youtube.com/watch?v=coiTJbr9m04",
                                              AppDomain.CurrentDomain.BaseDirectory + "../../../img/CallOfDutyMW3.jpg", "https://www.instant-gaming.com/fr/61-acheter-cle-steam-call-of-duty-modern-warfare-3/",
                                              ModeleEco.Définitif, AppDomain.CurrentDomain.BaseDirectory + "../../../img/InfinityWard.png",
                                              "Configuration minimale : Système d'exploitation : Windows XP / Windows Vista / Windows 7 Processeur : Intel Core 2 Duo E6600 ou équivalent Memoire : 2 Go de RAM Carte graphique : Shader 3.0 ou mieux, NVIDIA GeForce 8600GT ou ATI Radeon X1950 Disque dur : 16 Go de libre",
                                              Genre.FPS, Pegi.DixHuits, new List <PlateForme>()
            {
                PlateForme.Pc, PlateForme.Ps3, PlateForme.Xbox360
            });

            JeuVidéo jeuvidéo4 = new JeuVidéo("Battlefield 5", 2, 16.24f, "Participez au plus grand conflit de l'Histoire avec Battlefield V. La licence revient aux sources et dépeint la Seconde Guerre mondiale comme jamais auparavant. Livrez des batailles multijoueur frénétiques et brutales aux côtés de votre escouade dans des modes imposants comme Grandes opérations et coopératifs comme Tir Groupé. Prenez part aux batailles méconnues de la Guerre avec les récits de guerre du mode solo. Combattez dans des environnements inédits et spectaculaires aux quatre coins du monde et découvrez le Battlefield le plus riche et le plus immersif à ce jour.",
                                              "https://www.youtube.com/watch?v=fb1MR85XFOc",
                                              AppDomain.CurrentDomain.BaseDirectory + "../../../img/Battlefield5.jpg", "https://www.instant-gaming.com/fr/612-acheter-cle-origin-battlefield-5/",
                                              ModeleEco.Définitif, AppDomain.CurrentDomain.BaseDirectory + "../../../img/Dice.png", "Configuration minimale : Processeur : (Intel) Core i5 6600K ou AMD FX-6350, Mémoire : 8 Go de RAM, Carte graphiques : Nvidia GeForce GTX 660 2GB ou AMD Radeon HD 7850 2GB, DirectX 11, Stockage : 50 Go, Système d'exploitation: Windows 7, Windows 8.1 et Windows 10 64 bits. Internet : 512 kbps mini.",
                                              Genre.FPS, Pegi.DixHuits, new List <PlateForme>()
            {
                PlateForme.Pc, PlateForme.Ps4, PlateForme.XboxOne
            });


            Console.WriteLine("Création des utilisateurs\n\n");
            //mngr.CréerUtilisateur(new Administrateur("Bonhomme", "Paul", new DateTime(2001, 11, 18), "paul_b63", "MotDePassePaul", "*****@*****.**", new List<JeuVidéo>()));
            //mngr.CréerUtilisateur(new UtilisateurConnecté("Chevassus", "Noe", new DateTime(2001, 06, 21), "shotlouf", "MotDePasseNoe", "*****@*****.**", new List<JeuVidéo>()));
            //mngr.CréerUtilisateur(new UtilisateurConnecté("Zemili", "Adel", new DateTime(2001, 12, 16), "adel88", "MotDePasseAdel", "*****@*****.**", new List<JeuVidéo>()));
            //mngr.CréerUtilisateur(new UtilisateurConnecté("Rigaud", "Zoé", new DateTime(2001, 01, 04), "zoezoe", "MotDePasseZoe", "*****@*****.**", new List<JeuVidéo>()));

            mngr.ListeUtilisateur.Sort();
            Console.WriteLine("Pour vous connecter, veuillez renseigner votre mot de passe");
            Console.WriteLine(mngr.Connexion(mngr.RechercherUtilisateur("paul_b63")));
            mngr.Connexion(new Administrateur("Bonhomme", "Paul", new DateTime(2001, 11, 18), "paul_b63", "MotDePassePaul", "*****@*****.**", new List <JeuVidéo>()));

            Console.WriteLine("\n\nAjout des jeux à l'application\n\n");
            //mngr.AjouterJeu(jeuvidéo1, mngr.UtilisateurCourant);
            //mngr.AjouterJeu(jeuvidéo2, mngr.UtilisateurCourant);
            //mngr.AjouterJeu(jeuvidéo3, mngr.UtilisateurCourant);
            //mngr.AjouterJeu(jeuvidéo3, mngr.UtilisateurCourant);

            Console.WriteLine("\nSuppression des jeux à l'application\n\n");
            mngr.SupprimerJeu(jeuvidéo1, mngr.UtilisateurCourant);

            Console.WriteLine("Test des méthodes de tris\n\n");
            Tris.TriPlateForme(PlateForme.Ps4, mngr.ListeJeuxAux);

            Console.WriteLine("Ajout d'un favori par l'utilisateur courant\n\n");
            mngr.UtilisateurCourant.AjouterFav(jeuvidéo2);
            mngr.UtilisateurCourant.AjouterFav(jeuvidéo3);
            mngr.UtilisateurCourant.AjouterFav(jeuvidéo1);
            mngr.UtilisateurCourant.AjouterFav(jeuvidéo4);

            Console.WriteLine("Suppression d'un favori par l'utilisateur courant\n\n");
            mngr.UtilisateurCourant.SupprimerFav(jeuvidéo2);
            mngr.UtilisateurCourant.SupprimerFav(jeuvidéo3);

            Console.WriteLine("Test de recherche d'un jeu avec début de nom\n\n");
            Console.WriteLine(mngr.RechercherJeuTextBox("min"));


            Console.WriteLine("Test de recherche d'un utilisateur avec nom complet\n\n");
            Console.WriteLine(mngr.RechercherUtilisateur("shotlouf"));

            Console.WriteLine("Test de la vérification des favoris\n\n");
            mngr.VerifFavoris();

            Console.WriteLine("Description de l'application\n\n");
            Console.WriteLine(mngr);
        }
Example #20
0
        protected void AddTri <T>(string libelle, Func <IQueryable <T>, IOrderedQueryable <T> > order) where T : IEntity
        {
            var indice = Tris.Count();

            Tris.Add(new TriModel <T>(indice, libelle, order));
        }
        public override Graph GenerateGraph(int vertexCount, int edgePercent, int size = 500)
        {
            var graph = new Graph();

            var random = new Random();

            graph.Vertices = Enumerable.Range(0, vertexCount)
                             .Select(i => new Vertex(i, new Point(random.NextDouble() * size, random.NextDouble() * size)))
                             .ToDictionary(_ => _.Id, _ => _);
            if (graph.Vertices.Count < 2)
            {
                return(graph);
            }
            if (graph.Vertices.Count == 2)
            {
                graph.AddEdge(graph.Vertices[0], graph.Vertices[1]);
                return(graph);
            }

            // соединяем точки гранями, строим триангуляцию Делоне
            // чтобы ускорить процесс, найдем самую левую вверхнюю точку, отсортируем все точки по расстоянию от нее
            // и соеденим с ближайшей к ней точке, оброзовав первую грань графа.

            var first = graph.Vertices[0];

            foreach (var v in graph.Vertices.Values)
            {
                if (v.X < first.X ||
                    v.X == first.X && v.Y < first.Y)
                {
                    first = v;
                }
            }

            var range = new double[graph.Vertices.Count];

            for (var i = 0; i < graph.Vertices.Count; i++)
            {
                var x = graph.Vertices[i].X - first.X;
                var y = graph.Vertices[i].Y - first.Y;
                range[i] = x * x + y * y;
            }

            var sortedVertices = graph.Vertices.Values.ToArray();

            Array.Sort(range, sortedVertices);

            var vertex = new TrisVertex[sortedVertices.Length];

            for (var i = 0; i < sortedVertices.Length; i++)
            {
                vertex[i] = new TrisVertex(sortedVertices[i]);
            }

            // создаем первую грань

            var tris = new Tris(vertex[0], vertex[1], vertex[2]);

            tris.MakeClockwise();

            var resultTriangles = new List <Tris>(sortedVertices.Length * 2);

            tris[0].Trises.Add(tris);
            tris[1].Trises.Add(tris);
            tris[2].Trises.Add(tris);
            resultTriangles.Add(tris);

            var hull = new CircularList <TrisEdge>();

            hull.AddItem(new TrisEdge(tris, tris[0], tris[1]));
            hull.AddItem(new TrisEdge(tris, tris[1], tris[2]));
            hull.AddItem(new TrisEdge(tris, tris[2], tris[0]));

            var seekStart = hull.Last;

            for (var i = 3; i < vertex.Length; i++)
            {
                var nextPoint = vertex[i];

                CircularItem <TrisEdge> visiblePoint = null;
                if (seekStart.Value.EdgeVisibleFrom(nextPoint.Position))
                {
                    visiblePoint = seekStart;
                }
                else
                {
                    visiblePoint = hull.FindNext(seekStart,
                                                 t => t.Value.EdgeVisibleFrom(nextPoint.Position));
                }

                if (visiblePoint == null)
                {
                    continue;
                }
                var notVisibleLeft = hull.FindPrevious(visiblePoint,
                                                       t => !t.Value.EdgeVisibleFrom(nextPoint.Position));

                var notVisibleRight = hull.FindNext(visiblePoint,
                                                    t => !t.Value.EdgeVisibleFrom(nextPoint.Position));

                if (notVisibleLeft == null || notVisibleRight == null)
                {
                    continue;
                }
                var visibleLeft = notVisibleLeft.Next;
                var edge        = visibleLeft.Value;
                var hullItem    = visibleLeft;

                Tris firstEdgeTris = null;
                Tris lastEdgeTris  = null;

                while (hullItem != notVisibleRight)
                {
                    var nextTris = new Tris(edge.A, nextPoint, edge.B);

                    nextTris[0].Trises.Add(nextTris);
                    nextTris[1].Trises.Add(nextTris);
                    nextTris[2].Trises.Add(nextTris);
                    resultTriangles.Add(nextTris);

                    // разворачиваем треугольники, чтобы удовлетворяли критерию Делоне
                    if (FlipIfNeeded(edge.tris, nextTris, nextPoint, out var returnLinkTris))
                    {
                        if (firstEdgeTris == null)
                        {
                            firstEdgeTris = returnLinkTris;
                        }
                    }


                    if (firstEdgeTris == null)
                    {
                        firstEdgeTris = nextTris;
                    }

                    lastEdgeTris = nextTris;

                    hullItem = hullItem.Next;
                    edge     = hullItem.Value;
                }

                // закрываем дырку
                hull.LinkTwoItem(notVisibleLeft, notVisibleRight);
                seekStart       = hull.AddItemAfter(notVisibleLeft);
                seekStart.Value = new TrisEdge(firstEdgeTris, notVisibleLeft.Value.B, nextPoint);


                seekStart       = hull.AddItemAfter(seekStart);
                seekStart.Value = new TrisEdge(lastEdgeTris, nextPoint, notVisibleRight.Value.A);
            }

            // формируем связи на основе триангуляции
            graph.Edges = new List <Edge>(resultTriangles.Count * 2);
            foreach (var tr in resultTriangles)
            {
                graph.AddEdge(tr[0].Original, tr[1].Original);
                graph.AddEdge(tr[1].Original, tr[2].Original);
                graph.AddEdge(tr[2].Original, tr[0].Original);
            }


            // пытаемся оставить только нужное кол-во связей, при этом проверяя что все узлы соеденены

            var needEdges = (int)(graph.Edges.Count / 100f * edgePercent);

            var rnd = new Random();

            var testEdges = new List <Edge>(graph.Edges);

            while (testEdges.Count > 0 && needEdges < graph.Edges.Count)
            {
                var removeIndex = rnd.Next(testEdges.Count);
                var testEdge    = testEdges[removeIndex];

                if (graph.HasWayBetweenWithoutEdge(testEdge.A, testEdge.B))
                {
                    graph.RemoveEdge(testEdge.A, testEdge.B);
                }

                testEdges.RemoveAt(removeIndex);
            }

            return(graph);
        }