private static bool CanMove(VRTK_BodyPhysics givenBodyPhysics, Vector3 currentPosition, Vector3 proposedPosition) { if (givenBodyPhysics == null) { return(true); } var proposedDirection = (proposedPosition - currentPosition).normalized; var distance = Vector3.Distance(currentPosition, proposedPosition); return(!givenBodyPhysics.SweepCollision(currentPosition, proposedDirection, distance)); }
private void Enable() { trackedObjects.Clear(); movementList.Clear(); previousYPositions.Clear(); initialGaze = Vector3.zero; currentDirection = Vector3.zero; previousDirection = Vector3.zero; averagePeriod = 60; currentSpeed = 0f; movementEngaged = false; if (storyService.RootLayoutInstance.AllowsFreeCamera) { var collisionMesh = storyService.RootLayoutInstance.GetCollisionMesh(); bodyPhysics = new VRTK_BodyPhysics(collisionMesh, 0.5f); } else { bodyPhysics = null; } controllerLeftHand = globalObjectService.VrLeftHand; controllerRightHand = globalObjectService.VrRightHand; SetControllerListeners(controllerLeftHand, leftController, ref leftSubscribed); SetControllerListeners(controllerRightHand, rightController, ref rightSubscribed); headset = globalObjectService.MainCamera.transform;; SetControlOptions(controlOptions); playArea = globalObjectService.VrPlayerCarrier.transform; // Initialize the lists. foreach (var trackedObj in trackedObjects) { VRTK_SharedMethods.AddDictionaryValue(movementList, trackedObj, new List <float>(), true); VRTK_SharedMethods.AddDictionaryValue(previousYPositions, trackedObj, trackedObj.transform.localPosition.y, true); } IsEnabled = true; }