Exemplo n.º 1
0
        private void AddHeadTrackerEvent(ref List <VREvent> eventList)
        {
            if (Input.GetKey("up"))
            {
                headTrackerPos += 0.1f * Camera.main.transform.forward;
            }
            else if (Input.GetKey("down"))
            {
                headTrackerPos -= 0.1f * Camera.main.transform.forward;
            }
            else if (Input.GetKey("left"))
            {
                headTrackerRot *= Quaternion.AngleAxis(-1.0f, new Vector3(0f, 1f, 0f));
            }
            else if (Input.GetKey("right"))
            {
                headTrackerRot *= Quaternion.AngleAxis(1.0f, new Vector3(0f, 1f, 0f));
            }

            Matrix4x4 m3 = Matrix4x4.TRS(headTrackerPos, headTrackerRot, Vector3.one);

            float[] d3 = VRConvert.ToFloatArray(m3);
            VREvent e  = new VREvent(fakeHeadTrackerEvent);

            e.AddData("EventType", "TrackerMove");
            e.AddData("Transform", d3);
            eventList.Add(e);
        }
Exemplo n.º 2
0
        // Update is called once per frame
        void Update()
        {
            if (threadingMode == ThreadingMode.SINGLE_THREADED)
            {
                // update the trackers only once per frame
                if (lastTrackerUpdateFrame != Time.frameCount)
                {
                    UpdateTrackers();
                    lastTrackerUpdateFrame = Time.frameCount;
                }

                trackerData = (TrackerData)Marshal.PtrToStructure(trackerDataPointer, typeof(TrackerData));
            }
            else
            {
                // update the trackers only once per frame
                if (lastTrackerUpdateFrame != Time.frameCount)
                {
                    UpdateTrackersMultiThreaded();
                    lastTrackerUpdateFrame = Time.frameCount;
                }

                LockTrackerData(trackerDataPointer);
                trackerData = (TrackerData)Marshal.PtrToStructure(trackerDataPointer, typeof(TrackerData));
                UnlockTrackerData(trackerDataPointer);
            }

            Vector3 transformPosition = transform.position;
            Quaternion transformRotation = transform.rotation;

            this.updateTransformFromTrackerData(ref transformPosition, ref transformRotation);

            // if a custom origin has been specified
            // then update the transform coordinate space
            if (origin != null)
            {
                if (trackingMode != TrackingMode.POSITION_ONLY)
                    transformRotation = origin.rotation * transformRotation;
                else
                    transformRotation = origin.rotation;

                if (trackingMode != TrackingMode.ORIENTATION_ONLY)
                    transformPosition = origin.position + origin.rotation * transformPosition;
                else
                    transformPosition = origin.position;
            }

            Matrix4x4 m3 = Matrix4x4.TRS(transformPosition, transformRotation, Vector3.one);
            float[] d3 = VRConvert.ToFloatArray(m3);
            VREvent e = new VREvent(eventName);
            e.AddData("EventType", "TrackerMove");
            e.AddData("Transform", d3);
            pendingEvents.Add(e);

            if (applyUpdatesToGameObject)
            {
                transform.position = transformPosition;
                transform.rotation = transformRotation;
            }
        }
Exemplo n.º 3
0
        private void AddHeadTrackerEvent(ref List <VREvent> eventList)
        {
            // if (Input.GetKey(KeyCode.LeftShift))
            // {
            //     if (Input.GetKey(KeyCode.DownArrow))
            //     {
            //         headTrackerRot *= Quaternion.AngleAxis(-1.0f, new Vector3(1f, 0f, 0f));
            //     }
            //     else if (Input.GetKey(KeyCode.UpArrow))
            //     {
            //         headTrackerRot *= Quaternion.AngleAxis(1.0f, new Vector3(1f, 0f, 0f));
            //     }
            // }
            // else
            if (Input.GetKey(KeyCode.UpArrow))
            {
                headTrackerPos += 0.1f * Camera.main.transform.forward;
            }
            else if (Input.GetKey(KeyCode.DownArrow))
            {
                headTrackerPos -= 0.1f * Camera.main.transform.forward;
            }
            else if (Input.GetKey(KeyCode.LeftArrow))
            {
                headTrackerRot *= Quaternion.AngleAxis(-1.0f, new Vector3(0f, 1f, 0f));
            }
            else if (Input.GetKey(KeyCode.RightArrow))
            {
                headTrackerRot *= Quaternion.AngleAxis(1.0f, new Vector3(0f, 1f, 0f));
            }

            headTrackerRot.Normalize();

            Matrix4x4 m3 = Matrix4x4.TRS(headTrackerPos, headTrackerRot, Vector3.one);

            float[] d3 = VRConvert.ToFloatArray(m3);
            VREvent e  = new VREvent(fakeHeadTrackerEvent);

            e.AddData("EventType", "TrackerMove");
            e.AddData("Transform", d3);
            eventList.Add(e);
        }
