using LittleTown.Core.Enums;
namespace LittleTown.Core;
/// Représente les données propre à un joueur
public class PlayerZone : ICloneable
{
/// Les ressources que possede le joueur
public IDictionary Ressources { get; init; } = new Dictionary();
/// l'id du joueur a cette zone
public required string PlayerName { get; init; }
/// La liste des objectifs que le joueur possede///
public IReadOnlyCollection Objectives { get => _objectives.AsReadOnly(); init => _objectives = new List(value); }
private List _objectives = new List();
/// Le marqueur de score pendant le match
public int ScoreMarker { get; init; }
/// Permet d'ajouter d'une type de ressources au stock du joueur
/// le type de ressources
/// la quantité non nulle non négative
public void AddRessources(ResourceType res, int qte)
{
ArgumentOutOfRangeException.ThrowIfLessThan(qte, 1);
if (Ressources.ContainsKey(res))
{
Ressources[res] += qte;
}
else
{
Ressources.Add(res, qte);
}
}
///
/// Assigner des objectifs au joueur
///
///
public void AddObjectives(ICollection objectives)
{
_objectives.AddRange(objectives);
}
/// Cloner ce playerZone
/// Une copie de l'objet
public object Clone()
{
PlayerZone result = new PlayerZone()
{
Ressources = new Dictionary(Ressources),
Objectives = new List(Objectives),
ScoreMarker = ScoreMarker,
PlayerName = PlayerName
};
return result;
}
}