using CoreLibrary; using MauiSpark.Pages; using System.ComponentModel; namespace MauiSpark.Vues; /// /// Vue affichant les détails d'une partie en cours. /// public partial class PartieCommenceeVue : ContentView, INotifyPropertyChanged { /// /// Propriété de dépendance pour la partie en cours. /// public static readonly BindableProperty PartieProperty = BindableProperty.Create(nameof(Partie), typeof(Partie), typeof(PartieCommenceeVue), null, propertyChanged: QuandPartieChangee); /// /// La partie en cours. /// public Partie Partie { get => (Partie)GetValue(PartieProperty); set => SetValue(PartieProperty, value); } /// /// Le nom des règles de la partie. /// public string NomRegles { get => Partie != null ? Partie.Regles.Nom : ""; } /// /// Le tour actuel de la partie. /// public string TourActuel { get => $"Tour : {(Partie != null ? Partie.Tour : 0)} / {(Partie != null ? Partie.Regles.NbTour : 0)}"; } /// /// Les joueurs participant à la partie. /// public string[] Joueurs { get => Partie != null ? Partie.Joueurs.ToArray() : []; } /// /// Le nombre de joueurs participant à la partie. /// public string NombreJoueurs => $"Joueurs : {Joueurs.Length} / {(Partie != null ? Partie.Regles.NbJoueurs : 0)}"; /// /// Méthode déclenchée lorsqu'une propriété de la partie change. /// private static void QuandPartieChangee(BindableObject bindable, object ancienneValeur, object nouvelleValeur) { ((PartieCommenceeVue)bindable).OnPropertyChanged(nameof(NomRegles)); ((PartieCommenceeVue)bindable).OnPropertyChanged(nameof(TourActuel)); ((PartieCommenceeVue)bindable).OnPropertyChanged(nameof(Joueurs)); ((PartieCommenceeVue)bindable).OnPropertyChanged(nameof(NombreJoueurs)); } /// /// Méthode déclenchée lorsqu'un utilisateur appuie sur la vue de la partie. /// private void PartiePressee(object? sender, EventArgs e) { if (Partie == null) return; Partie partie = MauiProgram.Manageur.ChargerPartie(Partie); partie.PartieDemanderJoueur += new ConnexionPage().QuandDemanderNom; partie.PartiePartieTerminee += new VictoirePage().QuandPartieTerminee; partie.PartieNouveauTour += new PlateauPage().QuandNouveauTour; partie.Jouer(); } /// /// Constructeur par défaut de la vue de la partie en cours. /// public PartieCommenceeVue() { InitializeComponent(); } }