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); }
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(); }