示例#1
0
        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"));
        }
示例#2
0
        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
            });
        }
示例#3
0
        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);
        }