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();
}
}