Exemplo n.º 4
0
    void OnButtonDown()
    {
        buttonPressed = true;
        if (selected == 0)
        {
            titleBoxObj.GetComponent <Renderer>().material.color = pressColor;
        }
        else if (selected > 0)
        {
            labelBoxes[selected - 1].GetComponent <Renderer>().material.color = pressColor;

            string        eName = eventsToGenerate[selected - 1];
            MinVR.VREvent e     = new MinVR.VREvent(eName);
            e.AddData("EventType", "ButtonDown");
            MinVR.VRMain.Instance.QueueEvent(e);
        }
    }
Exemplo n.º 5
0
        public void AddUnityInputEvents(ref List <VREvent> eventList)
        {
            // Convery Unity Mouse Button events to VREvent ButtonUp/Down events
            if (vrDevice.unityMouseBtnsToVREvents)
            {
                if (Input.GetMouseButtonDown(0))
                {
                    VREvent e = new VREvent("MouseBtnLeft_Down");
                    e.AddData("EventType", "ButtonDown");
                    eventList.Add(e);
                }
                if (Input.GetMouseButtonDown(2))
                {
                    VREvent e = new VREvent("MouseBtnMiddle_Down");
                    e.AddData("EventType", "ButtonDown");
                    eventList.Add(e);
                }
                if (Input.GetMouseButtonDown(1))
                {
                    VREvent e = new VREvent("MouseBtnRight_Down");
                    e.AddData("EventType", "ButtonDown");
                    eventList.Add(e);
                }
                if (Input.GetMouseButtonUp(0))
                {
                    VREvent e = new VREvent("MouseBtnLeft_Up");
                    e.AddData("EventType", "ButtonUp");
                    eventList.Add(e);
                }
                if (Input.GetMouseButtonUp(2))
                {
                    VREvent e = new VREvent("MouseBtnMiddle_Up");
                    e.AddData("EventType", "ButtonUp");
                    eventList.Add(e);
                }
                if (Input.GetMouseButtonUp(1))
                {
                    VREvent e = new VREvent("MouseBtnRight_Up");
                    e.AddData("EventType", "ButtonUp");
                    eventList.Add(e);
                }
            }


            // Convert Unity mouse move events to VREvent Cursor events
            if (vrDevice.unityMouseMovesToVREvents)
            {
                Vector3 pos = Input.mousePosition;
                if (pos != lastMousePos)
                {
                    Vector3 npos = new Vector3(pos[0] / Screen.width, pos[1] / Screen.height, 0.0f);
                    VREvent e    = new VREvent("Mouse_Move");
                    e.AddData("EventType", "CursorMove");
                    e.AddData("Position", VRConvert.ToFloatArray(pos));
                    e.AddData("NormalizedPosition", VRConvert.ToFloatArray(npos));
                    eventList.Add(e);
                    lastMousePos = pos;
                }
            }


            // Convert Unity key up/down events to VREvent ButtonUp/Down events
            for (int i = 0; i < vrDevice.unityKeysToVREvents.Count; i++)
            {
                if (Input.GetKeyDown(vrDevice.unityKeysToVREvents[i]))
                {
                    VREvent e = new VREvent("Kbd" + vrDevice.unityKeysToVREvents[i] + "_Down");
                    e.AddData("EventType", "ButtonDown");
                    eventList.Add(e);
                }
                if (Input.GetKeyDown(vrDevice.unityKeysToVREvents[i]))
                {
                    VREvent e = new VREvent("Kbd" + vrDevice.unityKeysToVREvents[i] + "_Up");
                    e.AddData("EventType", "ButtonUp");
                    eventList.Add(e);
                }
            }

            // Convert Unity Axis values to VREvent AnalogUpdate events
            for (int i = 0; i < vrDevice.unityAxesToVREvents.Count; i++)
            {
                float current = Input.GetAxis(vrDevice.unityAxesToVREvents[i]);
                bool  update  = false;
                if (axesStates.ContainsKey(vrDevice.unityAxesToVREvents[i]))
                {
                    float last = axesStates[vrDevice.unityAxesToVREvents[i]];
                    if (current != last)
                    {
                        axesStates[vrDevice.unityAxesToVREvents[i]] = current;
                        update = true;
                    }
                }
                else
                {
                    axesStates.Add(vrDevice.unityAxesToVREvents[i], current);
                    update = true;
                }
                if (update)
                {
                    VREvent e = new VREvent(vrDevice.unityAxesToVREvents[i] + "_Update");
                    e.AddData("EventType", "AnalogUpdate");
                    e.AddData("AnalogValue", current);
                    eventList.Add(e);
                }
            }


            // TODO: Convert other Unity inputs as needed (touch, accelerometer, etc.)
        }
