using DominionBase.Enums; using System; using System.Linq; namespace DominionBase.Visual { public class VisualPlayer { public string Name { get; } = string.Empty; public Guid PlayerUniqueId { get; } public Players.PhaseEnum Phase { get; } = Players.PhaseEnum.Action; public Players.PlayerMode PlayerMode { get; } = Players.PlayerMode.Waiting; public int VictoryPoints { get; } public Piles.Deck Revealed { get; } = new Piles.Deck(Players.DeckLocation.Revealed, Piles.Visibility.All, Piles.VisibilityTo.All); public Piles.Deck DiscardPile { get; } = new Piles.Deck(Players.DeckLocation.Discard, Piles.Visibility.Top, Piles.VisibilityTo.All); public Piles.Deck Private { get; } = new Piles.Deck(Players.DeckLocation.Private, Piles.Visibility.All, Piles.VisibilityTo.Owner); public VisualPlayer(IPlayer player) { if (player == null) return; Name = player.Name; PlayerUniqueId = player.UniqueId; Phase = player.Phase; PlayerMode = player.PlayerMode; // This sometimes has an Enumeration exception -- can't figure out how to Lock it properly try { VictoryPoints = player.VictoryPoints; } catch { VictoryPoints = 0; } Revealed = player.Revealed; var discardCards = new Cards.CardCollection(); var discardPileCount = player.DiscardPile.Count; for (var i = 0; i < discardPileCount - 1; i++) discardCards.Add(Cards.Universal.Utility.GenerateCardBack(CardBack.Standard)); var topCard = player.DiscardPile.FirstOrDefault(); if (topCard != null) discardCards.Add(topCard); DiscardPile.AddRange(player, discardCards); var privateCards = new Cards.CardCollection(); privateCards.AddRange(player.Private.Select(card => Cards.Universal.Utility.GenerateCardBack(card.CardBack))); Private.AddRange(player, privateCards); } } }