// 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(); }
private void Jump() { var teleportRequest = new TeleportRequest(); teleportRequest.destinationPosition = theCube.position; teleportationProvider.QueueTeleportRequest(teleportRequest); }
private void OnTeleportRequestExpired(object sender, EventArgs eventArgs) { TeleportRequest teleportRequest = ((TeleportRequest)sender); RemoveTeleportRequest(teleportRequest.TargetPlayer, teleportRequest, false); }
// 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; }
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); } } }
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); } } } }
public void Teleport() { if (anchor && provider) { TeleportRequest request = CreateRequest(); provider.QueueTeleportRequest(request); } }
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); }
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); }
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); } }
// 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(); }
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); }
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); } } } }
/// <inheritdoc /> protected override bool GenerateTeleportRequest(XRBaseInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest) { teleportRequest.destinationPosition = raycastHit.point; teleportRequest.destinationRotation = transform.rotation; return(true); }
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); }
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); }