예제 #1
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
            });
        }
예제 #2
0
        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));
        }