public object ZoneSwitch(int selecteId, int zoneId, ZoneStatus status) { var result = _client.ConnectAndSend(_atMessages.GetInitMsg()); var parser = new MessageResponseParser(); var at = parser.Parse(result); var zone = at.GetSelectedAircon().GetZoneById(zoneId); if (zone != null && zone.Status != status) { result = _client.ConnectAndSend(_atMessages.ToggleZone(zoneId)); at = parser.Parse(result); } else { if (zone == null) { throw new Exception("Failed to find selected zone"); } } var response = System.Text.Json.JsonSerializer.Serialize <AirTouchSystem>(at, _serializeOptions); Log.ForContext <VzduchDotekController>().Verbose("{@AirTouchSystem}", at); return(Content(response, "application/json")); }
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 PrintZoneInfo(ZoneStatus zoneStatus, PlayerStatus status, ZoneTypers zoneTypers) { // Print zone info. var zone = Data.Data.GetZone(status.Zone.ZoneId); _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(zone.Name); _output.WriteLine(); PrintWrapped(zone.Description); _output.WriteLine($"{new string(' ', HalfWidth + SeparatorWidth)}{new string('-', HalfWidth)}"); var exits = zone.ZoneExits .Select(id => Data.Data.GetPassZone(id)) .Select(z => new { PassZoneId = z.PassZoneId, Name = z.ForwardPassage.Name, Description = z.ForwardPassage.Description, Distance = z.ForwardPassage.Distance }); var entrances = zone.ZoneEntrances .Select(id => Data.Data.GetPassZone(id)) .Select(z => new { PassZoneId = z.PassZoneId, Name = z.BackwardPassage.Name, Description = z.BackwardPassage.Description, Distance = z.BackwardPassage.Distance }); var ways = exits.Concat(entrances).OrderBy(z => z.Name); foreach (var way in ways) { var lines = WrapText(way.Description, HalfWidth); var isFirstLine = true; foreach (var line in lines) { if (isFirstLine) { _output.Write($"{line.PadRight(HalfWidth)}{new string(' ', SeparatorWidth)}{way.Name} "); _output.Write(zoneTypers.GetZoneTyper(way.PassZoneId)); _output.WriteLine(); } else { _output.WriteLine(line); } isFirstLine = false; } _output.WriteLine($"{new string(' ', HalfWidth + SeparatorWidth)}{new string('-', HalfWidth)}"); } _output.WriteLine(new string('-', HalfWidth)); _output.WriteLine(); foreach (var neighbor in zoneStatus.Neighbors) { var isInBattle = neighbor.IsInBattle ? "B " : string.Empty; var isDead = neighbor.IsDead ? "D " : string.Empty; _output.WriteLine($"{isDead}{isInBattle}{neighbor.Name}"); } _output.WriteLine(new string('_', Width)); _output.WriteLine(); _output.Write($"Attack "); _output.WriteLine(zoneTypers.AttackTyper); }