All checks were successful
check main state / build (9.0.x) (push) Successful in 1m23s
69 lines
2.8 KiB
C#
69 lines
2.8 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);
|
|
}
|
|
#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();
|
|
#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);
|
|
|
|
#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
|
|
} |