Exemplo n.º 6
0
        // Update is called once per frame
        void Update()
        {
            // update the trackers only once per frame
            if (lastButtonUpdateFrame != Time.frameCount)
            {
                UpdateButtons();
                lastButtonUpdateFrame = Time.frameCount;
            }
            buttonData = (ButtonData)Marshal.PtrToStructure(buttonDataPointer, typeof(ButtonData));

            if (buttonData.state != lastButtonState)
            {
                lastButtonState = buttonData.state;
                VREvent e = new VREvent(eventName);
                if (buttonData.state == 0)
                {
                    e.AddData("EventType", "ButtonUp");
                }
                else if (buttonData.state == 1)
                {
                    e.AddData("EventType", "ButtonDown");
                }
                e.AddData("ButtonState", buttonData.state);
                pendingEvents.Add(e);
            }

            if (applyUpdatesToGameObject)
            {
                if (buttonData.state > 0)
                {
                    float speedThisFrame = speed * Time.deltaTime;

                    if (movementType == MovementType.TRANSLATE)
                    {
                        Vector3 position = transform.localPosition;
                        if (axis == Axis.X)
                        {
                            position.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            position.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            position.z += speedThisFrame;
                        }
                        else
                        {
                            position.x += speedThisFrame;
                            position.y += speedThisFrame;
                            position.z += speedThisFrame;
                        }

                        transform.localPosition = position;
                    }
                    else if (movementType == MovementType.ROTATE)
                    {
                        Quaternion newRotation = Quaternion.identity;
                        Vector3    newAngles   = newRotation.eulerAngles;

                        if (axis == Axis.X)
                        {
                            newAngles.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            newAngles.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            newAngles.z += speedThisFrame;
                        }
                        else
                        {
                            newAngles.x += speedThisFrame;
                            newAngles.y += speedThisFrame;
                            newAngles.z += speedThisFrame;
                        }

                        if (newAngles.x > 360)
                        {
                            newAngles.x %= 360;
                        }

                        if (newAngles.y > 360)
                        {
                            newAngles.y %= 360;
                        }

                        if (newAngles.z > 360)
                        {
                            newAngles.z %= 360;
                        }

                        newRotation.eulerAngles = newAngles;


                        Quaternion rotation = transform.localRotation;
                        rotation = rotation * newRotation;
                        transform.localRotation = rotation;
                    }
                    else
                    {
                        Vector3 scale = transform.localScale;
                        if (axis == Axis.X)
                        {
                            scale.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            scale.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            scale.z += speedThisFrame;
                        }
                        else
                        {
                            scale.x += speedThisFrame;
                            scale.y += speedThisFrame;
                            scale.z += speedThisFrame;
                        }

                        transform.localScale = scale;
                    }
                }
            }
        }
