using CoreLibrary.Exceptions; using CoreLibrary.Persistance; using CoreLibrary.Evenements; using CoreLibrary.Regles; using CoreLibrary.Statistiques; using System.Runtime.Serialization; namespace CoreLibrary.Joueurs { [DataContract] [KnownType(typeof(ReglesClassiques))] public class Joueur : IEstPersistant { public event EventHandler? JoueurSeConnecter; private void QuandJoueurSeConnecter() => JoueurSeConnecter?.Invoke(this, new JoueurSeConnecterEventArgs(this)); [DataMember] private Dictionary<(IRegles, Statistique), int> statistiques = new Dictionary<(IRegles, Statistique), int>(); [DataMember] public string Nom { get; private set; } = ""; [DataMember] public bool EstConnecte { get; private set; } = false; public Joueur() { } public Joueur(string nom) { Nom = nom; } public Joueur SeConnecter(Joueur joueur) { if (EstConnecte) throw new JoueurDejaConnecteException(this); Nom = joueur.Nom; statistiques = joueur.statistiques; EstConnecte = true; QuandJoueurSeConnecter(); return this; } public override string ToString() => Nom; public int Statistique(IRegles regles, Statistique statistique) => statistiques.GetValueOrDefault((regles, statistique),0); public void IncrementerStatistique(IRegles regles, Statistique statistique) => statistiques[(regles, statistique)] = Statistique(regles, statistique) + 1; } }