public static GameObject GetDefaultDeviceModelPrefab(VRModuleDeviceModel modelNum) { if (modelNum < s_defaultModels.Min || modelNum > s_defaultModels.Max) { return(null); } var modelData = s_defaultModels[modelNum]; if (!modelData.isLoaded) { GameObject modelPrefab = null; int modelNameIndex; var info = EnumUtils.GetDisplayInfo(typeof(VRModuleDeviceModel)); if (info.value2displayedIndex.TryGetValue((int)modelNum, out modelNameIndex)) { modelPrefab = Resources.Load <GameObject>("Models/VIUModel" + info.displayedNames[modelNameIndex]); } s_defaultModels[modelNum] = modelData = new DefaultModelData() { isLoaded = true, model = modelPrefab, }; } return(modelData.model); }
public static void SetupDeviceIcon(Image image, VRModuleDeviceModel deviceModel, bool connected) { string spriteName; switch (deviceModel) { case VRModuleDeviceModel.KnucklesLeft: spriteName = MODEL_ICON_SPRITE_PREFIX + VRModuleDeviceModel.KnucklesRight; image.transform.localScale = new Vector3(-1f, 1f, 1f); break; case VRModuleDeviceModel.OculusTouchLeft: spriteName = MODEL_ICON_SPRITE_PREFIX + VRModuleDeviceModel.OculusTouchRight; image.transform.localScale = new Vector3(-1f, 1f, 1f); break; default: spriteName = MODEL_ICON_SPRITE_PREFIX + deviceModel.ToString(); image.transform.localScale = new Vector3(1f, 1f, 1f); break; } image.sprite = GetSprite(spriteName); if (connected) { image.color = new Color32(0x53, 0xBB, 0x00, 0xFF); } else { image.color = new Color32(0x56, 0x56, 0x56, 0xFF); } }
public static void SetupTrackingDeviceIcon(Image image, VRModuleDeviceModel deviceModel, bool bound) { string spriteName; var scale = Vector3.one; switch (deviceModel) { case VRModuleDeviceModel.ViveHMD: case VRModuleDeviceModel.OculusHMD: spriteName = "binding_ui_project_HMD"; break; case VRModuleDeviceModel.KnucklesLeft: spriteName = MODEL_PROJECT_SPRITE_PREFIX + VRModuleDeviceModel.KnucklesRight; scale.x = -1f; break; case VRModuleDeviceModel.OculusTouchLeft: spriteName = MODEL_PROJECT_SPRITE_PREFIX + VRModuleDeviceModel.OculusTouchRight; scale.x = -1f; break; default: spriteName = MODEL_PROJECT_SPRITE_PREFIX + deviceModel.ToString(); break; } var sprite = GetSprite(spriteName); //Debug.Log("SetupTrackingDeviceIcon " + deviceModel + " " + bound + " " + spriteName + " null?" + (sprite == null)); if (sprite == null) { image.enabled = false; } else { image.enabled = true; image.sprite = sprite; var spriteRect = sprite.rect; var spritePivot = sprite.pivot; image.SetNativeSize(); image.rectTransform.sizeDelta *= 0.2326f; image.rectTransform.pivot = new Vector2(spritePivot.x / spriteRect.width, spritePivot.y / spriteRect.height); image.transform.localScale = scale; if (bound) { image.color = new Color32(0x21, 0xE3, 0xD8, 0xFF); } else { image.color = new Color32(0x9F, 0xEC, 0x28, 0xFF); } } }
public static void SetOverrideDeviceModel(VRModuleDeviceModel model, GameObject obj) { if (Instance == null) { return; } if (s_instance.m_overrideDeviceModel == null) { return; } s_instance.m_overrideDeviceModel[model] = obj; }
protected void UpdateDefaultRenderModel(bool shouldActive) { var deviceState = VRModule.GetDeviceState(hook.GetModelDeviceIndex()); var lastModelActivated = m_isModelActivated; var lastActivatedModel = m_activeModel; var shouldActiveModelNum = deviceState.deviceModel; var shouldActiveModelPrefab = shouldActive ? GetDefaultDeviceModelPrefab(shouldActiveModelNum) : null; var shouldActiveModel = shouldActive && deviceState.isConnected && shouldActiveModelPrefab != null; if (lastModelActivated) { if (!shouldActiveModel || lastActivatedModel != shouldActiveModelNum) { // deactivate custom override model var lastActiveModelObj = m_modelObjs[m_activeModel]; if (lastActiveModelObj != null && SendBeforeModelDeactivatedMessage(lastActiveModelObj, hook)) { lastActiveModelObj.gameObject.SetActive(false); } m_isModelActivated = false; } } if (shouldActiveModel) { var shouldActiveModelObj = m_modelObjs[shouldActiveModelNum]; if (shouldActiveModelObj == null) { // instantiate custom override model shouldActiveModelObj = Instantiate(shouldActiveModelPrefab); shouldActiveModelObj.transform.position = Vector3.zero; shouldActiveModelObj.transform.rotation = Quaternion.identity; shouldActiveModelObj.transform.SetParent(hook.transform, false); m_modelObjs[shouldActiveModelNum] = shouldActiveModelObj; m_activeModel = shouldActiveModelNum; m_isModelActivated = false; SendAfterModelCreatedMessage(shouldActiveModelObj, hook); } if (!m_isModelActivated) { // active custom override model if (SendBeforeModelActivatedMessage(shouldActiveModelObj, hook)) { shouldActiveModelObj.gameObject.SetActive(true); } m_isModelActivated = true; } } }
public void Update(uint index) { var deviceState = VRModule.GetDeviceState(index); deviceIndex = index; serialNumber = deviceState.serialNumber; modelNumber = deviceState.modelNumber; renderModelName = deviceState.renderModelName; deviceClass = deviceState.deviceClass; deviceModel = deviceState.deviceModel; input2DType = deviceState.input2DType; isConnected = deviceState.isConnected; isPoseValid = deviceState.isPoseValid; isOutOfRange = deviceState.isOutOfRange; isCalibrating = deviceState.isCalibrating; isUninitialized = deviceState.isUninitialized; velocity = deviceState.velocity; angularVelocity = deviceState.angularVelocity; pose = deviceState.pose; UpdateFieldString <VRModuleRawButton>(ref pressedFields, deviceState.buttonPressed, pressed); UpdateFieldString <VRModuleRawButton>(ref touchedFields, deviceState.buttonTouched, touched); foreach (VRModuleRawAxis i in axisValue.Enums) { axisValue[i] = deviceState.GetAxisValue(i); } jointCount = 0; if (deviceState.readOnlyHandJoints != null) { foreach (var p in deviceState.readOnlyHandJoints.EnumValues) { handJoints[p.Key] = p.Value; if (p.Value.isValid) { jointCount++; } } } }
public static bool IsLeft(this VRModuleDeviceModel deviceModel) { switch (deviceModel) { case VRModuleDeviceModel.OculusTouchLeft: case VRModuleDeviceModel.KnucklesLeft: case VRModuleDeviceModel.WMRControllerLeft: case VRModuleDeviceModel.ViveCosmosControllerLeft: case VRModuleDeviceModel.OculusQuestControllerLeft: case VRModuleDeviceModel.IndexControllerLeft: case VRModuleDeviceModel.ViveHandTrackingTrackedHandLeft: case VRModuleDeviceModel.WaveLegacyTrackedHandLeft: case VRModuleDeviceModel.WaveTrackedHandLeft: case VRModuleDeviceModel.OculusTrackedHandLeft: return(true); default: return(false); } }
private void ReloadedStaticModel(VRModuleDeviceModel model) { CleanUpModelObj(); var prefab = Resources.Load <GameObject>("Models/VIUModel" + model.ToString()); if (prefab != null) { m_modelObj = Instantiate(prefab); m_modelObj.transform.SetParent(transform, false); m_modelObj.gameObject.name = "VIUModel" + model.ToString(); if (m_overrideShader != null) { var renderer = m_modelObj.GetComponentInChildren <Renderer>(); if (renderer != null) { renderer.material.shader = m_overrideShader; } } } }
public void CopyFrom(DeviceState state) { m_serialNumber = state.m_serialNumber; m_modelNumber = state.m_modelNumber; m_renderModelName = state.m_renderModelName; m_deviceClass = state.m_deviceClass; m_deviceModel = state.m_deviceModel; m_isPoseValid = state.m_isPoseValid; m_isConnected = state.m_isConnected; m_isOutOfRange = state.m_isOutOfRange; m_isCalibrating = state.m_isCalibrating; m_isUninitialized = state.m_isUninitialized; m_velocity = state.m_velocity; m_angularVelocity = state.m_angularVelocity; m_position = state.m_position; m_rotation = state.m_rotation; m_buttonPressed = state.m_buttonPressed; m_buttonTouched = state.m_buttonTouched; Array.Copy(state.m_axisValue, m_axisValue, m_axisValue.Length); }
public static bool TryGetDefaultAsset(VRModuleDeviceModel model, out TooltipRigAsset rigAsset) { if (!EnumArrayBase <VRModuleDeviceModel> .StaticIsValidIndex((int)model)) { rigAsset = null; return(false); } if (s_defaultTooltipRigSets == null) { s_defaultTooltipRigSets = new EnumArray <VRModuleDeviceModel, LoadedRigSet>(); } var loadedRigSet = s_defaultTooltipRigSets[(int)model]; if (!loadedRigSet.haveLoaded) { TooltipRigAsset asset = null; int modelNameIndex; var info = EnumUtils.GetDisplayInfo(typeof(VRModuleDeviceModel)); if (info.value2displayedIndex.TryGetValue((int)model, out modelNameIndex)) { asset = Resources.Load <TooltipRigAsset>("TooltipRig/VIUTooltipRig" + info.displayedNames[modelNameIndex]); } s_defaultTooltipRigSets[(int)model] = loadedRigSet = new LoadedRigSet() { haveLoaded = true, asset = asset, }; } if (loadedRigSet.asset == null) { rigAsset = null; return(false); } rigAsset = loadedRigSet.asset; return(rigAsset != null); }
public void CopyFrom(DeviceState state) { m_serialNumber = state.m_serialNumber; m_modelNumber = state.m_modelNumber; m_renderModelName = state.m_renderModelName; m_deviceClass = state.m_deviceClass; m_deviceModel = state.m_deviceModel; m_input2DType = state.m_input2DType; m_isPoseValid = state.m_isPoseValid; m_isConnected = state.m_isConnected; m_isOutOfRange = state.m_isOutOfRange; m_isCalibrating = state.m_isCalibrating; m_isUninitialized = state.m_isUninitialized; m_velocity = state.m_velocity; m_angularVelocity = state.m_angularVelocity; m_position = state.m_position; m_rotation = state.m_rotation; m_buttonPressed = state.m_buttonPressed; m_buttonTouched = state.m_buttonTouched; Array.Copy(state.m_axisValue, m_axisValue, m_axisValue.Length); if (state.m_handJoints == null) { m_handJoints = null; } else { if (m_handJoints == null) { m_handJoints = new JointEnumArray(); } m_handJoints.CopyFrom(state.m_handJoints); } }
// return true if frame skipped public override bool Update() { if (!ChangeProp.Set(ref updatedFrameCount, Time.frameCount)) { return(true); } var deviceIndex = m_map.GetMappedDeviceByRoleValue(m_roleValue); // treat this frame as updated if both prevDeviceIndex and currentDeviceIndex are invalid if (!VRModule.IsValidDeviceIndex(prevDeviceIndex) && !VRModule.IsValidDeviceIndex(deviceIndex)) { return(false); } // get device state var currState = VRModule.GetCurrentDeviceState(deviceIndex); // copy to previous states prevDeviceIndex = deviceIndex; prevButtonPressed = currButtonPressed; for (int i = CONTROLLER_AXIS_COUNT - 1; i >= 0; --i) { prevAxisValue[i] = currAxisValue[i]; } trackedDeviceModel = currState.deviceModel; // update button states EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.System, currState.GetButtonPress(VRModuleRawButton.System)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Menu, currState.GetButtonPress(VRModuleRawButton.ApplicationMenu)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.MenuTouch, currState.GetButtonTouch(VRModuleRawButton.ApplicationMenu)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Trigger, currState.GetButtonPress(VRModuleRawButton.Trigger)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.TriggerTouch, currState.GetButtonTouch(VRModuleRawButton.Trigger)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Pad, currState.GetButtonPress(VRModuleRawButton.Touchpad)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.PadTouch, currState.GetButtonTouch(VRModuleRawButton.Touchpad)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Grip, currState.GetButtonPress(VRModuleRawButton.Grip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.GripTouch, currState.GetButtonTouch(VRModuleRawButton.Grip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.CapSenseGrip, currState.GetButtonPress(VRModuleRawButton.CapSenseGrip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.CapSenseGripTouch, currState.GetButtonTouch(VRModuleRawButton.CapSenseGrip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.AKey, currState.GetButtonPress(VRModuleRawButton.A)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.AKeyTouch, currState.GetButtonTouch(VRModuleRawButton.A)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis3, currState.GetButtonPress(VRModuleRawButton.Axis3)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis3Touch, currState.GetButtonTouch(VRModuleRawButton.Axis3)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis4, currState.GetButtonPress(VRModuleRawButton.Axis4)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis4Touch, currState.GetButtonTouch(VRModuleRawButton.Axis4)); // update axis values currAxisValue[(int)ControllerAxis.PadX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.PadY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); currAxisValue[(int)ControllerAxis.Trigger] = currState.GetAxisValue(VRModuleRawAxis.Trigger); currAxisValue[(int)ControllerAxis.CapSenseGrip] = currState.GetAxisValue(VRModuleRawAxis.CapSenseGrip); currAxisValue[(int)ControllerAxis.IndexCurl] = currState.GetAxisValue(VRModuleRawAxis.IndexCurl); currAxisValue[(int)ControllerAxis.MiddleCurl] = currState.GetAxisValue(VRModuleRawAxis.MiddleCurl); currAxisValue[(int)ControllerAxis.RingCurl] = currState.GetAxisValue(VRModuleRawAxis.RingCurl); currAxisValue[(int)ControllerAxis.PinkyCurl] = currState.GetAxisValue(VRModuleRawAxis.PinkyCurl); // update hair trigger var currTriggerValue = currAxisValue[(int)ControllerAxis.Trigger]; EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.FullTrigger, currTriggerValue == 1f); if (EnumUtils.GetFlag(prevButtonPressed, (int)ControllerButton.HairTrigger)) { EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.HairTrigger, currTriggerValue >= (hairTriggerLimit - hairDelta) && currTriggerValue > 0.0f); } else { EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.HairTrigger, currTriggerValue > (hairTriggerLimit + hairDelta) || currTriggerValue >= 1.0f); } if (EnumUtils.GetFlag(currButtonPressed, (int)ControllerButton.HairTrigger)) { hairTriggerLimit = Mathf.Max(hairTriggerLimit, currTriggerValue); } else { hairTriggerLimit = Mathf.Min(hairTriggerLimit, currTriggerValue); } // record pad down axis values if (GetPressDown(ControllerButton.Pad)) { padDownAxis = new Vector2(currAxisValue[(int)ControllerAxis.PadX], currAxisValue[(int)ControllerAxis.PadY]); } if (GetPressDown(ControllerButton.PadTouch)) { padTouchDownAxis = new Vector2(currAxisValue[(int)ControllerAxis.PadX], currAxisValue[(int)ControllerAxis.PadY]); } // record press down time and click count var timeNow = Time.unscaledTime; for (int button = 0; button < CONTROLLER_BUTTON_COUNT; ++button) { if (GetPressDown((ControllerButton)button)) { if (timeNow - lastPressDownTime[button] < clickInterval) { ++clickCount[button]; } else { clickCount[button] = 1; } lastPressDownTime[button] = timeNow; } } // invoke event listeners for (ControllerButton button = 0; button < (ControllerButton)CONTROLLER_BUTTON_COUNT; ++button) { if (GetPress(button)) { if (GetPressDown(button)) { // PressDown event TryInvokeListener(button, ButtonEventType.Down); TryInvokeTypeListener(button, ButtonEventType.Down); } // Press event TryInvokeListener(button, ButtonEventType.Press); TryInvokeTypeListener(button, ButtonEventType.Press); } else if (GetPressUp(button)) { // PressUp event TryInvokeListener(button, ButtonEventType.Up); TryInvokeTypeListener(button, ButtonEventType.Up); if (timeNow - lastPressDownTime[(int)button] < clickInterval) { // Click event TryInvokeListener(button, ButtonEventType.Click); TryInvokeTypeListener(button, ButtonEventType.Click); } } } return(false); }
// return true if frame skipped public override bool Update() { if (!ChangeProp.Set(ref updatedFrameCount, Time.frameCount)) { return(true); } var deviceIndex = m_map.GetMappedDeviceByRoleValue(m_roleValue); // treat this frame as updated if both prevDeviceIndex and currentDeviceIndex are invalid if (!VRModule.IsValidDeviceIndex(prevDeviceIndex) && !VRModule.IsValidDeviceIndex(deviceIndex)) { return(false); } // get device state var currState = VRModule.GetCurrentDeviceState(deviceIndex); // copy to previous states and reset current state prevDeviceIndex = deviceIndex; prevButtonPressed = currButtonPressed; currButtonPressed = 0; for (int i = CONTROLLER_AXIS_COUNT - 1; i >= 0; --i) { prevAxisValue[i] = currAxisValue[i]; currAxisValue[i] = 0f; } trackedDeviceModel = currState.deviceModel; // update button states EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.System, currState.GetButtonPress(VRModuleRawButton.System)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Menu, currState.GetButtonPress(VRModuleRawButton.ApplicationMenu)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.MenuTouch, currState.GetButtonTouch(VRModuleRawButton.ApplicationMenu)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Trigger, currState.GetButtonPress(VRModuleRawButton.Trigger)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.TriggerTouch, currState.GetButtonTouch(VRModuleRawButton.Trigger)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Pad, currState.GetButtonPress(VRModuleRawButton.Touchpad)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.PadTouch, currState.GetButtonTouch(VRModuleRawButton.Touchpad)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Grip, currState.GetButtonPress(VRModuleRawButton.Grip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.GripTouch, currState.GetButtonTouch(VRModuleRawButton.Grip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.CapSenseGrip, currState.GetButtonPress(VRModuleRawButton.CapSenseGrip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.CapSenseGripTouch, currState.GetButtonTouch(VRModuleRawButton.CapSenseGrip)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.ProximitySensor, currState.GetButtonPress(VRModuleRawButton.ProximitySensor)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.AKey, currState.GetButtonPress(VRModuleRawButton.A)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.AKeyTouch, currState.GetButtonTouch(VRModuleRawButton.A)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis3, currState.GetButtonPress(VRModuleRawButton.Axis3)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis3Touch, currState.GetButtonTouch(VRModuleRawButton.Axis3)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis4, currState.GetButtonPress(VRModuleRawButton.Axis4)); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.Axis4Touch, currState.GetButtonTouch(VRModuleRawButton.Axis4)); // update axis values currAxisValue[(int)ControllerAxis.PadX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.PadY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); currAxisValue[(int)ControllerAxis.Trigger] = currState.GetAxisValue(VRModuleRawAxis.Trigger); currAxisValue[(int)ControllerAxis.CapSenseGrip] = currState.GetAxisValue(VRModuleRawAxis.CapSenseGrip); currAxisValue[(int)ControllerAxis.IndexCurl] = currState.GetAxisValue(VRModuleRawAxis.IndexCurl); currAxisValue[(int)ControllerAxis.MiddleCurl] = currState.GetAxisValue(VRModuleRawAxis.MiddleCurl); currAxisValue[(int)ControllerAxis.RingCurl] = currState.GetAxisValue(VRModuleRawAxis.RingCurl); currAxisValue[(int)ControllerAxis.PinkyCurl] = currState.GetAxisValue(VRModuleRawAxis.PinkyCurl); switch (trackedDeviceModel) { case VRModuleDeviceModel.WMRControllerLeft: case VRModuleDeviceModel.WMRControllerRight: currAxisValue[(int)ControllerAxis.PadX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.PadY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); currAxisValue[(int)ControllerAxis.JoystickX] = currState.GetAxisValue(VRModuleRawAxis.JoystickX); currAxisValue[(int)ControllerAxis.JoystickY] = currState.GetAxisValue(VRModuleRawAxis.JoystickY); break; default: if (VIUSettings.individualTouchpadJoystickValue) { switch (trackedDeviceModel) { case VRModuleDeviceModel.OculusTouchLeft: case VRModuleDeviceModel.OculusTouchRight: currAxisValue[(int)ControllerAxis.JoystickX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.JoystickY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); break; default: currAxisValue[(int)ControllerAxis.PadX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.PadY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); break; } } else { currAxisValue[(int)ControllerAxis.PadX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.PadY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); currAxisValue[(int)ControllerAxis.JoystickX] = currState.GetAxisValue(VRModuleRawAxis.TouchpadX); currAxisValue[(int)ControllerAxis.JoystickY] = currState.GetAxisValue(VRModuleRawAxis.TouchpadY); } break; } // update d-pad var axis = new Vector2(currAxisValue[(int)ControllerAxis.PadX], currAxisValue[(int)ControllerAxis.PadY]); var deadZone = VIUSettings.virtualDPadDeadZone; if (axis.sqrMagnitude >= deadZone * deadZone) { var padPress = GetPress(ControllerButton.Pad); var padTouch = GetPress(ControllerButton.PadTouch); var right = Vector2.Angle(Vector2.right, axis) < 45f; var up = Vector2.Angle(Vector2.up, axis) < 45f; var left = Vector2.Angle(Vector2.left, axis) < 45f; var down = Vector2.Angle(Vector2.down, axis) < 45f; EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadRight, padPress && right); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUp, padPress && up); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLeft, padPress && left); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadDown, padPress && down); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadRightTouch, padTouch && right); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUpTouch, padTouch && up); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLeftTouch, padTouch && left); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadDownTouch, padTouch && down); var upperRight = axis.x > 0f && axis.y > 0f; var upperLeft = axis.x <0f && axis.y> 0f; var lowerLeft = axis.x < 0f && axis.y < 0f; var lowerRight = axis.x > 0f && axis.y < 0f; EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUpperRight, padPress && upperRight); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUpperLeft, padPress && upperLeft); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLowerLeft, padPress && lowerLeft); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLowerRight, padPress && lowerRight); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUpperRightTouch, padTouch && upperRight); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadUpperLeftTouch, padTouch && upperLeft); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLowerLeftTouch, padTouch && lowerLeft); EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.DPadLowerRightTouch, padTouch && lowerRight); } // update hair trigger var currTriggerValue = currAxisValue[(int)ControllerAxis.Trigger]; EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.FullTrigger, currTriggerValue == 1f); if (EnumUtils.GetFlag(prevButtonPressed, (int)ControllerButton.HairTrigger)) { EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.HairTrigger, currTriggerValue >= (hairTriggerLimit - hairDelta) && currTriggerValue > 0.0f); } else { EnumUtils.SetFlag(ref currButtonPressed, (int)ControllerButton.HairTrigger, currTriggerValue > (hairTriggerLimit + hairDelta) || currTriggerValue >= 1.0f); } if (EnumUtils.GetFlag(currButtonPressed, (int)ControllerButton.HairTrigger)) { hairTriggerLimit = Mathf.Max(hairTriggerLimit, currTriggerValue); } else { hairTriggerLimit = Mathf.Min(hairTriggerLimit, currTriggerValue); } // record pad down axis values if (GetPressDown(ControllerButton.Pad)) { padDownAxis = new Vector2(currAxisValue[(int)ControllerAxis.PadX], currAxisValue[(int)ControllerAxis.PadY]); } if (GetPressDown(ControllerButton.PadTouch)) { padTouchDownAxis = new Vector2(currAxisValue[(int)ControllerAxis.PadX], currAxisValue[(int)ControllerAxis.PadY]); } // record press down time and click count var timeNow = Time.unscaledTime; for (int button = 0; button < CONTROLLER_BUTTON_COUNT; ++button) { if (GetPressDown((ControllerButton)button)) { if (timeNow - lastPressDownTime[button] < clickInterval) { ++clickCount[button]; } else { clickCount[button] = 1; } lastPressDownTime[button] = timeNow; } } // invoke event listeners for (ControllerButton button = 0; button < (ControllerButton)CONTROLLER_BUTTON_COUNT; ++button) { if (GetPress(button)) { if (GetPressDown(button)) { // PressDown event TryInvokeListener(button, ButtonEventType.Down); TryInvokeTypeListener(button, ButtonEventType.Down); } // Press event TryInvokeListener(button, ButtonEventType.Press); TryInvokeTypeListener(button, ButtonEventType.Press); } else if (GetPressUp(button)) { // PressUp event TryInvokeListener(button, ButtonEventType.Up); TryInvokeTypeListener(button, ButtonEventType.Up); if (timeNow - lastPressDownTime[(int)button] < clickInterval) { // Click event TryInvokeListener(button, ButtonEventType.Click); TryInvokeTypeListener(button, ButtonEventType.Click); } } } return(false); }
public void UpdateModel() { if (m_isQuiting) { return; } if (m_updateModelLock) { Debug.LogWarning("Recursive UpdateModel call is not supported"); return; } m_updateModelLock = true; var deviceState = VRModule.GetDeviceState(GetModelDeviceIndex()); var lastActiveCustomModelNum = m_activeCustomModel; var lastActiveCustomModelObj = m_customModelObjs[m_activeCustomModel]; var lastCustomModelActive = m_isCustomModelActivated; var shouldActiveCustomModelNum = deviceState.deviceModel; var shouldActiveCustomModelPrefab = m_customModels[shouldActiveCustomModelNum]; if (shouldActiveCustomModelPrefab == null) { shouldActiveCustomModelPrefab = VIUSettings.GetOverrideDeviceModel(shouldActiveCustomModelNum); } var shouldActiveCustomModel = enabled && deviceState.isConnected && shouldActiveCustomModelPrefab != null; var lastCreatorActive = m_activeCreatorIndex >= 0; var shouldActiveCreator = enabled && !shouldActiveCustomModel; var shouldActiveCreatorIndex = -1; if (shouldActiveCreator) { // determin which creator should be activated shouldActiveCreatorIndex = m_defaultCreatorIndex; if (m_overrideModel == OverrideModelEnum.DontOverride) { for (int i = 0, imax = m_creators.Length; i < imax; ++i) { if (m_creators[i].shouldActive) { shouldActiveCreatorIndex = i; break; } } } } if (lastCustomModelActive) { if (!shouldActiveCustomModel || lastActiveCustomModelNum != shouldActiveCustomModelNum) { // deactivate custom override model if (lastActiveCustomModelObj != null && SendBeforeModelDeactivatedMessage(lastActiveCustomModelObj, this)) { lastActiveCustomModelObj.gameObject.SetActive(false); } m_isCustomModelActivated = false; } } if (lastCreatorActive) { if (!shouldActiveCreator || m_activeCreatorIndex != shouldActiveCreatorIndex) { // clean up old creator m_creators[m_activeCreatorIndex].CleanUpRenderModel(); m_activeCreatorIndex = -1; } } if (shouldActiveCustomModel) { var shouldActiveCustomModelObj = m_customModelObjs[shouldActiveCustomModelNum]; if (shouldActiveCustomModelObj == null) { // instantiate custom override model shouldActiveCustomModelObj = Instantiate(shouldActiveCustomModelPrefab); shouldActiveCustomModelObj.transform.position = Vector3.zero; shouldActiveCustomModelObj.transform.rotation = Quaternion.identity; shouldActiveCustomModelObj.transform.SetParent(transform, false); m_activeCustomModel = shouldActiveCustomModelNum; m_customModelObjs[shouldActiveCustomModelNum] = shouldActiveCustomModelObj; m_isCustomModelActivated = false; SendAfterModelCreatedMessage(shouldActiveCustomModelObj, this); } if (!m_isCustomModelActivated) { // active custom override model if (SendBeforeModelActivatedMessage(shouldActiveCustomModelObj, this)) { shouldActiveCustomModelObj.gameObject.SetActive(true); } m_isCustomModelActivated = true; } } if (shouldActiveCreator) { m_activeCreatorIndex = shouldActiveCreatorIndex; // update active creator m_creators[m_activeCreatorIndex].UpdateRenderModel(); } m_updateModelLock = false; }
public static GameObject GetOverrideDeviceModel(VRModuleDeviceModel model) { return(Instance == null || s_instance.m_overrideDeviceModel == null ? null : s_instance.m_overrideDeviceModel[model]); }