Compare commits

...

33 Commits

Author SHA1 Message Date
Yannis DOUMIR FERNANDES 0a06c623b0 Mise à jour de 'Sources/Vues/AppShell.xaml'
1 year ago
Yannis DOUMIR FERNANDES e218066732 Correction conflits
2 years ago
Nicolas BLONDEAU 621ea4b81f Merge pull request 'develop' (#41) from develop into master
2 years ago
ImNicolasTheDev c8481a6408 Suppression des pages inutiles
continuous-integration/drone/push Build is passing Details
2 years ago
ImNicolasTheDev a6ce212165 Checkbox fonctionne ENFIN git add * 🎉
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES cb196b1e3d Ajout test classe Conseil + ajout page collection + filtrage + ajout monstres déjà vu dans le stub
2 years ago
ImNicolasTheDev 11fe85db23 La modification et la suppression de commentaires fonctionne + BUG FIX du User qui restait connecté même en tant qu'invité
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES e80b34bc31 Ajout d'un monstre de base dans la liste monstreDejaVu dans le stub + Binding page Collection pas encore complétement foctionnel (problème StringFormat
2 years ago
Nicolas BLONDEAU 33200d002a Merge pull request 'Collection' (#38) from Collection into develop
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES 16e0727d68 modified: "Sources/Mod\303\250le/Monstre.cs"
2 years ago
Yannis DOUMIR FERNANDES 67a9ee529f Ajout page collention et fonctionnalités
2 years ago
Yannis DOUMIR FERNANDES 2d081b6730 Tentative de modification de conseil mais problème de contexte
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES 67be02853f Revert "Revert "Ajout mobs""
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES e8c706e9ac Merge branch 'develop' of https://codefirst.iut.uca.fr/git/nicolas.blondeau/SAE_2.01_-_Developpement_dune_application into develop
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES 1ad9bc01f6 Revert "Ajout mobs"
2 years ago
Yannis DOUMIR FERNANDES 7775ef639c Merge branch 'develop' of https://codefirst.iut.uca.fr/git/nicolas.blondeau/SAE_2.01_-_Developpement_dune_application into develop
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES 1115d6218b Ajout mobs
2 years ago
ImNicolasTheDev 9e4e452157 Fix de bugs : texte qui dépasse, VisualStates, Borders... + Optimisation de l'affichage de la page SearchMob
continuous-integration/drone/push Build is passing Details
2 years ago
ImNicolasTheDev e1efccd73f Fix de très nombreux bug pour les Conseils, ajout de la fonctionalité de refresh la scrollView, et ajout des boutons pour chaque commentaire, avec de nombreuses VisualStates (aussi correction de Model.User en le nom réel de l'utilisateur hahaha) 🎉
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas BLONDEAU 241125c9bd Ajout des boutons, mais problème quand on survole les conseils (VisualStates)
continuous-integration/drone/push Build was killed Details
2 years ago
Yannis DOUMIR FERNANDES e5bc28c585 Ajout mob dans le strub
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas BLONDEAU 06c57cc9cb Je sais pas quoi mettre, j'ai juste avancé 🎉
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas BLONDEAU 94e2b4d8d5 Ajout de tout -> petits labels pour indiquer erreur, inscription fonctionnelle et tout 🎉
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES a128df48fb Modif affichage + images 🎉 Filtrage et recherche fonctionne ensemble !!!
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES bc9646bb9b Conflit réglé ?
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES 40f0cba412 🎉 Filtrage par dangerodité fonctionnel
2 years ago
Yannis DOUMIR FERNANDES 2323e18e9d Modif filtre
2 years ago
Yannis DOUMIR FERNANDES 57d52e89b4 Modif bouton filtrage maintenant seulement un bouton à clicker
2 years ago
Nicolas BLONDEAU d46b7e5086 🎉 LA RECHERCHE FONCTIONNE git statusgit status
continuous-integration/drone/push Build is passing Details
2 years ago
Yannis DOUMIR FERNANDES e6c50fa0e8 Affichage des filtres fonctionnel + modif nom images dans le stub + modif affichage filtres
2 years ago
Yannis DOUMIR FERNANDES 783da5076f Ajout checkbox pour pouvoir filtrer et paramètrage de son affichage et de ce qu'il fait en cour
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas BLONDEAU a0f91d6d84 Changement apparence direct grace à la ListView + par défaut image classique + mise à jour layout SearchMob
continuous-integration/drone/push Build is passing Details
2 years ago
Nicolas BLONDEAU 52abc19779 Merge pull request 'ListConseil' (#27) from ListConseil into develop
continuous-integration/drone/push Build is passing Details
2 years ago

@ -10,7 +10,7 @@ using System.Reflection.Metadata.Ecma335;
using System.Reflection.PortableExecutable;
// Déclaration des Managers (et de leur méthode de sauvegarde)
UserManager userMngr = new UserManager(new LoaderXml());
UserManager userMngr = new UserManager(new LoaderStub());
MonsterManager monsterBase = new MonsterManager(new LoaderStub());
// Variables statiques
@ -284,7 +284,7 @@ void menuMontres()
case 1:
Console.Clear();
string texte = rechercheMonstre();
List<Monstre> m;
ObservableCollection<Monstre> m;
afficherUnMonstre(monsterBase.search(texte.ToString()));
break;
@ -313,7 +313,7 @@ void menuMontres()
} while (choix != -1); // Tant que l'utilisateur n'appuie pas sur Echap
}
void afficherUnMonstre(List<Monstre> m)
void afficherUnMonstre(ObservableCollection<Monstre> m)
{
}
@ -377,7 +377,7 @@ void displayAllMonstersLegend()
// Fonction de recherche de monstre, mise à jour de la liste à chaque touche appuyée
string rechercheMonstre()
{
List<Monstre> m;
ObservableCollection<Monstre> m;
Console.Clear();
ConsoleKeyInfo carac;
string listCarac = "";

@ -1,20 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace Modèle
{
public class Apparence
{
public string Nom { get; set; }
public string ImageLink { get; init; }
public Apparence(string name) {
Nom = name;
ImageLink = name.ToLower() + ".png";
}
}
}

@ -1,5 +1,4 @@
using Model;
using Modèle;
using System;
using System.Collections.Generic;
using System.Linq;
@ -53,12 +52,11 @@ namespace Model
Texte = texte;
LeMonstre = leMonstre;
}
// Pour afficher les conseils.
// FONCTION A DEPLACER -> Dans la console, ON AFFICHE RIEN DANS LE MODEL !!!
public void affichConseil()
{
Console.WriteLine($"Id : {Id}");
Console.WriteLine($"Auteur : {Auteur.Pseudo}");
Console.WriteLine($"Monstre : {LeMonstre.Name}");
Console.WriteLine($"Conseil : {Texte}");
}
}

@ -75,7 +75,7 @@ namespace Model
public ObservableCollection<Conseil> ListConseils { get; set; }
public string ImageLink { get; init ; }
public string CardLink { get; init; }
public Monstre(int id, string name, string danger, string desc, List<string> characList, List<string> appearList, ObservableCollection<Conseil> conseilList)
{
if (string.IsNullOrWhiteSpace(name) || string.IsNullOrWhiteSpace(desc) || string.IsNullOrWhiteSpace(danger))
@ -91,7 +91,6 @@ namespace Model
AppearanceList = appearList;
ListConseils = conseilList;
ImageLink = name.ToLower() + ".png";
CardLink = "collection" + name.ToLower() + ".png";
}
public override string ToString()

@ -18,43 +18,45 @@ namespace Persistance
public LoaderStub() { }
public List<User> loadUsers() ///CHANGER VISIBILITEE, CAR PAS BIEN DE LAISSER A TOUT LE MONDE
{
List<User> lu = new List<User>();
Monstre monstre = new Monstre(1, "Poule", "passif", "Les poules sont des créatures passives. Elles fournissent des plumes et des oeufs.En moyenne, une poule laisse tomber un oeuf toutes des 5 à 10 minutes.", new List<string> { "Quand une poule est tuée, il y a une faible chance qu'elle laisse tomber un œuf.", "Parfois, les poules apparaissent avec un bébé zombie sur le dos, on l'appelle alors une poule jockey. Il est aussi possible d'avoir un bébé cochon zombie sur son dos, mais seulement par commande." }, new List<string> { "Poule", "Poule jockey", "Poule jockey cochon" }, new ObservableCollection<Conseil> { });
Monstre mouton = new Monstre(2, "Mouton", "passif", "Les moutons sont des créatures passives. Sa principale caractéristique est qu'il peut fournir de la laine, un matériau qui sert à fabriquer des objets, notamment des lits.", new List<string> { "Avec une cisaille, il est possible de rasé la laine d'un mouton, il se retrouvera sans laine.", "Pour faire repousser la laine d'un mouton, il faut qu'il ait de l'herbe sous ses pattes pour qu'il puisse manger. Une fois manger la laine repousse instantanément.", "Les moutons peuvent avoir toutes les couleurs du jeu grâce à des teintures et des mélanges. Mais les seules couleurs de mouton pouvant apparaître sont le blanc, le gris, le marron, le noir et le rose..", "Le rose est une couleur qui a une chance d'apparaître très faible, tellement faible que la probabilité pour qu'un mouton un bébé et soit rose en même temps est la probabilité la plus petite du jeu." }, new List<string> { "Mouton" }, new ObservableCollection<Conseil> { });
List<User> lu = new List<User>();
User user = new User("Admin", "ddd", "ddd", "ddd", new List<Monstre> { monstre });
lu.Add(user);
lu.Add(new User("DedeDu42", "dede", "dodo", "mdp", new List<Monstre> { }));
lu.Add(new User("Moi", "Monchanin", "Liam", "feur", new List<Monstre> { }));
lu.Add(new User("Nikoala", "Blondeau", "Nicolas", "niblondeau", new List<Monstre> {
new Monstre(2,
"Mouton", "passif", "Je suis présent un peu partout, sauf dnas le desert.",
new List<string> { "Avec une cisaille il est possible de raser la laine d'un mouton, il se retrouvera sans laine.","Pour faire repousser la laine d'un mouton, il faut qu'il ait de l'herbe sous ses pattes pour qu'il puisse manger. Une fois l'herbe mangée, la laine repousse instantanément !" },
new List<string> { "Apparence1", "App2", "App3" }
, new ObservableCollection<Conseil> {}) }));
lu.Add(new User("Nikoala", "Blondeau", "Nicolas", "niblondeau", new List<Monstre> { }));
lu.Add(new User("Yadoumir", "Doumir", "Yannis", "mdp", new List<Monstre> { }));
lu.Add(new User("osuplayer123", "Bonetti", "Martin", "oSu!727", new List<Monstre> { }));
return lu;
}
public ObservableCollection<Monstre> loadMonsters() ///SAME
{
ObservableCollection<Monstre> lm = new ObservableCollection<Monstre>();
User user = new User("ddd", "ddd", "ddd", "ddd");
User user = new User("Admin", "ddd", "ddd", "ddd");
Monstre monstre = new Monstre(1, "monstre", "dangereux", "je suis gentil tkt", new List<string> { }, new List<string> { }, new ObservableCollection<Conseil>{ });
Conseil conseil = new Conseil(user, "Voili voilou", monstre);
lm.Add(new Monstre(1, "Poule", "passif", "Les poules sont des créatures passives. Elles fournissent des plumes et des oeufs.En moyenne, une poule laisse tomber un oeuf toutes des 5 à 10 minutes.", new List<string> { "Quand une poule est tuée, il y a une faible chance qu'elle laisse tomber un œuf.", "Parfois, les poules apparaissent avec un bébé zombie sur le dos, on l'appelle alors une poule jockey. Il est aussi possible d'avoir un bébé cochon zombie sur son dos, mais seulement par commande." }, new List<string> { "Apparence1", "App2", "App3" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(2, "Mouton", "passif", "Les moutons sont des créatures passives. Sa principale caractéristique est qu'il peut fournir de la laine, un matériau qui sert à fabriquer des objets, notamment des lits.", new List<string> { "Avec une cisaille, il est possible de rasé la laine d'un mouton, il se retrouvera sans laine.", "Pour faire repousser la laine d'un mouton, il faut qu'il ait de l'herbe sous ses pattes pour qu'il puisse manger. Une fois manger la laine repousse instantanément.", "Les moutons peuvent avoir toutes les couleurs du jeu grâce à des teintures et des mélanges. Mais les seules couleurs de mouton pouvant apparaître sont le blanc, le gris, le marron, le noir et le rose..", "Le rose est une couleur qui a une chance d'apparaître très faible, tellement faible que la probabilité pour qu'un mouton un bébé et soit rose en même temps est la probabilité la plus petite du jeu." }, new List<string> { "Apparence1", "App2", "App3" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(3, "Cochon", "passif", "Les cochons sont des créatures passives, on les rencontre très fréquemment dans le jeu. Ils laissent tomber du porc cru une fois tué. S'il est frappé par la foudre, il se mettra sur ses deux pattes arrières et deviendras un cochon zombie.", new List<string>{ "La reproduction de cochon peut se faire avec des carottes et des patates crues.", "Il est possible de les monter en leur mettant une selle sur le dos et en les dirigeant grâce à une canne à pêche avec une carotte au bout." }, new List<string> { "Apparence1", "App2", "App3" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(4, "Warden", "BOSS", "Le Warden est un monstre qui a été récemment ajouté au jeu. Il tuera la plupart des joueur en 1 seul coup, c'est pour cela qu'il est considéré comme un boss par la plupart des joueurs..", new List<string> { "Le warden est aveugle mais il entend tous les bruit autour de lui.", "Il apparait dans une caverne spécial appeler Deep Dark (les abîmes en français) quand on y marche en faisant trop de bruit.", "Il s'agit du seul monstre qui ai une animation d'apparation, il sort du sol.", "Lorsque l'on fait trop de bruit grâce à un bloc spécial, le Sculk Hurleur, ce bloc détecte tous bruit et les envoient au Warden qui sortira du sol s'il y a trop de bruit", "Il est capable de tirer des rayon laser à l'endroit d'où proviennes les bruits qu'il entend.", "Il est capable de se baisser pour nous poursuivre dans des endroits petit." }, new List<string> { "Une seul apparence pour lui" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(5, "EnderDragon", "BOSS", "L'Ender Dragon est le premier boss ajouté à Minecraft. Il est présent dans le monde de l'End et le seul moyen de quitter cette dimension est de le vaincre.", new List<string> { "L'Ender Dragon est le boss de fin de minecraft.", "Il est capable de se régénérer grâce à aux cristaux présent dans sa dimensions. Pour le vaincre, il faut donc tout les détruire.", "Il y a qu'un seul et unique Ender Dragon, aucun autre apparaît sauf s'il est invoqué à nouveaux.", "Le seul moyen de ressusciter le Dragon est de poser 4 Cristal de l'End sur le portail qui permet de revenir dans le monde normal. Ainsi, il sera ressuscité et vous pourrez le vaincre à nouveau.x", "À sa mort, l'Ender Dragon laisse son œuf, il est purement décoratif, mais il n'y en a qu'un seul qui apparaît même après l'avoir vaincu plusieurs fois.", "Si l'Ender Dragon se retrouve dans l'Overworld (le monde normal) grâce à des commandes, chaque bloc qu'il touchera disparaîtra." }, new List<string> { "Une seul apparence pour lui" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(6, "Wither", "BOSS", "Le Wither est un boss extrêmement agressive, en effet non seulement il s'attaque au joueur mais également aux animaux et même à certains monstres.", new List<string> { "Grâce à ses trois têtes, il est capable d'attaquer simultanément trois cibles différentes en leur lançant ses têtes qui repoussent instantanément.", "Le Wither n'apparaît pas naturellement, il faut le créer. Pour ce faire, il faut faire un T avec 4 blocks de sable des âmes et trois têtes de wither squelette.", "Les têtes du Wither, si elles vous touchent, vous aurez l'effet wither, cet effet est comparable au poison, mais il peut tuer.", "Il est le seul boss pouvant casser l'obsidienne, le deuxième block le plus dur du jeu." }, new List<string> { "Apparence de chargement", "Apparence d'attaque", "Apparence mid life" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(7, "Vache", "passif", "Les vaches sont des créatures passives. Elles fournissent du cuir et de la viande. Il est aussi possible de récupérer du lait avec un seau vide. La vache à une variante qui se nomme, la Champivache, il s'agit d'une vache qui apparaît seulement dans un biome spécial.", new List<string> { "Les vaches apparaissent par groupe de quatre minimums.", "Le lait des vaches enlève tous les effets de potion que vous aurez", "Les champivaches apparaissent seulement dans les biomes champignons. Il s'agit du biome le plus rare du jeu, il est composé d'une terre unique et de champignons.", " Les vaches champignon ont elles aussi une variante, la champivache marron.", "La champivache marron le devient lorsqu'une champivache ce fait frapper pas la foudre.", "Grâce à un bol, il est possible de récupérer de soupes de champivache sur les champivache." }, new List<string> { "Vache de base", "vache champignon" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(8, "Loup", "passif", "Les loups sont des créatures que l'on peut rencontrer dans les forêts. Ils sont neutres et pourront soit devenir enragés si vous les attaquez, soit devenir votre allié si vous l'apprivoisez.", new List<string> { "Pour apprivoiser un loup il vous faudrat quelques os.", "Ils peuvent vous aidez à chasser des animaux ou des monstres car ils attaquent tous ce que vous attaquez et qui vous attaque.", "Pour leur redonner de la vie, il faut leur donner de la viande. Peut importe le type, ils mangent tous." }, new List<string> { "Apparence nature", "Apparence méchant", "Apparence apprivoisé" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(9, "Chat", "passif", "Les chats sont des animaux de compagnie. On les trouve dans les villages. Ils peuvent prendre 11 apparences différentes. Une fois adoptés grâce à du poisson, ils vous suivront partout à moins que vous leur disiez de ne plus bouger.", new List<string> { "Les chats ont la particularité d'effrayer les creepers", "Ils chassent aussi les lapins, qu'ils tuent pour vous ainsi que les bébés tortues.", "Les chats apprivoisés iront directement sur votre lit si vous en possédez un à proximité. Au réveil, ils peuvent parfois vous faire un cadeau (un objet aléatoire).", "Si un chat apparaît près d'une cabane à sorcière ou à proximité d'une sorcière, il sera automatiquement noir." }, new List<string> { "apparence au pif", "apparence noir" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(10, "Zombie", "hostile", "Les zombies sont des monstres lents mais qui peuvent voir les joueurs de très loin. Le seul moyen pour un zombie de faire des dégâts est de frapper à la main le joueur. Il a un cousin qui qui vit seulement dans le desert, le Husk, s'il vous attrape vous aurez l'effet de faim pendant 30sec.", new List<string> { "Les zombies attaquent naturellement les villageois, un villageois attaqué par un zombie mourra et se réincarnera en zombie villageois.", "Le seul moyens de sauver un zombie villageois est de lui lancé une potion de faiblesse et de lui donner un pomme d'or.", "Entouré le zombie villageois de barreaux de fer accélèrera le processus.", "Les zombies peuvent avoir des enfants. Les bébés zombies sont très rapide et diffice à atteindre par leurs petites tailles."}, new List<string> { "Zobmie", "zombie villageois", " bébé zombie" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(11, "Squelette", "hostile", "Les squelettes sont des créatures hostiles. Ils sont des ennemis rapides qui tirent des flèches sur les joueurs. Il existe une variante au squelette classique, le Vagabond. Le vagabond est un squelette qui apparaît uniquement dans les biomes froids. Comme les squelettes classiques, ils apparaissent uniquement la nuit ou dans les endroits sombres.", new List<string> { "Au contact de la lumière du soleil, ils prennent feu et finissent par mourir de leurs brûlures. Il peut arriver que des araignées apparaissent avec un squelette sur leur dos, on les appelle les Araignées Jockey.", "Le vagabond lance des flèches qui donnent l'effet lenteur aux joueurs." }, new List<string> { "basique", "spider jokey" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(12, "Creeper", "hostile", "Le creeper est une créature verte, pratiquement silencieuse, insidieuse et kamikaze. Une fois qu'il s'est assez rapproché du joueur, le creeper laissera échapper un sifflement sonore et explosera après un à deux secondes. Lorsqu'ils sont frappés par la foudre, les creepers se chargent et se transforment en creeper chargé.", new List<string> { "Il est également possible d'activer l'explosion des creepers manuellement en utilisant un briquet sur eux.", "Les creepers sont silencieux quand ils ne bougent pas et ne prennent pas feu quand ils sont exposé à la lumière du jour. En revanche, ils n'apparaissent que dans des endroits sombres (cavernes ou la nuit).", "Lorsqu'un creeper est tué par un squelette, il laissera tomber un disque.", "Lorsqu'un crepper chargé tue un monstre en explosant, le monstre tué par l'explosion laisseront tomber leurs têtes. De même pour les joueurs." }, new List<string> { "apparence de base" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(13, "Phantom", "hostile", "Les phantoms sont des monstres volants en haute altitude, ils apparaissent uniquement la nuit et au dessus des joueurs n'ayant pas domit depuis au 3 jours.", new List<string> { "Si le joueur fatigué est en extérieur durant la nuit les phantoms apparaissent par groupe de 1 à 4 à 20 blocks de haut.", "Plus les joueurs passent de temps sans dormir, et plus il y a de chances que des phantoms apparaissent en nombre.", "Ils attaquent en faisant un piqué sur le joueur avant de remonter en altitude.", "Le seul moyen d'empêcher leur apparition, est de dormir ou de mourir, ainsi le compteur de fatigue se remettra à zéro." }, new List<string>{"Apparence 1"}, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(14, "Enderman", "hostile", "L'Enderman est un monstre assez rre dans le monde normal. C'est un mob qui à la possibilité de prendre et de déplacer des blocs.", new List<string> { "Ils ne vous attaqueront pas sauf si vous les regardez directement dans les yeux, ils se téléporteront alors derrière vous et deviendrons extrêmement hostiles.", "L'eau (et donc la pluie) est leur ennemie, en effet au contact de celle-ci, ils perdront de la vie, c'est pourquoi ils se téléporteront instantanément.", "Les Endermans sont omniprésents dans le monde de l'End.", "Comme la plupart des monstres, les Endermans apparaissent seulement dans les endroits sombres." }, new List<string> { "apparence 1", "apparence avec un bloc" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(15, "Slime", "hostile", "Les slimes sont des cubes verts translucides. Ils peuvent être répertoriés dans 3 tailles : Grand, moyen et petit.", new List<string> { "Les slimes peuvent apparaitre à la fois dans des zones éclairées et sombres, mais uniquement dans les couches les plus profondes et dans des endroit plat.", "Ils apparaissent généralement dans de grandes cavernes ou des mines à ciel ouvert, puisqu'ils ont besoin de place.", "Si vous tuez un Gros slime, il peut se diviser en deux, trois ou quatre slime de taille plus petite."}, new List<string> { "Apparencegrand", "apparence petit"}, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(16, "Araignee", "hostile", "Les araignées sont agressives au cours de la nuit ou dans l'obscurité, on les reconnait à leurs yeux qui brillent en rouge.", new List<string> { "Elles sont rapide et sont caapble de grimper aux murs.", "Lorsqu'elles poursuivent le joueur pendant la nuit, elles continueront à les chasser durant la journée.", "En journée, elles ne vous attaqeuront pas à moins d'être provoquées", "Il peut arriver que des araignées apparaissent avec un squelette sur leurs dos, on les appelle les Araignées Jockey." }, new List<string> { "une seule apparence" }, new ObservableCollection<Conseil> { }));
Conseil conseil = new Conseil(user, "C'est super facile à tuer !", monstre);
lm.Add(new Monstre(1, "Poule", "passif", "Les poules sont des créatures passives. Elles fournissent des plumes et des oeufs.En moyenne, une poule laisse tomber un oeuf toutes des 5 à 10 minutes.", new List<string> { "Quand une poule est tuée, il y a une faible chance qu'elle laisse tomber un œuf.", "Parfois, les poules apparaissent avec un bébé zombie sur le dos, on l'appelle alors une poule jockey. Il est aussi possible d'avoir un bébé cochon zombie sur son dos, mais seulement par commande." }, new List<string> { "Poule", "Poule jockey", "Poule jockey cochon" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(2, "Mouton", "passif", "Les moutons sont des créatures passives. Sa principale caractéristique est qu'il peut fournir de la laine, un matériau qui sert à fabriquer des objets, notamment des lits.", new List<string> { "Avec une cisaille, il est possible de rasé la laine d'un mouton, il se retrouvera sans laine.", "Pour faire repousser la laine d'un mouton, il faut qu'il ait de l'herbe sous ses pattes pour qu'il puisse manger. Une fois manger la laine repousse instantanément.", "Les moutons peuvent avoir toutes les couleurs du jeu grâce à des teintures et des mélanges. Mais les seules couleurs de mouton pouvant apparaître sont le blanc, le gris, le marron, le noir et le rose..", "Le rose est une couleur qui a une chance d'apparaître très faible, tellement faible que la probabilité pour qu'un mouton un bébé et soit rose en même temps est la probabilité la plus petite du jeu." }, new List<string> { "Mouton" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(3, "Cochon", "passif", "Les cochons sont des créatures passives, on les rencontre très fréquemment dans le jeu. Ils laissent tomber du porc cru une fois tué. S'il est frappé par la foudre, il se mettra sur ses deux pattes arrières et deviendras un cochon zombie.", new List<string>{ "La reproduction de cochon peut se faire avec des carottes et des patates crues.", "Il est possible de les monter en leur mettant une selle sur le dos et en les dirigeant grâce à une canne à pêche avec une carotte au bout." }, new List<string> { "Cochon", "Cochon Zombie" }, new ObservableCollection<Conseil> {conseil}));
lm.Add(new Monstre(4, "Warden", "BOSS", "Le Warden est un monstre qui a été récemment ajouté au jeu. Il tuera la plupart des joueur en 1 seul coup, c'est pour cela qu'il est considéré comme un boss par la plupart des joueurs..", new List<string> { "Le warden est aveugle mais il entend tous les bruit autour de lui.", "Il apparait dans une caverne spécial appeler Deep Dark (les abîmes en français) quand on y marche en faisant trop de bruit.", "Il s'agit du seul monstre qui ai une animation d'apparation, il sort du sol.", "Lorsque l'on fait trop de bruit grâce à un bloc spécial, le Sculk Hurleur, ce bloc détecte tous bruit et les envoient au Warden qui sortira du sol s'il y a trop de bruit", "Il est capable de tirer des rayon laser à l'endroit d'où proviennes les bruits qu'il entend.", "Il est capable de se baisser pour nous poursuivre dans des endroits petit." }, new List<string> { "Warden" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(5, "EnderDragon", "BOSS", "L'Ender Dragon est le premier boss ajouté à Minecraft. Il est présent dans le monde de l'End et le seul moyen de quitter cette dimension est de le vaincre.", new List<string> { "L'Ender Dragon est le boss de fin de minecraft.", "Il est capable de se régénérer grâce à aux cristaux présent dans sa dimensions. Pour le vaincre, il faut donc tout les détruire.", "Il y a qu'un seul et unique Ender Dragon, aucun autre apparaît sauf s'il est invoqué à nouveaux.", "Le seul moyen de ressusciter le Dragon est de poser 4 Cristal de l'End sur le portail qui permet de revenir dans le monde normal. Ainsi, il sera ressuscité et vous pourrez le vaincre à nouveau.x", "À sa mort, l'Ender Dragon laisse son œuf, il est purement décoratif, mais il n'y en a qu'un seul qui apparaît même après l'avoir vaincu plusieurs fois.", "Si l'Ender Dragon se retrouve dans l'Overworld (le monde normal) grâce à des commandes, chaque bloc qu'il touchera disparaîtra." }, new List<string> { "Ender Dragon" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(6, "Wither", "BOSS", "Le Wither est un boss extrêmement agressive, en effet non seulement il s'attaque au joueur mais également aux animaux et même à certains monstres.", new List<string> { "Grâce à ses trois têtes, il est capable d'attaquer simultanément trois cibles différentes en leur lançant ses têtes qui repoussent instantanément.", "Le Wither n'apparaît pas naturellement, il faut le créer. Pour ce faire, il faut faire un T avec 4 blocks de sable des âmes et trois têtes de wither squelette.", "Les têtes du Wither, si elles vous touchent, vous aurez l'effet wither, cet effet est comparable au poison, mais il peut tuer.", "Il est le seul boss pouvant casser l'obsidienne, le deuxième block le plus dur du jeu." }, new List<string> { "Wither", "Wither low" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(7, "Vache", "passif", "Les vaches sont des créatures passives. Elles fournissent du cuir et de la viande. Il est aussi possible de récupérer du lait avec un seau vide. La vache à une variante qui se nomme, la Champivache, il s'agit d'une vache qui apparaît seulement dans un biome spécial.", new List<string> { "Les vaches apparaissent par groupe de quatre minimums.", "Le lait des vaches enlève tous les effets de potion que vous aurez", "Les champivaches apparaissent seulement dans les biomes champignons. Il s'agit du biome le plus rare du jeu, il est composé d'une terre unique et de champignons.", " Les vaches champignon ont elles aussi une variante, la champivache marron.", "La champivache marron le devient lorsqu'une champivache ce fait frapper pas la foudre.", "Grâce à un bol, il est possible de récupérer des soupes de champivache sur les champivache." }, new List<string> { "Vache", "Vache champi", "Vache champi seche" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(8, "Loup", "passif", "Les loups sont des créatures que l'on peut rencontrer dans les forêts. Ils sont neutres et pourront soit devenir enragés si vous les attaquez, soit devenir votre allié si vous l'apprivoisez.", new List<string> { "Pour apprivoiser un loup il vous faudrat quelques os.", "Ils peuvent vous aidez à chasser des animaux ou des monstres car ils attaquent tous ce que vous attaquez et qui vous attaque.", "Pour leur redonner de la vie, il faut leur donner de la viande. Peut importe le type, ils mangent tous." }, new List<string> { "Loup", "Loup enrage" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(9, "Chat", "passif", "Les chats sont des animaux de compagnie. On les trouve dans les villages. Ils peuvent prendre 11 apparences différentes. Une fois adoptés grâce à du poisson, ils vous suivront partout à moins que vous leur disiez de ne plus bouger.", new List<string> { "Les chats ont la particularité d'effrayer les creepers", "Ils chassent aussi les lapins, qu'ils tuent pour vous ainsi que les bébés tortues.", "Les chats apprivoisés iront directement sur votre lit si vous en possédez un à proximité. Au réveil, ils peuvent parfois vous faire un cadeau (un objet aléatoire).", "Si un chat apparaît près d'une cabane à sorcière ou à proximité d'une sorcière, il sera automatiquement noir." }, new List<string> { "Chat" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(10, "Zombie", "hostile", "Les zombies sont des monstres lents mais qui peuvent voir les joueurs de très loin. Le seul moyen pour un zombie de faire des dégâts est de frapper à la main le joueur. Il a un cousin qui qui vit seulement dans le desert, le Husk, s'il vous attrape vous aurez l'effet de faim pendant 30sec.", new List<string> { "Les zombies attaquent naturellement les villageois, un villageois attaqué par un zombie mourra et se réincarnera en zombie villageois.", "Le seul moyens de sauver un zombie villageois est de lui lancé une potion de faiblesse et de lui donner un pomme d'or.", "Entourer le zombie villageois de barreaux de fer accélèrera le processus.", "Les zombies peuvent avoir des enfants. Les bébés zombies sont très rapide et diffice à atteindre par leurs petites tailles."}, new List<string> { "Zombie", "Zombie villageois", "Zombie desert" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(11, "Squelette", "hostile", "Les squelettes sont des créatures hostiles. Ils sont des ennemis rapides qui tirent des flèches sur les joueurs. Il existe une variante au squelette classique, le Vagabond. Le vagabond est un squelette qui apparaît uniquement dans les biomes froids. Comme les squelettes classiques, ils apparaissent uniquement la nuit ou dans les endroits sombres.", new List<string> { "Au contact de la lumière du soleil, ils prennent feu et finissent par mourir de leurs brûlures. Il peut arriver que des araignées apparaissent avec un squelette sur leur dos, on les appelle les Araignées Jockey.", "Le vagabond lance des flèches qui donnent l'effet lenteur aux joueurs." }, new List<string> { "Squelette", "Squelette Wither" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(12, "Creeper", "hostile", "Le creeper est une créature verte, pratiquement silencieuse, insidieuse et kamikaze. Une fois qu'il s'est assez rapproché du joueur, le creeper laissera échapper un sifflement sonore et explosera après un à deux secondes. Lorsqu'ils sont frappés par la foudre, les creepers se chargent et se transforment en creeper chargé.", new List<string> { "Il est également possible d'activer l'explosion des creepers manuellement en utilisant un briquet sur eux.", "Les creepers sont silencieux quand ils ne bougent pas et ne prennent pas feu quand ils sont exposé à la lumière du jour. En revanche, ils n'apparaissent que dans des endroits sombres (cavernes ou la nuit).", "Lorsqu'un creeper est tué par un squelette, il laissera tomber un disque.", "Lorsqu'un creeper chargé tue un monstre en explosant, le monstre tué par l'explosion laisseront tomber leurs têtes. De même pour les joueurs." }, new List<string> { "Creeper", "Creeper Chargee" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(13, "Phantom", "hostile", "Les phantoms sont des monstres volants en haute altitude, ils apparaissent uniquement la nuit et au dessus des joueurs n'ayant pas domit depuis au 3 jours.", new List<string> { "Si le joueur fatigué est en extérieur durant la nuit les phantoms apparaissent par groupe de 1 à 4 à 20 blocks de haut.", "Plus les joueurs passent de temps sans dormir, et plus il y a de chances que des phantoms apparaissent en nombre.", "Ils attaquent en faisant un piqué sur le joueur avant de remonter en altitude.", "Le seul moyen d'empêcher leur apparition, est de dormir ou de mourir, ainsi le compteur de fatigue se remettra à zéro." }, new List<string>{"Phantom"}, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(14, "Enderman", "hostile", "L'Enderman est un monstre assez rre dans le monde normal. C'est un mob qui à la possibilité de prendre et de déplacer des blocs.", new List<string> { "Ils ne vous attaqueront pas sauf si vous les regardez directement dans les yeux, ils se téléporteront alors derrière vous et deviendrons extrêmement hostiles.", "L'eau (et donc la pluie) est leur ennemie, en effet au contact de celle-ci, ils perdront de la vie, c'est pourquoi ils se téléporteront instantanément.", "Les Endermans sont omniprésents dans le monde de l'End.", "Comme la plupart des monstres, les Endermans apparaissent seulement dans les endroits sombres." }, new List<string> { "Enderman" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(15, "Slime", "hostile", "Les slimes sont des cubes verts translucides. Ils peuvent être répertoriés dans 3 tailles : Grand, moyen et petit.", new List<string> { "Les slimes peuvent apparaitre à la fois dans des zones éclairées et sombres, mais uniquement dans les couches les plus profondes et dans des endroit plat.", "Ils apparaissent généralement dans de grandes cavernes ou des mines à ciel ouvert, puisqu'ils ont besoin de place.", "Si vous tuez un Gros slime, il peut se diviser en deux, trois ou quatre slime de taille plus petite."}, new List<string> { "Slime" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(16, "Araignee", "hostile", "Les araignées sont agressives au cours de la nuit ou dans l'obscurité, on les reconnait à leurs yeux qui brillent en rouge.", new List<string> { "Elles sont rapide et sont caapble de grimper aux murs.", "Lorsqu'elles poursuivent le joueur pendant la nuit, elles continueront à les chasser durant la journée.", "En journée, elles ne vous attaqeuront pas à moins d'être provoquées", "Il peut arriver que des araignées apparaissent avec un squelette sur leurs dos, on les appelle les Araignées Jockey." }, new List<string> { "Araignee", "Araignee jockey" }, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(17, "Piglin Zombifié", "passif", "Le piglin zombifié est une créature neutre qui devient agressive s'il est attaqué. On le trouve très fréquement dans le nether, mais il est également possible de le rencontrer dans le monde normal où il peut apparaitre depuis un portail du Nether.", new List<string> { "Les pignlins zombies on l'esprits d'équipes, si vous en attaquez un, tous ceux de la zone viendront vous attaquez.", "Ce monstre remplace le cochon zombie, avant que les piglins soit rajouté au jeu en version 1.16, il n'y avait pas des piglin zombifié mais des cochons zombies.", "Ils peuvent aussi apparaître sur des Strider afin de traverser la lave facilement" }, new List<string> { "Piglin zobifie", "Piglin Arpenteur"}, new ObservableCollection<Conseil> { }));
lm.Add(new Monstre(18, "Strider", "passif", "L'arpenteur est un mob passif du Nether. Il vie dans les profondeurs du Nether, sur l'océan de lave. Lorsqu'il n'est plus sur la lave, il frissone. Il est possible de l'apprivoiser en plaçant une selle sur son dos.", new List<string> { "Une fois sur son dos, on peut controler ses déplacements en tenant en main un champignon biscornu au bout d'un baton.", "Les striders ne craingne pas la chaleur de la lave, en revenche ils prendront de dégât s'il sont en contact avec de l'eau: ce qui est normallement impossible dans le Nether mais possible s'ils franchissent un portail vers le monde normal. La pluie leur inflige également des dégâts.", "Ils apparaissent parfois avec un bébé strider sur eux." }, new List<string> { "Strider", "Strider hors de la lave" }, new ObservableCollection<Conseil> { }));
return lm;
}

@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -13,6 +14,7 @@ namespace Persistance
public IMonsterDataManager Pers { get; set; }
private ObservableCollection<Monstre> monsters = null!;
public ObservableCollection<Monstre> ListMonsters
{
get
@ -34,12 +36,13 @@ namespace Persistance
return Pers.loadMonsters();
}
public List<Monstre> search(string texte)
public ObservableCollection<Monstre> search(string texte)
{
return (from Monstre m in ListMonsters
List<Monstre> listMonstre = (from Monstre m in ListMonsters
where m.Name.Contains(texte, System.StringComparison.CurrentCultureIgnoreCase)
select m).ToList(); // LINQ
}
return new ObservableCollection<Monstre>(listMonstre);
} //BINDER DIRECTEMENT ICI
public MonsterManager(IMonsterDataManager dataMngr)
{

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
namespace Tests
{
public class Conseil_UT
{
User userTest = new User("Moi", "Monchanin", "Liam", "feur", new List<Monstre> { });
Monstre monstreTest = new Monstre(2, "Mouton", "passif", "Les moutons sont des créatures passives.", new List<string> { "Avec une cisaille, il est possible de rasé la laine d'un mouton"}, new List<string> { "Mouton" }, new ObservableCollection<Conseil> { });
[Fact]
public void ConseilConstructorGood()
{
string texte = "Ceci est un conseil.";
Conseil conseil = new Conseil(userTest, texte, monstreTest);
Assert.Equal(userTest, conseil.Auteur);
Assert.Equal(texte, conseil.Texte);
Assert.Equal(monstreTest, conseil.LeMonstre);
}
[Fact]
public void ConseilConstructorNullUser()
{
string texte = "Ceci est un conseil.";
Assert.Throws<ArgumentNullException>(() => new Conseil(null, texte, monstreTest));
}
[Fact]
public void ConseilConstructorNullMonster()
{
string texte = "Ceci est un conseil.";
Assert.Throws<ArgumentNullException>(() => new Conseil(userTest, texte, null));
}
[Fact]
public void ConseilConstructorTextVide()
{
// Arrange
string texte = "";
// Act & Assert
Assert.Throws<ArgumentNullException>(() => new Conseil(userTest, texte, monstreTest));
}
}
}

@ -58,7 +58,6 @@
</Setter>
</Style>
</FlexLayout.Resources>
<Image
Source="bienvenue.png"
VerticalOptions="Center"

@ -21,6 +21,7 @@ namespace Vues
private async void Invite_Clicked(object sender, EventArgs e)
{
(Application.Current as App).User = null;
await Navigation.PushAsync(new SearchMob());
}
}

@ -1,33 +1,29 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="Vues.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Vues"
Shell.FlyoutBehavior="Disabled"
Shell.FlyoutWidth="60">
<ShellContent
ContentTemplate="{DataTemplate local:Accueil}"
FlyoutIcon="home.png"
Route="Accueil" />
<ShellContent
ContentTemplate="{DataTemplate local:Connexion}"
FlyoutIcon="cadena.png"
Route="Connexion" />
<ShellContent
ContentTemplate="{DataTemplate local:Inscription}"
FlyoutIcon="cadena.png"
Route="Inscriiption" />
<ShellContent
ContentTemplate="{DataTemplate local:SearchMob}"
FlyoutIcon="cadena.png"
Route="SearchMob" />
<ShellContent
ContentTemplate="{DataTemplate local:Favoris}"
FlyoutIcon="star.png"
Route="Favoris" />
<ShellContent
ContentTemplate="{DataTemplate local:Collection}"
FlyoutIcon="star.png"
Route="Collection" />
</Shell>
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="Vues.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:Vues"
Shell.FlyoutBehavior="Disabled"
Shell.FlyoutWidth="60">
<ShellContent
ContentTemplate="{DataTemplate local:Accueil}"
FlyoutIcon="home.png"
Route="Accueil" />
<ShellContent
ContentTemplate="{DataTemplate local:Connexion}"
FlyoutIcon="cadena.png"
Route="Connexion" />
<ShellContent
ContentTemplate="{DataTemplate local:Inscription}"
FlyoutIcon="cadena.png"
Route="Inscriiption" />
<ShellContent
ContentTemplate="{DataTemplate local:SearchMob}"
FlyoutIcon="cadena.png"
Route="SearchMob" />
<ShellContent
ContentTemplate="{DataTemplate local:Collection}"
FlyoutIcon="star.png"
Route="Collection" />
</Shell>

@ -4,51 +4,39 @@
x:Class="Vues.Collection"
BackgroundImageSource="backcollection.jpg"
>
<VerticalStackLayout
>
<VerticalStackLayout>
<HorizontalStackLayout BackgroundColor="{StaticResource buttonBackgroundColor}">
<ImageButton Source="arrow.png" WidthRequest="40"
BackgroundColor="{StaticResource buttonBackgroundColor}"
Clicked="ImageButton_Clicked"/>
<Line X1="0" Y1="0" X2="0" Y2="70" Stroke="Black" StrokeThickness="2"/>
<Label Text=" Monstre déjà vu"></Label>
<CheckBox
Color="{StaticResource BleuFonce}"></CheckBox>
<CheckBox x:Name="CheckboxdejaVu"
Color="{StaticResource BleuFonce}"
IsChecked="True"
CheckedChanged="CheckedVu"></CheckBox>
<Label Text=" Monstre jamais vu"></Label>
<CheckBox Color="{StaticResource BleuFonce}"></CheckBox>
<CheckBox x:Name="CheckboxpasVu"
Color="{StaticResource BleuFonce}"
CheckedChanged="CheckedPasVu"></CheckBox>
</HorizontalStackLayout>
<Line X1="0" Y1="0" X2="1500" Y2="0" Stroke="Black" StrokeThickness="2"/>
<FlexLayout
Wrap="Wrap">
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
<Image Source="cartedragon.png"
HeightRequest="300"
Margin="5, 5, 0, 0"></Image>
</FlexLayout>
<VerticalStackLayout >
<ListView x:Name="ListViewMonsters" ItemsSource="{Binding MonstresDejaVu}" Grid.Row="1">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<VerticalStackLayout>
<Image Source="{Binding ImageLink}"
HeightRequest="50"
Margin="20, 20, 20, 20"/>
</VerticalStackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</VerticalStackLayout>
</VerticalStackLayout>
</ContentPage>

@ -1,9 +1,71 @@
using Model;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
namespace Vues;
public partial class Collection : ContentPage
public partial class Collection : ContentPage, INotifyPropertyChanged
{
public Collection()
{
InitializeComponent();
}
public ObservableCollection<Monstre> MnstrTemp = (Application.Current as App).monsterManager.ListMonsters;
public ObservableCollection<Monstre> MonstresDejaVu { get; set; }
public Collection()
{
InitializeComponent();
User toto = (Application.Current as App).User;
MonstresDejaVu = new ObservableCollection<Monstre>(toto.monstresDejaVu);
var MnstrTemp = new ObservableCollection<Monstre> { };
MnstrTemp = new ObservableCollection<Monstre>((Application.Current as App).monsterManager.ListMonsters.Except(MonstresDejaVu));
ListViewMonsters.BindingContext = this;
}
private void UpdateListMobs(ObservableCollection<Monstre> Monstres) // /!\ Qd on décoche Monstre déjà vu et re coche ils ne veulent pas réapparaître sauf si on clique aussi sur monstre pas vu
{
var monstresDejaVu = Monstres.Where(monstre => (Application.Current as App).User.monstresDejaVu.Contains(monstre)).ToList();
var monstresPasVu = (Application.Current as App).monsterManager.ListMonsters.Except(monstresDejaVu).ToList();
Monstres.Clear();
if (CheckboxdejaVu.IsChecked && CheckboxpasVu.IsChecked)
{
foreach (var monstre in monstresDejaVu.Concat(monstresPasVu))
{
Monstres.Add(monstre);
}
}
// Si monstres déjà vu checked et monstres pas vu pas checked alors on l'ajoute à la collection et on supprime les monstres pas vu
else if (CheckboxdejaVu.IsChecked && !CheckboxpasVu.IsChecked)
{
foreach (var monstre in monstresDejaVu)
{
Monstres.Add(monstre);
}
}
// Si monstres pas vu checked alors on l'ajoute à la collection
else if (CheckboxpasVu.IsChecked && !CheckboxdejaVu.IsChecked)
{
foreach (var monstre in monstresPasVu)
{
if (!monstresDejaVu.Contains(monstre))
{
Monstres.Add(monstre);
}
}
}
}
private void CheckedVu(object sender, CheckedChangedEventArgs e)
{
UpdateListMobs(MonstresDejaVu);
}
private void CheckedPasVu(object sender, CheckedChangedEventArgs e)
{
UpdateListMobs(MonstresDejaVu);
}
private async void ImageButton_Clicked(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
}

@ -58,8 +58,9 @@
Source="connexion.png"
HeightRequest="70"
Margin="0, 0, 0, 30" />
<Entry x:Name="IdEntry" Placeholder="Identifiant" ReturnType="Next" />
<Entry x:Name="IdEntry" TextChanged="IdEntry_TextChanged" Placeholder="Identifiant" ReturnType="Next" />
<Entry x:Name="PsswEntry" Placeholder="Mot de passe" IsPassword="True" ReturnType="Next" />
<Label x:Name="resultLabel" IsVisible="False" Text="Wrong username or password!" TextColor="Red"/>
<Button Style="{StaticResource buttonStyle}"
Text="Valider"
Clicked="ValiderClicked"/>

@ -23,10 +23,18 @@ public partial class Connexion : ContentPage
{
(Application.Current as App).User = u;
await Navigation.PushAsync(new SearchMob());
return;
}
}
resultLabel.IsVisible = true;
return;
}
private void IdEntry_TextChanged(object sender, TextChangedEventArgs e)
{
resultLabel.IsVisible = false;
}
/*
private void Id_Entry_Completed(object sender, EventArgs e)
{

@ -1,12 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Vues.Favoris">
<VerticalStackLayout
VerticalOptions="Center">
<Label
Text="THIS IS THE FAVS PAGE"
VerticalOptions="Center"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ContentPage>

@ -1,9 +0,0 @@
namespace Vues;
public partial class Favoris : ContentPage
{
public Favoris()
{
InitializeComponent();
}
}

@ -58,18 +58,19 @@
HeightRequest="70"
Margin="0, 0, 0, 30" />
<HorizontalStackLayout>
<Entry Placeholder="Nom"
<Entry x:Name="Nom" Placeholder="Nom"
Text="{Binding Nom}"/>
<Entry Placeholder="Prénom"
<Entry x:Name="Prenom" Placeholder="Prénom"
Text="{Binding Prenom}"/>
</HorizontalStackLayout>
<HorizontalStackLayout>
<Entry Placeholder="Identifiant"
<Entry x:Name="Id" TextChanged="Id_TextChanged" Placeholder="Identifiant"
Text="{Binding Pseudo}"/>
<Entry Placeholder="Mot de passe"
<Entry x:Name="Mdp" Placeholder="Mot de passe"
Text="{Binding Mdp}"
IsPassword="True"/>
</HorizontalStackLayout>
<Label x:Name="resultLabel" IsVisible="False" Text="Error, this username is already taken!" TextColor="Red"/>
<Button Style="{StaticResource buttonStyle}"
Text="Valider"
Clicked="Valid_Clicked"/>

@ -1,25 +1,60 @@
using Model;
using Persistance;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace Vues;
public partial class Inscription : ContentPage
{
List<User> users = new List<User>();
UserManager userMngr = new UserManager(new LoaderXml());
public User user { get; set; } = new User();
{
string nom;
string prenom;
string id;
string mdp;
public Inscription()
{
InitializeComponent();
BindingContext=user;
}
BindingContext = (Application.Current as App).userManager;
}
private async void Valid_Clicked(object sender, EventArgs e)
{
if (!(Application.Current as App).userManager.checkIfPseudoExists(user.Pseudo))
id = Id.Text;
mdp = Mdp.Text;
nom = Nom.Text;
prenom = Prenom.Text;
User newUser = new User { };
if ((Application.Current as App).userManager.checkIfPseudoExists(id))
{
resultLabel.Text = "Error, this username is already taken!";
resultLabel.IsVisible = true;
return;
//await Navigation.PushAsync(new SearchMob());
}
try
{
newUser = new User(id, nom, prenom, mdp);
(Application.Current as App).userManager.ListUsers.Add(newUser);
(Application.Current as App).User = newUser;
await Navigation.PopAsync();
}
catch (ArgumentException)
{
users.Add(user);
userMngr.saveUsers(users);
userMngr.loadUsers();
await Navigation.PushAsync(new Accueil());
}
resultLabel.IsVisible = true;
resultLabel.Text = "Vous devez compléter tous les champs.";
}
catch (FormatException)
{
resultLabel.IsVisible = true;
resultLabel.Text = "Votre identifiant / mot de passe ne peut contenir seulement des nombres !";
}
//resultLabel.IsVisible = true;
//resultLabel.Text = "You must complete all entries!";
//resultLabel.IsVisible = true;
return;
}
private void Id_TextChanged(object sender, TextChangedEventArgs e)
{
resultLabel.IsVisible=false;
}
}

@ -1,54 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
x:Class="Vues.PageConnexion"
BackgroundImageSource="back.png">
<toolkit:DockLayout
>
<FlexLayout
Direction="Column"
JustifyContent="Center"
AlignItems="Center">
<Label
Text="Bienvenue !"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="38"
HeightRequest="100" />
<Button
Text="Se connecter"
FontSize="20"
WidthRequest="250"
HeightRequest="70"
BorderColor="Black"
BorderWidth="2"
Margin="5"
BackgroundColor="#6193b7"/>
<Button
Text="Créer un compte"
FontSize="20"
WidthRequest="250"
HeightRequest="70"
BorderColor="Black"
BorderWidth="2"
Margin="5"
BackgroundColor="#6193b7"/>
</FlexLayout>
</toolkit:DockLayout>
</ContentPage>

@ -1,9 +0,0 @@
namespace Vues;
public partial class PageConnexion : ContentPage
{
public PageConnexion()
{
InitializeComponent();
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 389 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 815 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 418 B

@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:shape="Microsoft.Maui.Controls.Shapes"
xmlns:model="clr-namespace:Model;assembly=Modèle"
x:Class="Vues.SearchMob"
BackgroundImageSource="backcollection.jpg">
<!--BackgroundImageSource="backcollection.jpg"-->
@ -31,21 +32,83 @@
</VisualStateGroupList>
</Setter>
</Style>
<Style x:Key="buttonStyle" TargetType="Button">
<Setter Property="FontSize" Value="Small" />
<Setter Property="WidthRequest" Value="100" />
<Setter Property="HeightRequest" Value="50" />
<Setter Property="BorderColor" Value="Black" />
<Setter Property="BorderWidth" Value="1" />
<Setter Property="Margin" Value="5" />
<Setter Property="BackgroundColor" Value="{StaticResource buttonBackgroundColor}" />
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup>
<VisualState x:Name="Normal">
<VisualState.Setters>
<Setter Property="Scale"
Value="1" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="PointerOver">
<VisualState.Setters>
<Setter Property="Scale"
Value="1.05" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</Grid.Resources>
<Grid RowDefinitions="Auto, *" RowSpacing="25" WidthRequest="300"
BackgroundColor="{StaticResource buttonBackgroundColor}">
<HorizontalStackLayout Grid.Row="0">
<ImageButton Source="exit.png" WidthRequest="20" BackgroundColor="{StaticResource buttonBackgroundColor}"/>
<SearchBar Placeholder="Rechercher un monstre"
PlaceholderColor="DimGray"
CancelButtonColor="DimGray"/>
</HorizontalStackLayout>
<ListView x:Name="ListViewMonsters" ItemsSource="{Binding ListMonsters}" Grid.Row="1" ItemTapped="OnClick">
<VerticalStackLayout>
<HorizontalStackLayout Grid.Row="0">
<ImageButton Source="exit.png" WidthRequest="20" BackgroundColor="{StaticResource buttonBackgroundColor}" Clicked="QuitClicked"/>
<ImageButton Source="book.png" WidthRequest="20" BackgroundColor="{StaticResource buttonBackgroundColor}" Clicked="CollectionClicked"/>
<SearchBar x:Name="searchBar" Placeholder="Rechercher un monstre"
PlaceholderColor="DimGray"
CancelButtonColor="DimGray"
TextChanged="SearchBar_TextChanged"
Text="{Binding SearchText, Mode=TwoWay}"/>
</HorizontalStackLayout>
<Button Grid.Row="1"
Text="Filtrer"
BackgroundColor="{StaticResource buttonBackgroundColor}"
BorderColor="Black"
Clicked="FilterClicked"/>
<HorizontalStackLayout x:Name="HorizonFilterClicked" IsVisible="False">
<Grid ColumnDefinitions="Auto, Auto, Auto, Auto, Auto, Auto"
RowDefinitions="Auto, Auto"
x:Name="GridFilter">
<Label Grid.Column="0">Passive</Label>
<CheckBox x:Name="passive"
Color="Green"
Grid.Column="1"
IsChecked="True"
CheckedChanged="passive_CheckedChanged"/>
<Label Grid.Column="2">Hostile</Label>
<CheckBox x:Name="hostile"
Color="Red"
Grid.Column="3"
IsChecked="True"
CheckedChanged="hostile_CheckedChanged"/>
<Label Grid.Column="4">Boss</Label>
<CheckBox x:Name="boss"
Color="Purple"
Grid.Column="5"
IsChecked="True"
CheckedChanged="boss_CheckedChanged"/>
</Grid>
</HorizontalStackLayout>
</VerticalStackLayout>
<ListView x:Name="ListViewMonsters" ItemsSource="{Binding MnstrTemp}" Grid.Row="1" ItemTapped="OnClick">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<VerticalStackLayout>
<Image Source="{Binding ImageLink}">
<Image Source="{Binding ImageLink}"> <!-- PROBLEME ICI, LANCE POUR VOIR TU VAS VOIR ça fonctionne
mais si tu regardes dans la barre en haut, tu as plein d'erreurs en faisant des recherches -->
<VisualStateManager.VisualStateGroups>
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
@ -69,85 +132,139 @@
</ListView.ItemTemplate>
</ListView>
</Grid>
<ScrollView Grid.Column="1" Margin="10">
<Grid RowDefinitions="Auto,*,*,*" BindingContext="{Binding SelectedItem, Source={x:Reference ListViewMonsters}}">
<Grid Grid.Row="0" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ScrollView Grid.Column="1" Margin="10" x:Name="ScrollLayoutThatNeedsToBeRefreshed">
<!-- Grid du Detail contenant toutes les informations du monstre -->
<Grid RowDefinitions="Auto,Auto,Auto,Auto" BindingContext="{Binding SelectedItem, Source={x:Reference ListViewMonsters}}">
<Grid ColumnDefinitions="3*, *" Grid.Row="0">
<!-- Checkbox "Déjà Vu-->
<HorizontalStackLayout x:Name="dejaVuContainer" IsVisible="false" Grid.Column="0" VerticalOptions="Start">
<Label Text="Déjà vu ?" FontSize="20" TextColor="White" Margin="7"/>
<CheckBox Color="Green" CheckedChanged="CheckBox_CheckedChanged" x:Name="CheckDejaVu"/>
</HorizontalStackLayout>
<!-- Infos du monstre MODIFIE LE BINDING-->
<VerticalStackLayout Grid.Column="0"
Grid.Row="0">
<HorizontalStackLayout>
<Label Text="Déjà vu ?" FontSize="20" TextColor="White" Margin="7"/>
<CheckBox Color="Green"/>
</HorizontalStackLayout>
<Border Style="{StaticResource sectionStyle}" HorizontalOptions="Fill">
<Label FontSize="Small" Text="{Binding Description, StringFormat='{0}'}"/>
<VerticalStackLayout VerticalOptions="Center" Grid.Column="0">
<!-- Description du monstre -->
<Border Style="{StaticResource sectionStyle}">
<StackLayout>
<Label TextDecorations="Underline" Text="Description :" FontSize="Medium"/>
<Label FontSize="Small" Text="{Binding Description, StringFormat='{0}'}" HorizontalOptions="Fill"/>
</StackLayout>
</Border>
<Border Style="{StaticResource sectionStyle}">
<StackLayout>
<Label TextDecorations="Underline" Text="Caractéristiques du monstre :" FontSize="Medium" />
<ListView ItemsSource="{Binding CharacteristicsList}" Grid.Row="0">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label Text="{Binding ., StringFormat='{0}'}" FontSize="Small" VerticalOptions="Fill"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Border>
<Border Style="{StaticResource sectionStyle}" HorizontalOptions="Fill">
</VerticalStackLayout>
<!-- Image du monstre -->
<VerticalStackLayout Grid.Column="1">
<Border Grid.Row="1" Style="{StaticResource sectionStyle}" HorizontalOptions="Fill">
<Label FontSize="Small" Text="{Binding Dangerosite, StringFormat='Dangerosité : {0}'}"/>
</Border>
<Image x:Name="imageCollection" HeightRequest="600" HorizontalOptions="End"/>
</VerticalStackLayout>
</Grid>
<Border Style="{StaticResource sectionStyle}">
<ListView ItemsSource="{Binding CharacteristicsList}" Grid.Row="1">
<StackLayout Grid.Row="1">
<Border Style="{StaticResource sectionStyle}">
<StackLayout>
<Label TextDecorations="Underline" Text="Apparences :" FontSize="Medium"/>
<ListView x:Name="ListAppearance" VerticalOptions="Fill" ItemsSource="{Binding AppearanceList}" Grid.Row="1" ItemTapped="ListAppearance_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Label FontSize="Medium" Text="{Binding ., StringFormat='{0}'}"/>
<Label Text="{Binding ., StringFormat='{0}'}" FontSize="Small"/>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
<Border Style="{StaticResource sectionStyle}">
<ListView ItemsSource="{Binding AppearanceList}" Grid.Row="1">
</StackLayout>
</Border>
<!-- Conseils -->
<Border Grid.Row="3" Style="{StaticResource sectionStyle}">
<StackLayout>
<Label TextDecorations="Underline" Text="Conseils :" FontSize="Medium"/>
<!-- Bouton d'ajout de conseil -->
<Button x:Name="ButtonAddConseil" Margin="8" HorizontalOptions="End" IsVisible="False" Text="Ajouter un conseil" Grid.Row="0" Grid.Column="1" Clicked="OnAddConseilClicked" />
<HorizontalStackLayout>
<!-- On devrait faire des styles globaux pour ces boutons, comme en haut du XAML -->
<ImageButton
x:Name="ConseilOptionModify"
IsVisible="False"
IsEnabled="False"
CornerRadius="5"
Scale="0.7"
Source="pencil.png"
HeightRequest="12" WidthRequest="12"
CommandParameter="{Binding .}"
Clicked="ConseilOptionModify_Clicked"/>
<ImageButton
x:Name="ConseilOptionDelete"
IsVisible="False"
IsEnabled="False"
CornerRadius="5"
Scale="0.7"
Source="bin.png"
HeightRequest="12" WidthRequest="12"
CommandParameter="{Binding .}"
Clicked="ConseilOptionDelete_Clicked"/>
</HorizontalStackLayout>
<VerticalStackLayout x:Name="AddConseilLayout" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" IsVisible="False">
<Editor x:Name="texteConseilEntry" TextChanged="texteConseilEntry_TextChanged" AutoSize="TextChanges" Placeholder="Texte du conseil" PlaceholderColor="{StaticResource Gray500}"/>
<Grid ColumnDefinitions="*,*" Padding="8" HorizontalOptions="CenterAndExpand">
<Button Grid.Column="0" Text="Valider" Clicked="OnValiderConseilClicked" />
<Button Grid.Column="1" Text="Annuler" Clicked="OnExitConseilClicked" />
</Grid>
</VerticalStackLayout>
<VerticalStackLayout x:Name="ModifyConseilLayout" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" IsVisible="False">
<Editor x:Name="conseilEditor" TextChanged="conseilEditor_TextChanged" AutoSize="TextChanges" Placeholder="Texte du conseil" PlaceholderColor="{StaticResource Gray500}"/>
<Grid ColumnDefinitions="*,*" Padding="8" HorizontalOptions="CenterAndExpand">
<Button Grid.Column="0" Text="Valider" Clicked="OnValiderModifConseilClicked" />
<Button Grid.Column="1" Text="Annuler" Clicked="OnExitModifConseilClicked" />
</Grid>
</VerticalStackLayout>
<ListView x:Name="ListViewConseils" VerticalOptions="Fill" ItemsSource="{Binding ListConseils}" ItemTapped="ListViewConseils_ItemTapped">
<ListView.ItemTemplate>
<DataTemplate>
<!-- x:DataType="model:Conseil" Besoin de préciser pour pouvoir passer
l'objet en tant que Conseil en paramètre -->
<ViewCell>
<Label FontSize="Medium" Text="{Binding ., StringFormat='{0}'}"/>
<Border BackgroundColor="AntiqueWhite" StrokeThickness="2" StrokeShape="RoundRectangle 10">
<Grid ColumnDefinitions="*,70,70" RowDefinitions="*" Padding="0" MinimumHeightRequest="50" HorizontalOptions="Fill" VerticalOptions="Fill">
<!-- LA je ne comprends pas : pour que les VisualStates
fonctionnent sur tout le grid, et pas que sur le texte du label, il faut rajouter un background?? Bizarre-->
<VerticalStackLayout Padding="15,10,10,10" Grid.Column="0" VerticalOptions="Center">
<Label BindingContext="{Binding Auteur}" Text="{Binding Pseudo, StringFormat='{0} :'}"/>
<Label x:Name="labelConseil" VerticalOptions="Fill" LineBreakMode="WordWrap" Text="{Binding Texte, StringFormat='{0}'}" />
<Editor x:Name="editorConseil" IsVisible="false" VerticalOptions="Fill" Text="{Binding Texte, StringFormat='{0}'}" />
</VerticalStackLayout>
</Grid>
</Border>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
<!-- Conseils -->
<Border Grid.Row="3" Style="{StaticResource sectionStyle}">
<StackLayout>
<Button Text="Ajouter un conseil" Grid.Row="0" Grid.Column="1" Clicked="OnAddConseilClicked" />
<StackLayout x:Name="AddConseilLayout" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" IsVisible="False">
<Editor x:Name="texteConseilEntry" Placeholder="Texte du conseil" PlaceholderColor="{StaticResource Gray500}"/>
<Button Text="Valider" Clicked="OnValiderConseilClicked" />
<Button Text="Annuler" Clicked="OnExitConseilClicked" />
</StackLayout>
<ListView x:Name="ListViewConseils" ItemsSource="{Binding ListConseils}" Grid.Row="1">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Grid RowDefinitions="Auto" ColumnDefinitions="Auto, Auto">
<Label Text="{Binding Id}" Grid.Column="0"/>
<Label Text="{Binding Auteur}" Grid.Column="0"/>
<Label Text="{Binding Texte}" Grid.Column="1" />
<!-- Bouton d'ajout de conseil -->
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</Border>
</VerticalStackLayout>
<!-- Image du mob -->
<Image Grid.Column="1" Source="{Binding CardLink}" HeightRequest="600" HorizontalOptions="End"/>
</Grid>
</StackLayout>
</Border>
</StackLayout>
</Grid>
</ScrollView>
</Grid>

@ -1,42 +1,99 @@
using Microsoft.Maui.Controls;
using Microsoft.Maui.Layouts;
using Model;
using Persistance;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
namespace Vues;
public partial class SearchMob : ContentPage
public partial class SearchMob : ContentPage, INotifyPropertyChanged
{
public SearchMob()
public ObservableCollection<Monstre> MnstrTemp { get; set; }
private string searchText;
private Conseil conseilSelectionne { get; set; }
public string SearchText
{
get
{
return searchText;
}
set
{
searchText = value;
if (searchText == "")
{
MnstrTemp = (Application.Current as App).monsterManager.ListMonsters;
}
else MnstrTemp = (Application.Current as App).monsterManager.search(searchText);
UpdateAffichMobs();
OnPropertyChanged(nameof(MnstrTemp));
}
}
string appearanceSelected { get; set; } = string.Empty;
public SearchMob()
{
InitializeComponent();
BindingContext = (Application.Current as App).monsterManager;
MnstrTemp = (Application.Current as App).monsterManager.ListMonsters;
ListViewMonsters.BindingContext = this;
searchBar.BindingContext = this;
imageCollection.BindingContext = this;
if ((Application.Current as App).User != null)
{
ButtonAddConseil.IsVisible = true;
ConseilOptionModify.IsVisible = true;
ConseilOptionDelete.IsVisible = true;
dejaVuContainer.IsVisible = true;
CheckDejaVu.IsChecked = false;
}
}
public void refreshScrollView()
{
ScrollLayoutThatNeedsToBeRefreshed.IsVisible = false;
ScrollLayoutThatNeedsToBeRefreshed.IsVisible = true;
}
public void OnClick(object sender, ItemTappedEventArgs e)
{
(App.Current as App).MonstreSelectionne = e.Item as Monstre;
}
imageCollection.Source = imageLinkConverter((App.Current as App).MonstreSelectionne.AppearanceList.First());
AddConseilLayout.IsVisible = false;
conseilSelectionne = null;
if ((Application.Current as App).User != null)
{
foreach (Monstre m in (App.Current as App).User.monstresDejaVu)
{
if (m.Name.Equals((App.Current as App).MonstreSelectionne.Name))
{
CheckDejaVu.IsChecked = true;
break;
}
else
{
CheckDejaVu.IsChecked = false;
}
}
}
refreshScrollView();
}
private void OnAddConseilClicked(object sender, EventArgs e)
{
var button = sender as Button;
var selectedConseil = button?.BindingContext as Conseil;
// Afficher les champs à remplir pour ajouter un conseil
var addConseilLayout = button?.Parent?.FindByName<StackLayout>("AddConseilLayout");
if (addConseilLayout != null)
if (!AddConseilLayout.IsVisible)
{
addConseilLayout.IsVisible = true;
AddConseilLayout.IsVisible = true;
texteConseilEntry.Text = null;
refreshScrollView();
}
}
private void OnValiderConseilClicked(object sender, EventArgs e)
{
var button = sender as Button;
var addConseilLayout = button?.Parent?.FindByName<StackLayout>("AddConseilLayout");
if (addConseilLayout != null)
if (AddConseilLayout != null)
{
// récupère les valeurs des champs pour ajouter un conseil
var texteConseil = texteConseilEntry.Text;
string texteConseil = texteConseilEntry.Text;
// Ajouter le nouveau conseil à la liste des conseils du monstre sélectionné
var selectedMonstre = (App.Current as App).MonstreSelectionne;
if (selectedMonstre != null && !string.IsNullOrWhiteSpace(texteConseil))
@ -44,19 +101,177 @@ public partial class SearchMob : ContentPage
var nouveauConseil = new Conseil((App.Current as App).User, texteConseil, selectedMonstre);
selectedMonstre.ListConseils.Add(nouveauConseil);
}
texteConseilEntry.Text = null;
AddConseilLayout.IsVisible = false;
}
refreshScrollView();
}
private void OnExitConseilClicked(object sender, EventArgs e)
{
texteConseilEntry.Text = null;
AddConseilLayout.IsVisible = false;
}
private string imageLinkConverter(string imageLink)
{
imageLink = String.Concat(imageLink.Where(c => !Char.IsWhiteSpace(c)));
imageLink = "collection" + imageLink.ToLower() + ".png";
return imageLink;
}
private void ListAppearance_ItemTapped(object sender, ItemTappedEventArgs e)
{
appearanceSelected = e.Item as string;
imageCollection.Source = imageLinkConverter(appearanceSelected);
}
private void FilterClicked(object sender, EventArgs e)
{
// Inverse la valeur booléenne de IsVisible => Permet d'afficher ou non les boutons de filtrage
HorizonFilterClicked.IsVisible = !HorizonFilterClicked.IsVisible;
}
private void UpdateAffichMobs()
{
var filtreMobs = MnstrTemp.Where(Monstre =>
(boss.IsChecked && Monstre.Dangerosite == "BOSS") ||
(hostile.IsChecked && Monstre.Dangerosite == "hostile") ||
(passive.IsChecked && Monstre.Dangerosite == "passif"));
ListViewMonsters.ItemsSource = filtreMobs.ToList();
}
private void passive_CheckedChanged(object sender, CheckedChangedEventArgs e)
{
UpdateAffichMobs();
}
private void hostile_CheckedChanged(object sender, CheckedChangedEventArgs e)
{
UpdateAffichMobs();
}
private void boss_CheckedChanged(object sender, CheckedChangedEventArgs e)
{
UpdateAffichMobs();
}
private void SearchBar_TextChanged(object sender, TextChangedEventArgs e)
{
SearchText = e.NewTextValue;
}
private void texteConseilEntry_TextChanged(object sender, TextChangedEventArgs e)
{
(ScrollLayoutThatNeedsToBeRefreshed as IView).InvalidateMeasure(); //Permet de recalculer la taille de la scrollView
}
private void ImageButton_Clicked(object sender, EventArgs e)
{
//VerticalModifConseil.IsVisible = true; ABANDON je vais faire la collection
}
private async void CollectionClicked(object sender, EventArgs e)
{
await Navigation.PushAsync(new Collection());
}
private async void QuitClicked(object sender, EventArgs e)
{
(Application.Current as App).User = null;
await Navigation.PopToRootAsync(); //Pour retourner à la page racine
}
private void CheckBox_CheckedChanged(object sender, CheckedChangedEventArgs e)
{
if (CheckDejaVu.IsChecked)
{
if ((App.Current as App).User != null)
{
CheckDejaVu.IsChecked = true;
(Application.Current as App).User.monstresDejaVu.Add((Application.Current as App).MonstreSelectionne);
}
}
else
{
if ((App.Current as App).User != null)
{
CheckDejaVu.IsChecked = false;
(Application.Current as App).User.monstresDejaVu.Remove((Application.Current as App).MonstreSelectionne);
}
}
}
// Réinitialiser les champs et masquer la section d'ajout de conseil
texteConseilEntry.Text = string.Empty;
addConseilLayout.IsVisible = false;
private void ConseilOptionDelete_Clicked(object sender, EventArgs e)
{
if (conseilSelectionne != null)
{
if ((App.Current as App).User.Pseudo.Equals(conseilSelectionne.Auteur.Pseudo))
{
(App.Current as App).MonstreSelectionne.ListConseils.Remove(conseilSelectionne);
ConseilOptionModify.IsEnabled = false;
ConseilOptionDelete.IsEnabled = false;
}
}
}
private void OnExitConseilClicked(object sender, EventArgs e)
private void ConseilOptionModify_Clicked(object sender, EventArgs e)
{
if (!ModifyConseilLayout.IsVisible)
{
ModifyConseilLayout.IsVisible = true;
conseilEditor.Text = conseilSelectionne.Texte;
refreshScrollView();
}
}
private void ListViewConseils_ItemTapped(object sender, ItemTappedEventArgs e)
{
if((App.Current as App).User != null)
{
conseilSelectionne = e.Item as Conseil;
if (conseilSelectionne != null && (App.Current as App).User.Pseudo.Equals(conseilSelectionne.Auteur.Pseudo))
{
ConseilOptionModify.IsEnabled = true;
ConseilOptionDelete.IsEnabled = true;
}
else
{
ConseilOptionModify.IsEnabled = false;
ConseilOptionDelete.IsEnabled = false;
}
}
}
private void conseilEditor_TextChanged(object sender, TextChangedEventArgs e)
{
(ScrollLayoutThatNeedsToBeRefreshed as IView).InvalidateMeasure();
}
private void OnValiderModifConseilClicked(object sender, EventArgs e)
{
if (ModifyConseilLayout != null)
{
string texteConseil = conseilEditor.Text;
var selectedMonstre = (App.Current as App).MonstreSelectionne;
if (selectedMonstre != null && !string.IsNullOrWhiteSpace(texteConseil) && !conseilSelectionne.Texte.Equals(texteConseil))
{
selectedMonstre.ListConseils.Remove(conseilSelectionne);
selectedMonstre.ListConseils.Add(new Conseil((App.Current as App).User, texteConseil, selectedMonstre));
}
conseilEditor.Text = null;
ModifyConseilLayout.IsVisible = false;
ConseilOptionModify.IsEnabled = false;
ConseilOptionDelete.IsEnabled = false;
}
refreshScrollView();
}
private void OnExitModifConseilClicked(object sender, EventArgs e)
{
var button = sender as Button;
var addConseilLayout = button?.Parent?.FindByName<StackLayout>("AddConseilLayout");
var texteConseilEntry = addConseilLayout.Children[1] as Editor;
texteConseilEntry.Text = string.Empty;
addConseilLayout.IsVisible = false;
conseilEditor.Text = null;
ModifyConseilLayout.IsVisible = false;
}
}
}

Binary file not shown.
Loading…
Cancel
Save