Esempio n. 1
0
        private void ProcessMovementRequest(Message message)
        {
            var moveMessage = GetData <MoveRequest>(message);
            var player      = message.Player;

            if (moveMessage == null)
            {
                return;
            }

            var nodes = moveMessage.Nodes;

            if (nodes.Count < 2 || nodes.Count > 50)
            {
                return;
            }

            var playerNode = message.Player.Node;

            if (playerNode != nodes.First())
            {
                return;
            }

            var totalCost = 0.0f;

            for (var i = 1; i < nodes.Count; i++)
            {
                var previousNode = _mapService.GetNode(nodes[i - 1]);
                var currentNode  = _mapService.GetNode(nodes[i]);

                if (previousNode == null || currentNode == null)
                {
                    return;
                }

                var connection = previousNode.Connections.FirstOrDefault(x => x.Id == currentNode.Id);
                if (connection == null)
                {
                    return;
                }

                totalCost += connection.Cost;
            }

            var travelTimeInMs = (long)totalCost * 1000;

            var movement = new MovementDestination()
            {
                Nodes      = nodes,
                StartTime  = DateTimeOffset.Now.ToUnixTimeMilliseconds(),
                TravelTime = travelTimeInMs,
                Player     = player
            };

            _movementRepository.Add(player.Id, movement);

            _movementSender.StartMove(player);
        }
Esempio n. 2
0
        public void Execute()
        {
            foreach (var player in _playersToUpdate)
            {
                var joinMessage = new JoinResponse
                {
                    Id      = player.Id,
                    Name    = player.Name,
                    Node    = player.Node,
                    Credits = 0
                };

                _messageService.Send(player, SystemTypes.Join, SystemTypes.JoinTypes.Join, joinMessage);

                _movementSender.StartMove(player);
            }

            _playersToUpdate.Clear();
        }