// Update is called once per frame
    void Update()
    {
        if (!isActive)
        {
            return;
        }

        // player has not released the thumbstick yet
        if (thumbstick.triggered)
        {
            return;
        }

        // no valid location
        if (!rayInteractor.TryGetCurrent3DRaycastHit(out RaycastHit hit))
        {
            Disable();
            return;
        }
        TeleportRequest request = new TeleportRequest()
        {
            destinationPosition = hit.point,
        };

        provider.QueueTeleportRequest(request);
        Disable();
    }
예제 #2
0
    private void Jump()
    {
        var teleportRequest = new TeleportRequest();

        teleportRequest.destinationPosition = theCube.position;
        teleportationProvider.QueueTeleportRequest(teleportRequest);
    }
예제 #3
0
        private void OnTeleportRequestExpired(object sender, EventArgs eventArgs)
        {
            TeleportRequest teleportRequest = ((TeleportRequest)sender);

            RemoveTeleportRequest(teleportRequest.TargetPlayer, teleportRequest,
                                  false);
        }
예제 #4
0
    // Update is called once per frame
    void Update()
    {
        if (!_isActive)
        {
            return;
        }

        if (_thumbstick.triggered)
        {
            return;
        }

        if (!rayInteractor.TryGetCurrent3DRaycastHit(out RaycastHit hit))
        {
            rayInteractor.enabled = false;
            reticle.SetActive(false);
            _isActive = false;
            return;
        }

        TeleportRequest request = new TeleportRequest()
        {
            destinationPosition = hit.point
                                  //destinationRotation = ?,
        };

        provider.QueueTeleportRequest(request);

        rayInteractor.enabled = false;
        reticle.SetActive(false);
        _isActive = false;
    }
예제 #5
0
        private void AddTeleportRequest(Player player, TeleportRequest teleportRequest)
        {
            lock (TpaRequestsLockObject) {
                List <TeleportRequest> teleportRequests = null;

                try {
                    teleportRequests = TpaRequests[player];
                } catch {
                    if (teleportRequests == null)
                    {
                        teleportRequests = new List <TeleportRequest>();
                    }
                }

                teleportRequests.Add(teleportRequest);

                teleportRequest.StartTimeout();

                teleportRequests.TrimExcess();

                if (!TpaRequests.ContainsKey(player))
                {
                    TpaRequests.Add(player, teleportRequests);
                }
            }
        }
예제 #6
0
    private void Jump()
    {
        var teleportRequest = new TeleportRequest();

        teleportRequest.destinationPosition = theCube.position;       //location to teleport
        _teleportationProvider.QueueTeleportRequest(teleportRequest); //request teleportation to teleportation provider. FIFO.
    }
    // Update is called once per frame
    void Update()
    {
        foreach (var item in m_ReticleCache)
        {
            XRController controller = item.Key.GetComponent <XRController>();

            if (controller.inputDevice.TryGetFeatureValue(new InputFeatureUsage <Vector2>("Primary2DAxis"), out Vector2 value))
            {
                if (value.magnitude > (controller as XRTeleportationController).TriggerTeleportThreshold)
                {
                    Vector3 camForward = Camera.main.transform.forward;
                    camForward.y = 0;
                    camForward   = Quaternion.LookRotation(new Vector3(value.x, 0, value.y)) * camForward;
                    item.Value.transform.GetChild(0).rotation = Quaternion.LookRotation(camForward);
                }
                else
                {
                    TeleportRequest tr = new TeleportRequest();
                    tr.matchOrientation = MatchOrientation.Camera;
                    tr.requestTime      = Time.time;
                    if (GenerateTeleportRequest(item.Key, new RaycastHit(), ref tr))
                    {
                        m_TeleportationProvider.QueueTeleportRequest(tr);
                    }

                    onSelectEnter.Invoke(item.Key);
                }
            }
        }
    }
예제 #8
0
 public void Teleport()
 {
     if (anchor && provider)
     {
         TeleportRequest request = CreateRequest();
         provider.QueueTeleportRequest(request);
     }
 }
