public void UpdateComponents(CVRRenderModels renderModels) { if (renderModels == null) { return; } var t = transform; if (t.childCount == 0) { return; } var controllerState = (index != SteamVR_TrackedObject.EIndex.None) ? SteamVR_Controller.Input((int)index).GetState() : new VRControllerState_t(); if (nameCache == null) { nameCache = new Dictionary <int, string>(); } for (int i = 0; i < t.childCount; i++) { var child = t.GetChild(i); // Cache names since accessing an object's name allocate memory. string name; if (!nameCache.TryGetValue(child.GetInstanceID(), out name)) { name = child.name; nameCache.Add(child.GetInstanceID(), name); } var componentState = new RenderModel_ComponentState_t(); if (!renderModels.GetComponentState(renderModelName, name, ref controllerState, ref controllerModeState, ref componentState)) { continue; } var componentTransform = new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentRenderModel); child.localPosition = componentTransform.pos; child.localRotation = componentTransform.rot; var attach = child.Find(k_localTransformName); if (attach != null) { var attachTransform = new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentLocal); attach.position = t.TransformPoint(attachTransform.pos); attach.rotation = t.rotation * attachTransform.rot; } bool visible = (componentState.uProperties & (uint)EVRComponentProperty.IsVisible) != 0; if (visible != child.gameObject.activeSelf) { child.gameObject.SetActive(visible); } } }
public void UpdateComponents() { var t = transform; if (t.childCount == 0) { return; } using (var holder = new RenderModelInterfaceHolder()) { var controllerState = (index != SteamVR_TrackedObject.EIndex.None) ? SteamVR_Controller.Input((int)index).GetState() : new VRControllerState_t(); for (int i = 0; i < t.childCount; i++) { var child = t.GetChild(i); var renderModels = holder.instance; if (renderModels == null) { break; } var componentState = new RenderModel_ComponentState_t(); var componentModeState = new RenderModel_ControllerMode_State_t(); if (!renderModels.GetComponentState(renderModelName, child.name, ref controllerState, ref componentModeState, ref componentState)) { continue; } var componentTransform = new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentRenderModel); child.localPosition = componentTransform.pos; child.localRotation = componentTransform.rot; var attach = child.FindChild(k_localTransformName); if (attach != null) { var attachTransform = new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentLocal); attach.position = t.TransformPoint(attachTransform.pos); attach.rotation = t.rotation * attachTransform.rot; } bool visible = (componentState.uProperties & (uint)EVRComponentProperty.IsVisible) != 0; if (visible != child.gameObject.activeSelf) { child.gameObject.SetActive(visible); } } } }
// Token: 0x06000DE8 RID: 3560 RVA: 0x00058868 File Offset: 0x00056A68 public void UpdateComponents(CVRRenderModels renderModels) { if (renderModels == null) { return; } Transform transform = base.transform; if (transform.childCount == 0) { return; } VRControllerState_t vrcontrollerState_t = (this.index != SteamVR_TrackedObject.EIndex.None) ? SteamVR_Controller.Input((int)this.index).GetState() : default(VRControllerState_t); if (this.nameCache == null) { this.nameCache = new Dictionary <int, string>(); } for (int i = 0; i < transform.childCount; i++) { Transform child = transform.GetChild(i); string name; if (!this.nameCache.TryGetValue(child.GetInstanceID(), out name)) { name = child.name; this.nameCache.Add(child.GetInstanceID(), name); } RenderModel_ComponentState_t renderModel_ComponentState_t = default(RenderModel_ComponentState_t); if (renderModels.GetComponentState(this.renderModelName, name, ref vrcontrollerState_t, ref this.controllerModeState, ref renderModel_ComponentState_t)) { SteamVR_Utils.RigidTransform rigidTransform = new SteamVR_Utils.RigidTransform(renderModel_ComponentState_t.mTrackingToComponentRenderModel); child.localPosition = rigidTransform.pos; child.localRotation = rigidTransform.rot; Transform transform2 = child.Find("attach"); if (transform2 != null) { SteamVR_Utils.RigidTransform rigidTransform2 = new SteamVR_Utils.RigidTransform(renderModel_ComponentState_t.mTrackingToComponentLocal); transform2.position = transform.TransformPoint(rigidTransform2.pos); transform2.rotation = transform.rotation * rigidTransform2.rot; } bool flag = (renderModel_ComponentState_t.uProperties & 2U) > 0U; if (flag != child.gameObject.activeSelf) { child.gameObject.SetActive(flag); } } } }
private void RenderMultiComponentModel(DeviceContext context, bool depthOnly, uint trackedDeviceIdx, string renderModelName) { var components = cache.LookupComponents(context, renderModelName); if (components == null) { return; } OpenVR.System.GetControllerState(trackedDeviceIdx, out VRControllerState_t controllerState); RenderModel_ControllerMode_State_t controllerMode = new RenderModel_ControllerMode_State_t { bScrollWheelVisible = false }; for (uint componentIdx = 0; componentIdx < components.Length; ++componentIdx) { var component = components[componentIdx]; if (component.model == null) { //this is a non-visual component continue; } RenderModel_ComponentState_t componentState = default(RenderModel_ComponentState_t); OpenVR.RenderModels.GetComponentState(renderModelName, component.name, ref controllerState, ref controllerMode, ref componentState); bool isVisible = ((EVRComponentProperty)componentState.uProperties).HasFlag(EVRComponentProperty.IsVisible); if (isVisible) { Matrix componentToObjectMatrix = componentState.mTrackingToComponentRenderModel.Convert(); componentSpaceToObjectTransformBufferManager.Update(context, componentToObjectMatrix); component.model.Render(context, depthOnly); } } }
private bool TryGetComponentState(CVRSystem vrSystem, CVRRenderModels vrRenderModels, string componentName, out RenderModel_ComponentState_t componentState) { componentState = default(RenderModel_ComponentState_t); var modeState = default(RenderModel_ControllerMode_State_t); var controllerState = default(VRControllerState_t); if (!vrSystem.GetControllerState(m_deviceIndex, ref controllerState, s_sizeOfControllerStats)) { return(false); } if (!vrRenderModels.GetComponentState(loadedModelName, componentName, ref controllerState, ref modeState, ref componentState)) { return(false); } return(true); }
private bool TryGetComponentState(CVRSystem vrSystem, CVRRenderModels vrRenderModels, string componentName, out RenderModel_ComponentState_t componentState) { componentState = default(RenderModel_ComponentState_t); var modeState = default(RenderModel_ControllerMode_State_t); return(vrRenderModels.GetComponentStateForDevicePath(loadedModelName, componentName, SteamVRModule.GetInputSourceHandleForDevice(m_deviceIndex), ref modeState, ref componentState)); }
void Update() { #if UNITY_EDITOR if (!Application.isPlaying) { // See if anything has changed since this gets called whenever anything gets touched. var fields = GetType().GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); bool modified = false; if (values == null) { modified = true; } else { foreach (var f in fields) { if (!values.Contains(f) || !f.GetValue(this).Equals(values[f])) { modified = true; break; } } } if (modified) { SetModel(modelOverride); values = new Hashtable(); foreach (var f in fields) { values[f] = f.GetValue(this); } } return; // Do not update transforms (below) when not playing in Editor (to avoid keeping OpenVR running all the time). } #endif // Update component transforms dynamically. if (updateDynamically) { using (var holder = new RenderModelInterfaceHolder()) { var controllerState = SteamVR_Controller.Input((int)index).GetState(); var t = transform; var baseTransform = new SteamVR_Utils.RigidTransform(t); for (int i = 0; i < t.childCount; i++) { var child = t.GetChild(i); var renderModels = holder.instance; if (renderModels == null) { break; } var componentState = new RenderModel_ComponentState_t(); if (!renderModels.GetComponentState(renderModelName, child.name, ref controllerState, ref componentState)) { continue; } var componentTransform = new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentRenderModel); child.localPosition = componentTransform.pos; child.localRotation = componentTransform.rot; var attach = child.FindChild(k_localTransformName); if (attach != null) { var attachTransform = baseTransform * new SteamVR_Utils.RigidTransform(componentState.mTrackingToComponentLocal); attach.position = attachTransform.pos; attach.rotation = attachTransform.rot; } bool visible = (componentState.uProperties & (uint)EVRComponentProperty.IsVisible) != 0; if (visible != child.gameObject.activeSelf) { child.gameObject.SetActive(visible); } } } } }
public abstract bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState);
public override bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState) { CheckIfUsable(); bool result = VRNativeEntrypoints.VR_IVRRenderModels_GetComponentState(m_pVRRenderModels,pchRenderModelName,pchComponentName,ref pControllerState,ref pState,ref pComponentState); return result; }