示例#1
0
        private GameDataDto PrepareGameDataForPlayerDissemination(IPlayerInfo player)
        {
            // This data can be given to all players.
            var gd = new GameDataDto
            {
                GameGuid = GameData.GameGuid,
                EnactedFascistPolicyCount = GameData.EnactedFascistPolicyCount,
                EnactedLiberalPolicyCount = GameData.EnactedLiberalPolicyCount,
                ElectionTracker           = GameData.ElectionTracker
            };

            var canDiscloseFascists = player.Role == PlayerRole.Fascist ||
                                      (player.Role == PlayerRole.Hitler && GameData.Players.Count <= 6);
            var canDiscloseHitler = player.Role != PlayerRole.Liberal;

            var playersEnumerable = GameData.Players.Select(p =>
            {
                var rtn = new PlayerData()
                {
                    Identifier   = p.Identifier,
                    IsAlive      = p.IsAlive,
                    IsChancellor = p.IsChancellor,
                    IsPresident  = p.IsPresident,
                    Name         = p.Name
                };

                if (p.Role == PlayerRole.Hitler && canDiscloseHitler)
                {
                    rtn.Role = PlayerRole.Hitler;
                }
                else if (p.Role == PlayerRole.Fascist && canDiscloseFascists)
                {
                    rtn.Role = PlayerRole.Fascist;
                }
                else if (p.HasSameIdentifierAs(player))
                {
                    rtn.Role = PlayerRole.Liberal;
                }

                return(rtn);
            });

            foreach (var p in playersEnumerable)
            {
                gd.Players.Add(new PlayerDto
                {
                    Identifier   = p.Identifier,
                    IsAlive      = p.IsAlive,
                    IsChancellor = p.IsChancellor,
                    IsPresident  = p.IsPresident,
                    Name         = p.Name,
                    Role         = p.Role
                });
            }

            return(gd);
        }
示例#2
0
 public async Task UpdateGameData(Guid player, GameDataDto gameData)
 {
     _logger.LogDebug($"Transmit {nameof(IHubClient.UpdateGameData)} to player {player}");
     await GetUser(player).UpdateGameData(gameData);
 }
示例#3
0
 public Task UpdateGameData(GameDataDto gameData)
 {
     // Intentionally blank, but a good AI would do something with this information.
     return(Task.CompletedTask);
 }