예제 #9
0
        public void TpaCommandHandler(Player player, Command command)
        {
            string targetPlayerName = command.Next();

            if (String.IsNullOrEmpty(targetPlayerName))
            {
                command.Descriptor.PrintUsage(player);

                return;
            }

            Player targetPlayer = Server.FindPlayerOrPrintMatches(player,
                                                                  targetPlayerName,
                                                                  false,
                                                                  true);

            bool previousTeleportRequestExists = false;

            try {
                lock (TpaRequestsLockObject) {
                    previousTeleportRequestExists =
                        TpaRequests[targetPlayer].Exists(teleportRequestEnumerator =>
                                                         teleportRequestEnumerator.RequestingPlayer ==
                                                         player);
                }
            } catch {
            }

            if (targetPlayer == null)
            {
                return;
            }
            else if (player.Name == targetPlayer.Name)
            {
                player.TpaPluginMessage("Teleport requests cannot be sent to yourself.");

                return;
            }
            else if (previousTeleportRequestExists)
            {
                player.TpaPluginMessage("Another teleport request cannot be sent until the last one has expired after &A30 seconds " +
                                        "&Eor when either the sender or the receiver has left the server.");

                return;
            }

            TeleportRequest teleportRequest = new TeleportRequest(targetPlayer, player);

            AddTeleportRequest(targetPlayer, teleportRequest);

            player.TpaPluginMessage("Teleport request sent to " +
                                    targetPlayer.ClassyName.EscapeSymbols() + "!");
            targetPlayer.TpaPluginMessage("Teleport request received from " +
                                          player.ClassyName.EscapeSymbols() +
                                          ". To accept, type: /&A" + CommandNames[1] + ". " +
                                          "To reject, type: /&A" + CommandNames[2] + ". " +
                                          "This teleport request will timeout in &A30 seconds.");
        }
        /// <inheritdoc />
        public void FastForwardTeleport()
        {
            TeleportRequest teleportRequest = new TeleportRequest
            {
                requestTime         = Time.time,
                matchOrientation    = teleportationInteractable.matchOrientation,
                destinationPosition = teleportationInteractable.teleportAnchorTransform.position,
                destinationRotation = teleportationInteractable.teleportAnchorTransform.rotation
            };

            teleportationInteractable.teleportationProvider.QueueTeleportRequest(teleportRequest);
        }
예제 #11
0
    private TeleportRequest CreateRequest()
    {
        Transform anchorTransform = anchor.teleportAnchorTransform;

        TeleportRequest request = new TeleportRequest()
        {
            requestTime      = Time.time,
            matchOrientation = anchor.matchOrientation,

            destinationPosition = anchorTransform.position,
            destinationRotation = anchorTransform.rotation
        };

        return(request);
    }
예제 #12
0
        private void RemoveTeleportRequest(Player player, TeleportRequest teleportRequest,
                                           bool stopTimeout)
        {
            lock (TpaRequestsLockObject) {
                if (stopTimeout)
                {
                    teleportRequest.StopTimeout(false);
                }

                List <TeleportRequest> teleportRequests = TpaRequests[player];

                teleportRequests.Remove(teleportRequest);

                teleportRequests.TrimExcess();
            }
        }
        /// <inheritdoc />
        public void FastForwardTeleport()
        {
            TeleportRequest teleportRequest = new TeleportRequest
            {
                requestTime         = Time.time,
                matchOrientation    = teleportationInteractable.matchOrientation,
                destinationPosition = teleportationInteractable.teleportAnchorTransform.position,
                destinationRotation = teleportationInteractable.teleportAnchorTransform.rotation
            };

            if (teleportationInteractable.teleportationProvider != null)
            {
                teleportationInteractable.teleportationProvider.QueueTeleportRequest(teleportRequest);
            }
            else
            {
                Debug.LogError($"The 'TeleportationAnchor' from {name} is missing a reference to 'TeleportationProvider'.", gameObject);
            }
        }
예제 #14
0
    // Update is called once per frame
    private void Update()
    {
        SetDebug();
        SetRotationText();

        if (!_isTeleportActive)
        {
            return;
        }

        if (_thumbstick.triggered)
        {
            var thumbstickValue = _thumbstick.ReadValue <Vector2>();
            // if the thumbstick is pushed far enough in any direction we'll
            // save it off for use in the rotation angle calculation.
            if (thumbstickValue.sqrMagnitude >= 1)
            {
                _thumbstickDirection = thumbstickValue.normalized;
            }
            return;
        }

        if (!xrRayInteractor.TryGetCurrent3DRaycastHit(out var hit))
        {
            TurnOffTeleport();
            return;
        }

        var rotationAngle = CalculateTeleportRotationAngle();
        var request       = new TeleportRequest()
        {
            destinationPosition = hit.point,
            destinationRotation = Quaternion.Euler(0,
                                                   rotationAngle, 0),
            matchOrientation = MatchOrientation.TargetUpAndForward
        };

        _teleportationProvider.QueueTeleportRequest(request);
        TurnOffTeleport();
    }
