Exemplo n.º 1
0
    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);
            }
        }
    }
Exemplo n.º 2
0
    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);
                }
            }
        }
    }
Exemplo n.º 3
0
    // 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);
            }
        }
    }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
                    }
                }
            }
        }
    }
Exemplo n.º 8
0
 public abstract bool GetComponentState(string pchRenderModelName,string pchComponentName,ref VRControllerState_t pControllerState,ref RenderModel_ControllerMode_State_t pState,ref RenderModel_ComponentState_t pComponentState);
Exemplo n.º 9
0
 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;
 }