private Status GetStatus(string playerId) { var player = _playerRepository.Find(playerId); var neighbors = _playerRepository.FindNeighborsOf(player); var onlineNeighbors = neighbors.Where(n => _connectedClients.Any(c => c.PlayerId == n.PlayerId)); var playerStatus = player.GetPlayerStatus(); var zoneStatus = new ZoneStatus { Neighbors = onlineNeighbors .Select(n => new PlayerMessage { PlayerId = n.PlayerId, Name = n.Name, IsInBattle = _battleRepository.FindActiveFor(n.PlayerId) != null, IsDead = n.IsDead() }).ToList() }; PassZoneStatus passZoneStatus = null; if (player.IsMoving()) { passZoneStatus = new PassZoneStatus { Me = new PassPlayerMessage { PlayerId = player.PlayerId, Name = player.Name, Direction = player.MovingInformation.Direction, ProgressPercentage = player.MovingInformation.CalculateProgressPercentage() }, Neighbors = onlineNeighbors.Select(n => new PassPlayerMessage { PlayerId = n.PlayerId, Name = n.Name, Direction = n.MovingInformation.Direction, ProgressPercentage = n.MovingInformation.CalculateProgressPercentage() }).ToList() }; } var battle = _battleRepository.FindActiveFor(playerId); var battleStatus = battle?.GetBattleStatus(playerId); return(new Status { PlayerStatus = playerStatus, ZoneStatus = zoneStatus, PassZoneStatus = passZoneStatus, BattleStatus = battleStatus }); }
public void PrintPassingStatus(PassZoneStatus status, PassZoneMessage passZone, PassZoneTypers passZoneTypers) { var info = Data.Data.GetPassZone(passZone.PassZoneId); var name = info.GetName(passZone.Direction); var description = info.GetDescription(passZone.Direction); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(); _output.WriteLine(name); _output.WriteLine(); PrintWrapped(description); _output.WriteLine(); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(); _output.Write(passZoneTypers.Typer); _output.WriteLine(); var index = 1; foreach (var wanderer in status.Neighbors) { _output.WriteLine($"{index} - {wanderer.Name}"); index++; } _output.WriteLine(); PrintPassingPosition(status.Me, "M"); index = 1; foreach (var wanderer in status.Neighbors) { PrintPassingPosition(wanderer, index.ToString()); index++; } _output.WriteLine(); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(); _output.WriteLine(); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(new string('_', Width)); }