Exemplo n.º 7
0
        public static VREvent FromBinary(BinaryReader br)
        {
            string  eName = br.ReadString();
            VREvent e     = new VREvent(eName);

            int nByteFields = br.ReadInt32();

            for (int i = 0; i < nByteFields; i++)
            {
                string fName = br.ReadString();
                byte   data  = br.ReadByte();
                e.AddData(fName, data);
            }

            int nByteArrayFields = br.ReadInt32();

            for (int i = 0; i < nByteArrayFields; i++)
            {
                string fName    = br.ReadString();
                int    nEntries = br.ReadInt32();
                byte[] data     = new byte[nEntries];
                for (int j = 0; j < nEntries; j++)
                {
                    data[j] = br.ReadByte();
                }
                e.AddData(fName, data);
            }


            int nIntFields = br.ReadInt32();

            for (int i = 0; i < nIntFields; i++)
            {
                string fName = br.ReadString();
                int    data  = br.ReadInt32();
                e.AddData(fName, data);
            }

            int nIntArrayFields = br.ReadInt32();

            for (int i = 0; i < nIntArrayFields; i++)
            {
                string fName    = br.ReadString();
                int    nEntries = br.ReadInt32();
                int[]  data     = new int[nEntries];
                for (int j = 0; j < nEntries; j++)
                {
                    data[j] = br.ReadInt32();
                }
                e.AddData(fName, data);
            }


            int nFloatFields = br.ReadInt32();

            for (int i = 0; i < nFloatFields; i++)
            {
                string fName = br.ReadString();
                float  data  = br.ReadSingle();
                e.AddData(fName, data);
            }

            int nFloatArrayFields = br.ReadInt32();

            for (int i = 0; i < nFloatArrayFields; i++)
            {
                string  fName    = br.ReadString();
                int     nEntries = br.ReadInt32();
                float[] data     = new float[nEntries];
                for (int j = 0; j < nEntries; j++)
                {
                    data[j] = br.ReadSingle();
                }
                e.AddData(fName, data);
            }


            int nStringFields = br.ReadInt32();

            for (int i = 0; i < nStringFields; i++)
            {
                string fName = br.ReadString();
                string data  = br.ReadString();
                e.AddData(fName, data);
            }

            int nStringArrayFields = br.ReadInt32();

            for (int i = 0; i < nStringArrayFields; i++)
            {
                string   fName    = br.ReadString();
                int      nEntries = br.ReadInt32();
                string[] data     = new string[nEntries];
                for (int j = 0; j < nEntries; j++)
                {
                    data[j] = br.ReadString();
                }
                e.AddData(fName, data);
            }

            return(e);
        }
Exemplo n.º 8
0
        private void AddTrackerEvents(ref List <VREvent> eventList)
        {
            float x = Input.mousePosition.x;
            float y = Input.mousePosition.y;

            // first time through
            if (float.IsNaN(lastx))
            {
                lastx = x;
                lasty = y;
                return;
            }

            if (Input.GetKeyDown("1"))
            {
                curTracker = 0;
            }
            else if (Input.GetKeyDown("2"))
            {
                curTracker = 1;
            }

            if (Input.GetKey("x"))
            {
                float angle = 0.1f * (x - lastx);
                if (curTracker == 0)
                {
                    tracker1Rot = Quaternion.AngleAxis(angle, new Vector3(1f, 0f, 0f)) * tracker1Rot;
                }
                else if (curTracker == 1)
                {
                    tracker2Rot = Quaternion.AngleAxis(angle, new Vector3(1f, 0f, 0f)) * tracker2Rot;
                }
            }
            else if (Input.GetKey("y"))
            {
                float angle = 0.1f * (x - lastx);
                if (curTracker == 0)
                {
                    tracker1Rot = Quaternion.AngleAxis(angle, new Vector3(0f, 1f, 0f)) * tracker1Rot;
                }
                else if (curTracker == 1)
                {
                    tracker2Rot = Quaternion.AngleAxis(angle, new Vector3(0f, 1f, 0f)) * tracker2Rot;
                }
            }
            else if (Input.GetKey("z"))
            {
                float angle = 0.1f * (x - lastx);
                if (curTracker == 0)
                {
                    tracker1Rot = Quaternion.AngleAxis(angle, new Vector3(0f, 0f, 1f)) * tracker1Rot;
                }
                else if (curTracker == 1)
                {
                    tracker2Rot = Quaternion.AngleAxis(angle, new Vector3(0f, 0f, 1f)) * tracker2Rot;
                }
            }
            else if (Input.GetKey("left shift"))
            {
                float depth = 0.005f * (y - lasty);
                if (curTracker == 0)
                {
                    tracker1Pos += depth * Camera.main.transform.forward;
                }
                else if (curTracker == 1)
                {
                    tracker2Pos += depth * Camera.main.transform.forward;
                }
            }
            else
            {
                Ray   ray  = Camera.main.ScreenPointToRay(new Vector3(x, y, 0f));
                Plane p    = new Plane();
                float dist = 0.0f;
                if (curTracker == 0)
                {
                    p.SetNormalAndPosition(-Camera.main.transform.forward, tracker1Pos);
                    if (p.Raycast(ray, out dist))
                    {
                        tracker1Pos = ray.GetPoint(dist);
                    }
                }
                else if (curTracker == 1)
                {
                    p.SetNormalAndPosition(-Camera.main.transform.forward, tracker2Pos);
                    if (p.Raycast(ray, out dist))
                    {
                        tracker2Pos = ray.GetPoint(dist);
                    }
                }
            }

            // for fake traker 1
            Matrix4x4 m1 = Matrix4x4.TRS(tracker1Pos, tracker1Rot, Vector3.one);

            float[] d1 = VRConvert.ToFloatArray(m1);
            VREvent e1 = new VREvent(fakeTracker1Event);

            e1.AddData("EventType", "TrackerMove");
            e1.AddData("Transform", d1);
            eventList.Add(e1);

            // for fake traker 2
            Matrix4x4 m2 = Matrix4x4.TRS(tracker2Pos, tracker2Rot, Vector3.one);

            float[] d2 = VRConvert.ToFloatArray(m2);
            VREvent e2 = new VREvent(fakeTracker2Event);

            e2.AddData("EventType", "TrackerMove");
            e2.AddData("Transform", d2);
            eventList.Add(e2);

            //
            this.lastx = x;
            this.lasty = y;
        }
