Ejemplo n.º 1
0
    protected void OnDestroy()
    {
        if (m_PhysicsBody != null)
        {
            if (MVRNodesMapper.HasInstance())
            {
                var nodesMapper = MVRNodesMapper.Instance;
                nodesMapper.RemoveMapping(gameObject);
            }

            if (MiddleVR.VRPhysicsMgr != null)
            {
                vrPhysicsEngine physicsEngine = MiddleVR.VRPhysicsMgr.GetPhysicsEngine();
                if (physicsEngine != null)
                {
                    physicsEngine.DestroyBody(m_PhysicsBodyName);
                }
            }

            m_PhysicsBody.Dispose();

            m_PhysicsBody = null;
        }

        m_PhysicsBodyName = "";

        if (m_MVREventListener != null)
        {
            m_MVREventListener.Dispose();
        }
    }
Ejemplo n.º 2
0
    void OnApplicationQuit()
    {
        MVRNodesCreator.DestroyInstance();
        MVRNodesMapper.DestroyInstance();

        MVRTools.VRDestroy(Application.isEditor);
    }
Ejemplo n.º 3
0
    protected void Awake()
    {
        MVRNodesMapper.CreateInstance();
        MVRNodesCreator.CreateInstance();

        InitializeVR();
    }
Ejemplo n.º 4
0
    protected void Awake()
    {
        // Attempt to collect objects from previous level
        System.GC.Collect();
        System.GC.WaitForPendingFinalizers();
        // Second call to work around a possible mono bug (see https://bugzilla.xamarin.com/show_bug.cgi?id=20503 )
        System.GC.WaitForPendingFinalizers();

        MVRNodesMapper.CreateInstance();
        MVRNodesCreator.CreateInstance();

        InitializeVR();
    }
Ejemplo n.º 5
0
    public void SetSyncDirection(MVRNodesMapper.ENodesSyncDirection iSyncDirection)
    {
        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        if (nodesMapper != null && m_Node != null)
        {
            if (m_SyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.RemoveMapping(gameObject, false);
            }

            if (iSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.AddMapping(gameObject, m_Node, iSyncDirection);
            }
        }

        m_SyncDirection = iSyncDirection;
    }
