Files
Giants/Src/Giants.Core/Src/Entities/Player.cs
mcmuzzle 3dba66344d
All checks were successful
check main state / build (9.0.x) (push) Successful in 2m46s
fin de l'initialisation d'un match et ajout du random aux commandes
2025-04-24 22:31:19 +02:00

74 lines
3.1 KiB
C#

using System.Collections.ObjectModel;
using System.Reflection.Metadata.Ecma335;
using Giants.Core.Enums;
namespace Giants.Core;
/// <summary>
/// Structure pour agréger les getters liés aux informations d'un joueur
/// </summary>
public class Player
{
private Match _match;
public required int Index { get; init; }
static Player()
{
// preparation des données statiques
return;
}
public Player(Match match)
{
_match = match;
}
#region Collections
public static readonly ICollection<PieceIndex>[] PlayerPieces ={
[.. Enum.GetValues<PieceIndex>().Where(p => p.ToString().Contains("player1"))],
[.. Enum.GetValues<PieceIndex>().Where(p => p.ToString().Contains("player2"))],
[.. Enum.GetValues<PieceIndex>().Where(p => p.ToString().Contains("player3"))],
[.. Enum.GetValues<PieceIndex>().Where(p => p.ToString().Contains("player4"))],
[.. Enum.GetValues<PieceIndex>().Where(p => p.ToString().Contains("player5"))]
};
public static readonly PiecePosition[] PlayerVisibileAreas = { PiecePosition.player1Visible, PiecePosition.player2Visible, PiecePosition.player3Visible, PiecePosition.player4Visible, PiecePosition.player5Visible };
public static readonly PiecePosition[] PlayerHiddenAreas = { PiecePosition.player1Hidden, PiecePosition.player2Hidden, PiecePosition.player3Hidden, PiecePosition.player4Hidden, PiecePosition.player5Hidden };
#endregion Collections
#region Generics
public PiecePosition HiddenPosition => PlayerHiddenAreas[Index];
public PiecePosition VisiblePosition => PlayerVisibileAreas[Index];
public void PutPieceInVisibleArea(PieceIndex piece)
{
_match.AssignPiece(piece, VisiblePosition);
}
public void PutPieceInHiddenArea(PieceIndex piece)
{
_match.AssignPiece(piece, HiddenPosition);
}
public int Score => _match.GetScore(Index);
#endregion
#region workers
public PieceIndex Chef => PlayerPieces[Index].Where(p => p.ToString().Contains("Chief")).FirstOrDefault();
public PieceIndex Shaman => PlayerPieces[Index].Where(p => p.ToString().Contains("Shaman")).FirstOrDefault();
public ICollection<PieceIndex> Workers => [.. PlayerPieces[Index].Where(p => p.ToString().Contains("Worker"))];
#endregion
#region socles
public ICollection<PieceIndex> Bases => PlayerPieces[Index]?.Where(p => p.ToString().Contains("Base")).ToList() ?? [];
public int NbVisibleBase => Bases.Count(p => _match.GetPiece(p) == VisiblePosition);
public int NbHiddenBase => Bases.Count(p => _match.GetPiece(p) == HiddenPosition);
#endregion
#region Tribal markers
public ICollection<PieceIndex> Markers => PlayerPieces[Index]?.Where(p => p.ToString().Contains("TribalMarker")).ToList() ?? [];
public int NbVisibleTribalTokenCount => Markers.Count(p => _match.GetPiece(p) == VisiblePosition);
public int NbHiddenTribalTokenCount => Markers.Count(p => _match.GetPiece(p) == HiddenPosition);
public int NbUrnTribalTokenCount => Markers.Count(p => _match.GetPiece(p) == PiecePosition.Urne);
#endregion
}