private void SetGrabReferences() { try { VRCPlayer player = VRCPlayer.field_Internal_Static_VRCPlayer_0; // is not null leftHandTether = GameObject.Find(player.gameObject.name + "/AnimationController/HeadAndHandIK/LeftEffector").gameObject; rightHandTether = GameObject.Find(player.gameObject.name + "/AnimationController/HeadAndHandIK/RightEffector").gameObject; leftHandGrasper = GetHandGrasper(leftHandTether); rightHandGrasper = GetHandGrasper(rightHandTether); } catch (Exception e) { MelonLogger.Error(e.ToString()); } finally { if (ValidateGrabReferences()) { LogDebugMsg("Found effectors: " + leftHandTether.name + "," + rightHandTether.name); } else { MelonLogger.Error("Error finding effectors!"); } } }
private bool GrasperIsGrabbing(VRCHandGrasper grasper) { if (grasper == null) { return(false); } return(grasper.field_Internal_VRC_Pickup_0 != null); }
private void ClearAllReferences() { LogDebugMsg("Clearing object references."); leftHandTether = null; rightHandTether = null; leftHandGrasper = null; rightHandGrasper = null; }
// Token: 0x060051E4 RID: 20964 RVA: 0x001C0ABC File Offset: 0x001BEEBC private static VRCHandGrasper[] GetGraspers(VRC_PlayerApi player) { VRCHandGrasper[] array = new VRCHandGrasper[2]; VRCHandGrasper[] componentsInChildren = player.GetComponentsInChildren <VRCHandGrasper>(); array = new VRCHandGrasper[2]; for (int i = 0; i < componentsInChildren.Length; i++) { if (componentsInChildren[i].RightHand) { array[1] = componentsInChildren[i]; } else { array[0] = componentsInChildren[i]; } } return(array); }
private bool SetGrasperReferences() { if (leftHandGrasper != null && rightHandGrasper != null) { return(true); } try { leftHandGrasper = GetHandGrasper(leftHandTether); rightHandGrasper = GetHandGrasper(rightHandTether); return(leftHandGrasper != null && rightHandGrasper != null); } catch (Exception e) { MelonLogger.Error(e.ToString()); return(false); } }
// Token: 0x0600554B RID: 21835 RVA: 0x001D6974 File Offset: 0x001D4D74 public void PickupSelected(VRC_Pickup pickup, bool leftHand) { if (pickup.currentlyHeldBy != null) { return; } if (VRCInputManager.IsUsingHandController()) { ControllerInputUI controllerPart = (VRCInputManager.LastInputMethod != VRCInputManager.InputMethod.Oculus) ? ControllerInputUI.Trigger : ControllerInputUI.Grip; this.ActivateControllerLabel((!leftHand) ? ControllerHand.Right : ControllerHand.Left, controllerPart, (!VRCHandGrasper.IsAutoEquipPickup(pickup)) ? "Hold to Grab" : "Equip", 0.1f, 0); } else if (!this.IsShowingOtherLabelOfType(TutorialLabelType.Pickup, pickup.transform)) { this.ActivateObjectLabel(pickup.transform, TutorialLabelType.Pickup, (!leftHand) ? ControllerHand.Right : ControllerHand.Left, (!VRCInputManager.IsUsingAutoEquipControllerType() || !VRCHandGrasper.IsAutoEquipPickup(pickup)) ? "Hold to Grab" : "Equip", ControllerActionUI.Use, 0.1f, 0, AttachMode.PositionOnly, false); } }
// Token: 0x060062A6 RID: 25254 RVA: 0x0022F9C8 File Offset: 0x0022DDC8 public void SetTargetInfo(VRCUiCursor.CursorRaycast target, bool useForUi) { if (this.inUse == null) { VRCUiCursor.CursorHandedness cursorHandedness = this.handedness; if (cursorHandedness != VRCUiCursor.CursorHandedness.Right) { if (cursorHandedness == VRCUiCursor.CursorHandedness.Left) { this.inUse = VRCInputManager.FindInput("UseLeft"); this.inDrop = VRCInputManager.FindInput("DropLeft"); } } else { this.inUse = VRCInputManager.FindInput("UseRight"); this.inDrop = VRCInputManager.FindInput("DropRight"); } if (this.inUse == null) { return; } } this.over = target.over; this.distance = target.hitInfo.distance; this.targetPosition = target.hitInfo.point; bool flag = false; if (useForUi) { if (target.over.Contains(VRCUiCursor.CursorOver.Ui)) { Vector2 screenPos = new Vector2(0f, 0f); UiShapeGenerator uiShapeGenerator = target.uiShape as UiShapeGenerator; if (uiShapeGenerator != null) { screenPos = uiShapeGenerator.GetPointerPosition(target.hitInfo.textureCoord); } else { screenPos = VRCVrCamera.GetInstance().screenCamera.WorldToScreenPoint(target.hitInfo.point); } this.uiInput.SetInputState(screenPos, target.hitInfo.point, this.inUse.down, this.inUse.up, this.inDrop.down, this.inDrop.up); if (this.uiInput.IsOverSelection()) { List <VRCUiCursor.CursorOver> list = new List <VRCUiCursor.CursorOver> { VRCUiCursor.CursorOver.UiSelectable }; list.AddRange(target.over); target.over = list.ToArray(); } flag = true; } if (target.over.Contains(VRCUiCursor.CursorOver.Player)) { if (this.inUse.click) { this.SelectHoveredPlayer(); } else { if (this.hoveredPlayer != null) { PlayerSelector playerSelector = this.hoveredPlayer.playerSelector; playerSelector.Hover(false); } this.hoveredPlayer = target.player; PlayerSelector playerSelector2 = this.hoveredPlayer.playerSelector; if (playerSelector2 != null) { playerSelector2.Hover(true); } } flag = true; } else if (this.hoveredPlayer != null) { PlayerSelector playerSelector3 = this.hoveredPlayer.playerSelector; if (playerSelector3 != null) { playerSelector3.Hover(false); } this.hoveredPlayer = null; } if (target.over.Contains(VRCUiCursor.CursorOver.Web)) { if (this.activeWebView != target.webPanel && this.activeWebView != null) { this.activeWebView.HandleFocusLoss(); } this.activeWebView = target.webPanel; if (this.activeWebView != null) { this.activeWebView.HandleRayHit(target.hitInfo); flag = true; } } else if (this.activeWebView != null) { this.activeWebView.HandleFocusLoss(); this.activeWebView = null; } if (target.over.Length == 0) { this.uiInput.SetInputState(Vector2.zero, target.hitInfo.point, false, true, false, true); } VRCUiCursor.CursorHandedness hand = this.handedness; if (!flag) { hand = VRCUiCursor.CursorHandedness.None; } VRCUiCursorManager.ForceCursorOn(hand); } VRC_Pickup selectedPickup = null; VRC_Interactable[] selectedInteractable = null; if (!VRCInputManager.legacyGrasp) { Component component; if (target.interactable == null) { component = null; } else { component = target.interactable.FirstOrDefault((VRC_Interactable i) => i.GetComponent <VRC_UseEvents>() != null || (i.GetComponent <VRC_Trigger>() != null && (i.GetComponent <VRC_Trigger>().HasInteractiveTriggers || i.GetComponent <VRC_Trigger>().HasPickupTriggers))); } Component component2 = component; this.outline.Clone(null); if (this.over.Contains(VRCUiCursor.CursorOver.Interactable) && component2 != null) { Transform trackedTransform = VRCTrackingManager.GetTrackedTransform((this.handedness != VRCUiCursor.CursorHandedness.Left) ? VRCTracking.ID.HandTracker_RightPalm : VRCTracking.ID.HandTracker_LeftPalm); bool flag2 = trackedTransform == null || VRCTrackingManager.IsPointWithinHMDView(trackedTransform.position); if (flag2) { this.outline.Clone(component2); if (TutorialManager.Instance != null) { TutorialManager.Instance.InteractableSelected(target.interactable, component2, this.handedness == VRCUiCursor.CursorHandedness.Left); } selectedInteractable = target.interactable; } } if (this.over.Contains(VRCUiCursor.CursorOver.Pickup) && target.pickup != null) { if (target.pickup.currentlyHeldBy == null) { this.outline.Clone(target.pickup); if (TutorialManager.Instance != null) { TutorialManager.Instance.PickupSelected(target.pickup, this.handedness == VRCUiCursor.CursorHandedness.Left); } selectedPickup = target.pickup; } else { this.outline.Clone(null); } } } else { this.outline.Clone(null); } VRCHandGrasper vrchandGrasper = null; if (VRCPlayer.Instance != null) { vrchandGrasper = VRCPlayer.Instance.GetHandGrasper((this.handedness != VRCUiCursor.CursorHandedness.Left) ? ControllerHand.Right : ControllerHand.Left); } if (vrchandGrasper != null) { vrchandGrasper.SetSelectedObject(selectedPickup, selectedInteractable); } }
// Token: 0x060062A4 RID: 25252 RVA: 0x0022F1A8 File Offset: 0x0022D5A8 protected VRCUiCursor.CursorOver[] CheckCursorTouch(VRCUiCursor.CursorRaycast target) { if (VRCPlayer.Instance == null) { return(new VRCUiCursor.CursorOver[0]); } VRCHandGrasper handGrasper = VRCPlayer.Instance.GetHandGrasper((this.handedness != VRCUiCursor.CursorHandedness.Left) ? ControllerHand.Right : ControllerHand.Left); if (handGrasper != null && handGrasper.IsHoldingObject()) { return(new VRCUiCursor.CursorOver[0]); } int num = -1; Vector3 point = Vector3.zero; Vector3 normal = Vector3.zero; float num2 = float.PositiveInfinity; VRC_Interactable[] array = null; VRC_Pickup vrc_Pickup = null; VRC_PlayerApi apiPlayer = VRCPlayer.Instance.apiPlayer; Collider[] array2 = Physics.OverlapSphere(target.touch.position, target.touch.radius, VRCUiCursorManager.GetCurrentInteractiveLayers()); for (int i = 0; i < array2.Length; i++) { bool flag = false; Vector3 vector = PhysicsUtil.ClosestPointOnCollider(array2[i], target.touch.position, ref flag); Vector3 vector2 = vector - target.touch.position; float dist = (!flag) ? vector2.magnitude : 0f; if (dist <= target.touch.radius) { VRC_Interactable[] array3 = (from inter in array2[i].GetComponents <VRC_Interactable>() where inter.IsInteractiveForPlayer(apiPlayer) select inter).ToArray <VRC_Interactable>(); VRC_Pickup vrc_Pickup2 = array2[i].GetComponent <VRC_Pickup>(); if (array3.Length != 0 || !(vrc_Pickup2 == null)) { if (array3 != null && (array3.Length == 0 || array3.All((VRC_Interactable x) => dist > x.proximity))) { array3 = null; } VRC_StationInternal component = array2[i].GetComponent <VRC_StationInternal>(); if (array3 != null && component != null && component.Occupant == VRCPlayer.Instance.gameObject) { array3 = null; } if (vrc_Pickup2 != null && (!vrc_Pickup2.pickupable || !VRCPlayer.Instance.canPickupObjects || (vrc_Pickup2.IsHeld && vrc_Pickup2.DisallowTheft && vrc_Pickup2.currentPlayer != apiPlayer))) { vrc_Pickup2 = null; } if (vrc_Pickup2 != null && vrc_Pickup2.currentlyHeldBy != null && dist > VRCHandGrasper.LerpToHandMinDistance) { vrc_Pickup2 = null; } if ((vrc_Pickup2 != null && vrc_Pickup == null) || dist <= num2) { if (!(vrc_Pickup2 == null) || (array3 != null && array3.Length != 0)) { num = i; num2 = dist; point = vector; normal = vector2.normalized; array = array3; vrc_Pickup = vrc_Pickup2; } } } } } if (num < 0) { return(new VRCUiCursor.CursorOver[0]); } target.hitInfo.distance = num2; target.hitInfo.normal = normal; target.hitInfo.point = point; target.pickup = vrc_Pickup; target.interactable = array; if (vrc_Pickup != null && array != null) { target.over = new VRCUiCursor.CursorOver[] { VRCUiCursor.CursorOver.Pickup, VRCUiCursor.CursorOver.Interactable }; } else if (array != null) { target.over = new VRCUiCursor.CursorOver[] { VRCUiCursor.CursorOver.Interactable }; } else if (vrc_Pickup != null) { target.over = new VRCUiCursor.CursorOver[] { VRCUiCursor.CursorOver.Pickup }; } else { target.over = new VRCUiCursor.CursorOver[0]; } return(target.over); }
// Token: 0x060062A5 RID: 25253 RVA: 0x0022F56C File Offset: 0x0022D96C protected VRCUiCursor.CursorOver[] CastCursorRay(VRCUiCursor.CursorRaycast target) { target.over = new VRCUiCursor.CursorOver[0]; List <VRCUiCursor.CursorOver> list = new List <VRCUiCursor.CursorOver>(); int layerMask = VRCUiCursorManager.GetCurrentInteractiveLayers(); Ray ray = target.ray; float num = 0f; float num2 = 100f; while (num2 > 0f && list.Count == 0) { ray.origin += ray.direction * num; num2 -= num; RaycastHit hitInfo; if (!Physics.Raycast(ray, out hitInfo, num2, layerMask)) { target.hitInfo.distance = 10f; target.hitInfo.point = target.ray.origin + target.ray.direction * 10f; break; } num = hitInfo.distance + 0.01f; GameObject gameObject = hitInfo.collider.gameObject; VRC_UiShape component = gameObject.GetComponent <VRC_UiShape>(); if (component != null) { target.hitInfo = hitInfo; target.uiShape = component; list.Add(VRCUiCursor.CursorOver.Ui); } else if (gameObject.GetComponentInParent <VRCPlayer>() != null) { if (this.uiMenuLayer < 0) { this.uiMenuLayer = LayerMask.NameToLayer("UiMenu"); } if (gameObject.layer == this.uiMenuLayer) { target.hitInfo = hitInfo; target.player = gameObject.GetComponentInParent <VRCPlayer>(); list.Add(VRCUiCursor.CursorOver.Player); } } if (VRCPlayer.Instance != null) { VRCHandGrasper handGrasper = VRCPlayer.Instance.GetHandGrasper((this.handedness != VRCUiCursor.CursorHandedness.Left) ? ControllerHand.Right : ControllerHand.Left); if (!(handGrasper != null) || !handGrasper.IsHoldingObject()) { float num3 = 0f; if (target.extraReach) { num3 = VRCTrackingManager.GetRayReach(target.ray); } VRC_PlayerApi apiPlayer = VRCPlayer.Instance.apiPlayer; float range = hitInfo.distance - num3; VRC_Interactable[] array = (from inter in gameObject.GetComponents <VRC_Interactable>() where range <= inter.proximity && inter.IsInteractiveForPlayer(apiPlayer) select inter).ToArray <VRC_Interactable>(); VRC_Pickup vrc_Pickup = gameObject.GetComponent <VRC_Pickup>(); if (array.Length == 0) { array = null; } VRC_StationInternal component2 = gameObject.GetComponent <VRC_StationInternal>(); if (array != null && component2 != null && component2.Occupant == VRCPlayer.Instance.gameObject) { array = null; } if (vrc_Pickup != null && (!vrc_Pickup.pickupable || !VRCPlayer.Instance.canPickupObjects || (vrc_Pickup.IsHeld && vrc_Pickup.DisallowTheft && vrc_Pickup.currentPlayer != apiPlayer))) { vrc_Pickup = null; } if (array != null && vrc_Pickup != null) { target.hitInfo = hitInfo; target.interactable = array; target.pickup = vrc_Pickup; list.Add(VRCUiCursor.CursorOver.Pickup); list.Add(VRCUiCursor.CursorOver.Interactable); } else if (array != null) { target.hitInfo = hitInfo; target.interactable = array; list.Add(VRCUiCursor.CursorOver.Interactable); VRC_WebPanel component3 = gameObject.GetComponent <VRC_WebPanel>(); if (component3 != null && component3.interactive) { target.hitInfo = hitInfo; target.webPanel = component3.GetComponent <WebPanelInternal>(); list.Add(VRCUiCursor.CursorOver.Web); } } else if (vrc_Pickup != null && range <= 0f) { target.hitInfo = hitInfo; target.pickup = vrc_Pickup; list.Add(VRCUiCursor.CursorOver.Pickup); } if (list.Count == 0) { if (Vector3.Dot(Vector3.up, hitInfo.normal) > 0.7f) { target.hitInfo = hitInfo; list.Add(VRCUiCursor.CursorOver.Floor); } else { target.hitInfo = hitInfo; list.Add(VRCUiCursor.CursorOver.Other); } } } } else { VRC_WebPanel component4 = gameObject.GetComponent <VRC_WebPanel>(); if (component4 != null && component4.interactive) { target.hitInfo = hitInfo; target.webPanel = component4.GetComponent <WebPanelInternal>(); list.Add(VRCUiCursor.CursorOver.Web); } } } target.over = list.ToArray(); return(target.over); }