예제 #15
0
        public void notifyTeleport(Unit u, float _x, float _y)
        {
            // Can't teleport to this point of the map
            if (!_game.Map.IsWalkable(_x, _y))
            {
                _x = MovementVector.targetXToNormalFormat(u.X);
                _y = MovementVector.targetYToNormalFormat(u.Y);
            }
            else
            {
                u.setPosition(_x, _y);

                //TeleportRequest first(u.NetId, u.teleportToX, u.teleportToY, true);
                //sendPacket(currentPeer, first, Channel.CHL_S2C);

                _x = MovementVector.targetXToNormalFormat(_x);
                _y = MovementVector.targetYToNormalFormat(_y);
            }

            var second = new TeleportRequest(u.NetId, _x, _y, false);

            _game.PacketHandlerManager.broadcastPacketVision(u, second, Channel.CHL_S2C);
        }
예제 #16
0
        private void Tpa(Player player, string targetPlayerName, bool okOrNo)
        {
            lock (TpaRequestsLockObject) {
                bool targetPlayerNameEmpty =
                    String.IsNullOrEmpty(targetPlayerName);

                List <TeleportRequest> teleportRequests = null;

                try {
                    teleportRequests = TpaRequests[player];
                } catch {
                }

                TeleportRequest teleportRequest = null;

                Player targetPlayer = null;

                if (targetPlayerNameEmpty)
                {
                    try {
                        teleportRequest =
                            teleportRequests[teleportRequests.Count - 1];

                        targetPlayer = teleportRequest.RequestingPlayer;
                    } catch {
                    }
                }
                else
                {
                    try {
                        targetPlayer =
                            Server.FindPlayerOrPrintMatches(player,
                                                            targetPlayerName,
                                                            false,
                                                            true);

                        if (targetPlayer == null)
                        {
                            return;
                        }

                        teleportRequest =
                            teleportRequests.Find(teleportRequestEnumerator =>
                                                  teleportRequestEnumerator.RequestingPlayer ==
                                                  targetPlayer);
                    } catch {
                    }
                }

                if (TpaRequests.ContainsKey(player))
                {
                    if (teleportRequests == null || teleportRequests.Count <= 0)
                    {
                        TpaRequests.Remove(player);

                        if (targetPlayerNameEmpty)
                        {
                            SendNoPendingTeleportRequestsMessage(player, null);
                        }
                        else
                        {
                            SendNoPendingTeleportRequestsMessage(player, targetPlayer);
                        }

                        return;
                    }

                    if (targetPlayerNameEmpty)
                    {
                        if (teleportRequest.IsExpired)
                        {
                            SendNoPendingTeleportRequestsMessage(player, null);

                            RemoveTeleportRequest(player, teleportRequest, false);

                            return;
                        }
                    }
                    else
                    {
                        if (teleportRequest != null && teleportRequest.IsExpired)
                        {
                            RemoveTeleportRequest(player, teleportRequest, false);

                            teleportRequest = null;
                        }

                        if (teleportRequest == null)
                        {
                            SendNoPendingTeleportRequestsMessage(player, targetPlayer);

                            return;
                        }
                    }

                    string targetPlayerEscapedClassyName = targetPlayer.ClassyName.EscapeSymbols();
                    string playerEscapedClassyName       = player.ClassyName.EscapeSymbols();

                    if (okOrNo)
                    {
                        player.TpaPluginMessage("Teleport request from " +
                                                targetPlayerEscapedClassyName +
                                                " accepted.");
                        targetPlayer.TpaPluginMessage("Teleport request to " +
                                                      playerEscapedClassyName +
                                                      " accepted.");
                        player.TpaPluginMessage("Teleporting " +
                                                targetPlayerEscapedClassyName +
                                                " to you. . .");
                        targetPlayer.TpaPluginMessage("Teleporting to " +
                                                      playerEscapedClassyName +
                                                      ". . .");

                        Tuple <bool, TeleportErrorReasonType> playerTeleportationResult =
                            TryPlayerTeleportation(targetPlayer, player);

                        string playersErrorReasonMessage = "Teleporting " +
                                                           targetPlayerEscapedClassyName +
                                                           " to you failed because ";
                        string targetPlayersErrorReasonMessage = "Teleporting to " +
                                                                 playerEscapedClassyName +
                                                                 " failed because ";
                        string errorReasonMessage = null;

                        if (!playerTeleportationResult.Item1)
                        {
                            string playerWorldClassyName =
                                player.World.ClassyName.EscapeSymbols();

                            switch (playerTeleportationResult.Item2)
                            {
                            case TeleportErrorReasonType.None:
                            case TeleportErrorReasonType.Unknown:
                                errorReasonMessage = "of an unknown error!";

                                playersErrorReasonMessage       += errorReasonMessage;
                                targetPlayersErrorReasonMessage += errorReasonMessage;

                                break;

                            case TeleportErrorReasonType.WorldFull:
                                errorReasonMessage = playerWorldClassyName + " is full!";

                                playersErrorReasonMessage       += errorReasonMessage;
                                targetPlayersErrorReasonMessage += errorReasonMessage;

                                break;

                            case TeleportErrorReasonType.Blacklisted:
                                errorReasonMessage = "blacklisted from " +
                                                     playerWorldClassyName + "!";

                                playersErrorReasonMessage += "they're " +
                                                             errorReasonMessage;
                                targetPlayersErrorReasonMessage += "you're " +
                                                                   errorReasonMessage;

                                break;

                            case TeleportErrorReasonType.RankTooLow:
                                errorReasonMessage = "rank is too low for " +
                                                     playerWorldClassyName + "!";

                                playersErrorReasonMessage += "their " +
                                                             errorReasonMessage;
                                targetPlayersErrorReasonMessage += "your " +
                                                                   errorReasonMessage;

                                break;

                            case TeleportErrorReasonType.RankTooHigh:
                                errorReasonMessage = "rank is too high for " +
                                                     playerWorldClassyName + "!";

                                playersErrorReasonMessage += "their " +
                                                             errorReasonMessage;
                                targetPlayersErrorReasonMessage += "your " +
                                                                   errorReasonMessage;

                                break;

                            default:
                                goto case TeleportErrorReasonType.Unknown;
                            }

                            player.TpaPluginMessage(playersErrorReasonMessage);
                            targetPlayer.TpaPluginMessage(targetPlayersErrorReasonMessage);

                            RemoveTeleportRequest(player, teleportRequest, true);

                            return;
                        }

                        player.TpaPluginMessage("Teleported " +
                                                targetPlayerEscapedClassyName +
                                                " to you!");
                        targetPlayer.TpaPluginMessage("Teleported to " +
                                                      playerEscapedClassyName +
                                                      "!");
                    }

                    RemoveTeleportRequest(player, teleportRequest, true);

                    if (!okOrNo)
                    {
                        player.TpaPluginMessage("Teleport request from " +
                                                targetPlayerEscapedClassyName +
                                                " rejected.");
                        targetPlayer.TpaPluginMessage("Teleport request to " +
                                                      playerEscapedClassyName +
                                                      " rejected.");
                    }
                }
                else
                {
                    if (targetPlayerNameEmpty)
                    {
                        SendNoPendingTeleportRequestsMessage(player, null);
                    }
                    else
                    {
                        SendNoPendingTeleportRequestsMessage(player, targetPlayer);
                    }
                }
            }
        }