Ejemplo n.º 6
0
    private void _SetSyncDirection(MVRNodesMapper.ENodesSyncDirection iSyncDirection)
    {
        m_SyncDirIsSet = true;
        m_SyncDirection = iSyncDirection;

        var nodesMapper = MVRNodesMapper.Instance;

        if (iSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
        {
            // Set new MiddleVR - Unity nodes mapping if needed
            m_MiddleVRNode = nodesMapper.AddMapping(this.gameObject, MiddleVRNodeName, iSyncDirection);
        }
        else if(m_MiddleVRNode != null)
        {
            // No synchronization and existing mvrNode: stop node synchronization
            nodesMapper.RemoveMapping(m_MiddleVRNode.GetName());

            m_MiddleVRNode = null;
        }
    }
Ejemplo n.º 7
0
    public vrNode3D InitNode()
    {
        // Check for grabbed nodes
        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        if (nodesMapper != null)
        {
            vrNode3D node = nodesMapper.GetNode(gameObject);
            if (node != null)
            {
                m_Node          = node;
                m_NodeName      = m_Node.GetName();
                m_SyncDirection = MVRNodesMapper.ENodesSyncDirection.MiddleVRToUnity;
                m_IsNodeGrabbed = true;
                return(m_Node);
            }
        }

        return(CreateNode(m_NodeName, MVRNodesMapper.ENodesSyncDirection.MiddleVRToUnity));
    }
Ejemplo n.º 8
0
    protected void OnApplicationQuit()
    {
        MVRNodesCreator.DestroyInstance();
        MVRNodesMapper.DestroyInstance();

        MiddleVR.DisposeObject(ref m_shareRandomStateCommand);
        MiddleVR.DisposeObject(ref m_startParticlesCommand);

        MVRTools.VRDestroy(Application.isEditor);

        // Unity 5.6 players crash on exit when any "-force-*" parameter is on the command line.
        // When launching from middlevr configuration, one of these parameters is always set,
        // so we kill the process as a workaround.
        // The environment variable MIDDLEVR_FORCE_KILL_PLAYER can be set to "false" (case insensitive)
        // to disable this behaviour.
#if UNITY_5_6_OR_NEWER && !UNITY_EDITOR
        string[] crashingArguments = new string[] { "-force-d3d11", "-force-d3d9", "-force-opengl" };

        bool commandLineHasCrashingArgument = Environment.GetCommandLineArgs().Any(
            commandLineArg => crashingArguments.Any(
                crashingArg => String.Equals(commandLineArg, crashingArg, StringComparison.OrdinalIgnoreCase)));

        if (commandLineHasCrashingArgument)
        {
            bool forceKill = true;

            string forceKillEnvVar = Environment.GetEnvironmentVariable("MIDDLEVR_FORCE_KILL_PLAYER");
            if (forceKillEnvVar != null)
            {
                Boolean.TryParse(forceKillEnvVar, out forceKill);
            }

            if (forceKill)
            {
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            }
        }
#endif
    }
Ejemplo n.º 9
0
    private bool _OnNodeEvent(vrEvent iEvent)
    {
        if (!m_IsNodeGrabbed)
        {
            vrObjectEvent objectEvent = vrObjectEvent.Cast(iEvent);
            if (objectEvent != null && objectEvent.GetEventType() == (int)VRObjectEventEnum.VRObjectEvent_Destroy)
            {
                MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

                if (nodesMapper != null && m_SyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
                {
                    nodesMapper.RemoveMapping(gameObject, false);
                }

                SetSyncDirection(MVRNodesMapper.ENodesSyncDirection.NoSynchronization);
                m_Node = null;

                // Destroys the object later this frame, before rendering
                UnityEngine.Object.Destroy(gameObject);
            }
        }
        return(true);
    }
Ejemplo n.º 10
0
    // Update is called once per frame
    void Update()
    {
        //MVRTools.Log("VRManagerUpdate");

        // Initialize interactions
        if (!m_InteractionsInitialized)
        {
            _SetNavigation(Navigation);
            _SetManipulation(Manipulation);
            _SetVirtualHandMapping(VirtualHandMapping);

            m_InteractionsInitialized = true;
        }

        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        nodesMapper.UpdateNodesUnityToMiddleVR();

        if (m_isInit)
        {
            MVRTools.Log(4, "[>] Unity Update - Start");

            if (m_Kernel.GetFrame() >= m_FirstFrameAfterReset + 1 && !m_isGeometrySet && !Application.isEditor)
            {
                if (!DontChangeWindowGeometry)
                {
                    m_DisplayMgr.SetUnityWindowGeometry();
                }
                m_isGeometrySet = true;
            }

            if (m_Kernel.GetFrame() == 0)
            {
                // Set the random seed in kernel for dispatching only during start-up.
                // With clustering, a client will be set by a call to kernel.Update().
                if (!m_ClusterMgr.IsCluster() ||
                    (m_ClusterMgr.IsCluster() && m_ClusterMgr.IsServer()))
                {
                    // The cast is safe because the seed is always positive.
                    uint seed = (uint)UnityEngine.Random.seed;
                    m_Kernel._SetRandomSeed(seed);
                }
            }

            m_Kernel.Update();

            if (m_Kernel.GetFrame() == 0)
            {
                // Set the random seed in a client only during start-up.
                if (m_ClusterMgr.IsCluster() && m_ClusterMgr.IsClient())
                {
                    // The cast is safe because the seed comes from
                    // a previous value of Unity.
                    int seed = (int)m_Kernel.GetRandomSeed();
                    UnityEngine.Random.seed = seed;
                }
            }

            UpdateInput();

            if (ShowFPS)
            {
                this.GetComponent <GUIText>().text = m_Kernel.GetFPS().ToString("f2");
            }

            nodesMapper.UpdateNodesMiddleVRToUnity(false);

            MVRTools.UpdateCameraProperties();

            if (m_displayLog)
            {
                string txt = m_Kernel.GetLogString(true);
                print(txt);
                m_GUI.text = txt;
            }

            vrKeyboard keyb = m_DeviceMgr.GetKeyboard();

            if (keyb != null)
            {
                if (keyb.IsKeyPressed(MiddleVR.VRK_LSHIFT) || keyb.IsKeyPressed(MiddleVR.VRK_RSHIFT))
                {
                    if (keyb.IsKeyToggled(MiddleVR.VRK_D))
                    {
                        ShowFPS = !ShowFPS;
                    }

                    if (keyb.IsKeyToggled(MiddleVR.VRK_W) || keyb.IsKeyToggled(MiddleVR.VRK_Z))
                    {
                        ShowWand = !ShowWand;
                        ShowWandGeometry(ShowWand);
                    }

                    // Toggle Fly mode on interactions
                    if (keyb.IsKeyToggled(MiddleVR.VRK_F))
                    {
                        Fly = !Fly;
                    }

                    // Navigation mode switch
                    if (keyb.IsKeyToggled(MiddleVR.VRK_N))
                    {
                        vrInteraction navigation = _GetNextInteraction("ContinuousNavigation");
                        if (navigation != null)
                        {
                            MiddleVR.VRInteractionMgr.Activate(navigation);
                        }
                    }
                }
            }

            DeltaTime = m_Kernel.GetDeltaTime();

            MVRTools.Log(4, "[<] Unity Update - End");
        }
        else
        {
            //Debug.LogWarning("[ ] If you have an error mentioning 'DLLNotFoundException: MiddleVR_CSharp', please restart Unity. If this does not fix the problem, please make sure MiddleVR is in the PATH environment variable.");
        }

        // If QualityLevel changed, we have to reset the Unity Manager
        if (m_NeedDelayedRenderingReset)
        {
            if (m_RenderingResetDelay == 0)
            {
                MVRTools.Log(3, "[ ] Graphic quality forced, reset Unity Manager.");
                MVRTools.VRReset();
                MVRTools.CreateViewportsAndCameras(DontChangeWindowGeometry, m_AllowRenderTargetAA);
                m_isGeometrySet             = false;
                m_NeedDelayedRenderingReset = false;
            }
            else
            {
                --m_RenderingResetDelay;
            }
        }
    }
Ejemplo n.º 11
0
    // Update is called once per frame
    protected void Update()
    {
        // Initialize interactions
        if (!m_InteractionsInitialized)
        {
            _SetNavigation(Navigation);
            _SetManipulation(Manipulation);
            _SetVirtualHandMapping(VirtualHandMapping);

            m_InteractionsInitialized = true;
        }

        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        nodesMapper.UpdateNodesUnityToMiddleVR();

        if (m_isInit)
        {
            MVRTools.Log(4, "[>] Unity Update - Start");

            if (m_Kernel.GetFrame() >= m_FirstFrameAfterReset + 1 && !m_isGeometrySet && !Application.isEditor)
            {
                if (!DontChangeWindowGeometry)
                {
                    m_DisplayMgr.SetUnityWindowGeometry();
                }
                m_isGeometrySet = true;
            }

            // Set the random seed in kernel for dispatching only during start-up.
            if (m_Kernel.GetFrame() == 0)
            {
                // Disable obsolescence warning for Random.seed as we only use it to initalize
                // the MiddleVR random seed.
                // Using Random.seed was deprecated because it is a single integer and does not
                // contain the full state of the random number generator and thus could not be
                // used for restoring or synchronizing the state.
#pragma warning disable 618
                // The cast is safe because the seed is always positive.
                m_Kernel._SetRandomSeed((uint)UnityEngine.Random.seed);
#pragma warning restore 618

                // With clustering, a client will be set by a call to kernel.Update().
                if (m_ClusterMgr.IsCluster())
                {
                    if (m_shareRandomStateCommand == null)
                    {
                        m_shareRandomStateCommand = new vrCommand("MVR_ShareRandomState", (vrValue val) =>
                        {
                            UnityEngine.Random.state = JsonUtility.FromJson <UnityEngine.Random.State>(val.GetString());
                            return(new vrValue());
                        });
                    }

                    if (m_ClusterMgr.IsServer())
                    {
                        m_shareRandomStateCommand.Do(new vrValue(JsonUtility.ToJson(UnityEngine.Random.state)));
                    }
                }
            }

            m_Kernel.Update();

            UpdateInput();

            if (ShowFPS)
            {
                m_FPSText.text = m_Kernel.GetFPS().ToString("f2");
            }

            nodesMapper.UpdateNodesMiddleVRToUnity(false);

            MVRTools.UpdateCameraProperties(m_Kernel, m_DisplayMgr, nodesMapper);

            vrKeyboard keyb = m_DeviceMgr.GetKeyboard();

            if (keyb != null)
            {
                if (keyb.IsKeyPressed(MiddleVR.VRK_LSHIFT) || keyb.IsKeyPressed(MiddleVR.VRK_RSHIFT))
                {
                    if (keyb.IsKeyToggled(MiddleVR.VRK_D))
                    {
                        ShowFPS = !ShowFPS;
                    }

                    if (keyb.IsKeyToggled(MiddleVR.VRK_W) || keyb.IsKeyToggled(MiddleVR.VRK_Z))
                    {
                        ShowWand = !ShowWand;
                        ShowWandGeometry(ShowWand);
                    }

                    // Toggle Fly mode on interactions
                    if (keyb.IsKeyToggled(MiddleVR.VRK_F))
                    {
                        Fly = !Fly;
                    }

                    // Navigation mode switch
                    if (keyb.IsKeyToggled(MiddleVR.VRK_N))
                    {
                        vrInteraction navigation = _GetNextInteraction("ContinuousNavigation");
                        if (navigation != null)
                        {
                            MiddleVR.VRInteractionMgr.Activate(navigation);
                        }
                    }
                }
            }

            DeltaTime = m_Kernel.GetDeltaTime();

            MVRTools.Log(4, "[<] Unity Update - End");
        }
        else
        {
            //Debug.LogWarning("[ ] If you have an error mentioning 'DLLNotFoundException: MiddleVR_CSharp', please restart Unity. If this does not fix the problem, please make sure MiddleVR is in the PATH environment variable.");
        }
    }
Ejemplo n.º 12
0
    private void _SetNode(vrNode3D iNode3D, MVRNodesMapper.ENodesSyncDirection iInitialSyncDirection, MVRNodesMapper.ENodesSyncDirection iSyncDirection)
    {
        // Check if iNode3D and m_Node3D are the same
        if (m_Node == iNode3D || (m_Node != null && iNode3D != null && m_Node.GetId() == iNode3D.GetId()))
        {
            // Same node, return.
            return;
        }

        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        // Cleanup old node
        if (m_Node != null && !m_IsNodeGrabbed)
        {
            if (m_EventListener != null)
            {
                m_Node.RemoveEventListener(m_EventListener);
            }

            if (m_SyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.RemoveMapping(gameObject, true);
            }
        }

        m_IsNodeGrabbed = false;
        m_Node          = iNode3D;

        // Setup new node
        if (m_Node != null)
        {
            // First mapping will copy the object's transform
            if (iInitialSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.AddMapping(gameObject, m_Node, iInitialSyncDirection);
            }

            if (iInitialSyncDirection != iSyncDirection)
            {
                if (iInitialSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
                {
                    nodesMapper.RemoveMapping(gameObject, false);
                }

                if (iSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
                {
                    nodesMapper.AddMapping(gameObject, m_Node, iSyncDirection);
                }
            }

            m_NodeName      = m_Node.GetName();
            m_SyncDirection = iSyncDirection;

            if (m_EventListener == null)
            {
                m_EventListener = new vrEventListener(_OnNodeEvent);
            }

            m_Node.AddEventListener(m_EventListener);
        }
        else
        {
            m_NodeName = "";
        }
    }
Ejemplo n.º 13
0
    private void _SetSyncDirection(MVRNodesMapper.ENodesSyncDirection iSyncDirection)
    {
        MVRNodesMapper nodesMapper = MVRNodesMapper.Instance;

        if (m_Node3D != null)
        {
            if (m_SyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.RemoveMapping(gameObject, false);
            }

            if (iSyncDirection != MVRNodesMapper.ENodesSyncDirection.NoSynchronization)
            {
                nodesMapper.AddMapping(gameObject, m_Node3D, iSyncDirection);
            }
        }

        m_SyncDirection = iSyncDirection;
    }