Exemplo n.º 9
0
        // Update is called once per frame
        void Update()
        {
            // update the trackers only once per frame
            if (lastAnalogUpdateFrame != Time.frameCount)
            {
                UpdateAnalogs();
                lastAnalogUpdateFrame = Time.frameCount;
            }
            analogData = (AnalogData)Marshal.PtrToStructure(analogDataPointer, typeof(AnalogData));

            if (!Mathf.Approximately((float)analogData.state, lastAnalogState))
            {
                lastAnalogState = (float)analogData.state;

                VREvent e = new VREvent(eventName);
                e.AddData("EventType", "AnalogUpdate");
                e.AddData("AnalogValue", (float)analogData.state);
                pendingEvents.Add(e);

                if (applyUpdatesToGameObject)
                {
                    float speedThisFrame = speed * Time.deltaTime * (float)analogData.state;

                    if (movementType == MovementType.TRANSLATE)
                    {
                        Vector3 position = transform.localPosition;
                        if (axis == Axis.X)
                        {
                            position.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            position.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            position.z += speedThisFrame;
                        }
                        else
                        {
                            position.x += speedThisFrame;
                            position.y += speedThisFrame;
                            position.z += speedThisFrame;
                        }

                        transform.localPosition = position;
                    }
                    else if (movementType == MovementType.ROTATE)
                    {
                        Quaternion newRotation = Quaternion.identity;
                        Vector3    newAngles   = newRotation.eulerAngles;

                        if (axis == Axis.X)
                        {
                            newAngles.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            newAngles.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            newAngles.z += speedThisFrame;
                        }
                        else
                        {
                            newAngles.x += speedThisFrame;
                            newAngles.y += speedThisFrame;
                            newAngles.z += speedThisFrame;
                        }

                        if (newAngles.x > 360)
                        {
                            newAngles.x %= 360;
                        }

                        if (newAngles.y > 360)
                        {
                            newAngles.y %= 360;
                        }

                        if (newAngles.z > 360)
                        {
                            newAngles.z %= 360;
                        }

                        newRotation.eulerAngles = newAngles;


                        Quaternion rotation = transform.localRotation;
                        rotation = rotation * newRotation;
                        transform.localRotation = rotation;
                    }
                    else if (movementType == MovementType.SCALE)
                    {
                        Vector3 scale = transform.localScale;
                        if (axis == Axis.X)
                        {
                            scale.x += speedThisFrame;
                        }
                        else if (axis == Axis.Y)
                        {
                            scale.y += speedThisFrame;
                        }
                        else if (axis == Axis.Z)
                        {
                            scale.z += speedThisFrame;
                        }
                        else
                        {
                            scale.x += speedThisFrame;
                            scale.y += speedThisFrame;
                            scale.z += speedThisFrame;
                        }

                        transform.localScale = scale;
                    }
                }
            }
        }