예제 #17
0
 /// <inheritdoc />
 protected override bool GenerateTeleportRequest(XRBaseInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest)
 {
     teleportRequest.destinationPosition = raycastHit.point;
     teleportRequest.destinationRotation = transform.rotation;
     return(true);
 }
예제 #18
0
        public void NotifyTeleport(IAttackableUnit u, float x, float y)
        {
            var packet = new TeleportRequest(u.NetId, x, y, false);

            _packetHandlerManager.BroadcastPacketVision(u, packet, Channel.CHL_S2C);
        }
예제 #19
0
        public void NotifyTeleport(IAttackableUnit u, Vector2 pos)
        {
            var packet = new TeleportRequest(u.NetId, pos.X, pos.Y, false);

            _packetHandlerManager.BroadcastPacketVision(u, packet, Channel.CHL_S2C);
        }
    protected override bool GenerateTeleportRequest(XRBaseInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest)
    {
        Transform lookTrans = m_ReticleCache[interactor].transform.GetChild(0);

        teleportRequest.destinationPosition      = lookTrans.position;
        teleportRequest.destinationUpVector      = lookTrans.up; // use the area transform for data.
        teleportRequest.destinationForwardVector = lookTrans.forward;
        teleportRequest.destinationRotation      = lookTrans.rotation;

        return(true);
    }