private void InternalExitStation(VRC.Player player) { if (this.Occupant == null || player == null || player != this._occupant) { return; } VRC_StationInternal.FlagDiscontinuity(player); StationUseExit component = base.GetComponent <StationUseExit>(); if (component != null) { UnityEngine.Object.Destroy(component); } this.Occupant = null; if (this.animatorController != null || this.isSeated) { this.DetachAnimatorControllerFrom(player); if (player.isLocal) { VRCTrackingManager.UseAvatarStationViewPoint(false); LocomotionInputController component2 = player.GetComponent <LocomotionInputController>(); if (component2 != null) { component2.immobilize = false; } VRCMotionState component3 = player.GetComponent <VRCMotionState>(); if (component3 != null) { component3.IsSeated = false; component3.InVehicle = false; } } } if (this.stationControls != null) { this.stationControls.controllingPlayer = null; } Collider component4 = player.GetComponent <Collider>(); if (component4 != null) { component4.enabled = true; } this.DetachInputControllerFrom(player.gameObject); this.ReleasePlayerTransform(player.gameObject); player.currentStation = null; if (TutorialManager.Instance != null && player.isLocal && this.isImmobilized) { TutorialManager.Instance.DeactivateObjectLabel(null); TutorialManager.Instance.DeactivateControllerLabel(ControllerHand.Left, ControllerInputUI.TrackpadTop); } if (player.isLocal) { VRCTrackingManager.RestoreLevel(); } VRC_StationInternal.RemoveActiveStation(this); base.SendMessage("OnStationExited", SendMessageOptions.DontRequireReceiver); }
private void InternalUseStation(VRC.Player player) { bool flag = false; if (player == null || (this.Occupant != null && this.Occupant != player) || player == this.Occupant) { return; } List <VRC_StationInternal> source = VRC_StationInternal.FindActiveStations(player); if (source.FirstOrDefault((VRC_StationInternal s) => s != this) != null) { if (!this.canUseStationFromStation) { return; } if (!VRC_StationInternal.ExitAllStations(player)) { return; } flag = true; } else { VRC_StationInternal.ExitAllStations(player); } if (this.Occupant != null) { return; } VRC_StationInternal.FlagDiscontinuity(player); this.Occupant = player; if (flag) { this._occupant = null; return; } if (VRC_EventHandler.HasEventTrigger(base.gameObject)) { this.AddUseExit(player); } if (this.stationControls != null) { this.stationControls.controllingPlayer = player.GetComponent <VRC_PlayerApi>(); } Vector3 position = Vector3.zero; Quaternion rhs = Quaternion.identity; if (player.isLocal) { VRCPlayer component = player.GetComponent <VRCPlayer>(); component.AlignTrackingToPlayer(); Transform trackingTransform = VRCTrackingManager.GetTrackingTransform(); Vector3 position2 = trackingTransform.position; Quaternion rotation = trackingTransform.rotation; position = player.transform.InverseTransformPoint(trackingTransform.position); rhs = Quaternion.Inverse(player.transform.rotation) * rotation; } if (this.isSeated) { this.ApplySeatedAnimation(player); } this.SetEnterPlayerTransform(player.gameObject); player.currentStation = this; if (player.isLocal) { VRCTrackingManager.SetTrackingWorldOrigin(player.transform.TransformPoint(position), player.transform.rotation * rhs); if (this.isSeated) { VRCTrackingManager.UseAvatarStationViewPoint(true); } if (this.stationEnterPlayerLocation != null) { this.stationEnterInitialRotation = this.stationEnterPlayerLocation.rotation; } else { this.stationEnterInitialRotation = base.transform.rotation; } this.trackingOriginDeltaPosition = VRCTrackingManager.GetTrackingWorldOrigin() - player.transform.position; this.trackingOriginDeltaRotation = Quaternion.FromToRotation(player.transform.TransformDirection(Vector3.forward), VRCTrackingManager.GetTrackingTransform().TransformDirection(Vector3.forward)); player.GetComponent <LocomotionInputController>().immobilize = this.isImmobilized; player.GetComponent <VRCMotionState>().IsSeated = this.isSeated; player.GetComponent <VRCMotionState>().InVehicle = this.inVehicle; } if (this.isImmobilized) { Collider component2 = player.GetComponent <Collider>(); if (component2 != null) { component2.enabled = false; } if (player.isLocal) { this.AttachInputControllerTo(player, "ImmobileInputController"); } } if (this.controlsObject != null) { VRC.Network.SetOwner(player, this.controlsObject.gameObject, VRC.Network.OwnershipModificationType.Request, false); } if (TutorialManager.Instance != null && player.isLocal && this.isImmobilized && !this.disableStationExit) { base.StartCoroutine(this.ShowGetUpInstructions()); } VRC_StationInternal.AddActiveStation(this); base.SendMessage("OnStationEntered", SendMessageOptions.DontRequireReceiver); }