Files
LittleTown/src/LittleTown.Core/PlayerZone/PlayerZone.cs
mcmuzzle 4a5fc49c31
All checks were successful
check main state / build (8.0.x) (push) Successful in 1m42s
Main Build Process / Build & Test (pull_request) Successful in 2m12s
1er essais
2024-08-30 16:08:51 +02:00

59 lines
2.0 KiB
C#

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