Example #1
0
        private void OnDisable()
        {
            CognitiveVR.Core.InitEvent -= OnCoreInitialize;
            CognitiveVR.Core.TickEvent -= Core_TickEvent;

            DynamicManager.SetTransform(DataId, transform);

            CognitiveVR.DynamicManager.RemoveDynamicObject(DataId);
        }
Example #2
0
        public void RecordSnapshot(Dictionary <string, object> properties)
        {
            List <KeyValuePair <string, object> > temp = new List <KeyValuePair <string, object> >(properties.Count);

            foreach (var prop in properties)
            {
                temp.Add(new KeyValuePair <string, object>(prop.Key, prop.Value));
            }
            DynamicManager.SetProperties(DataId, temp);
        }
Example #3
0
 /// <summary>
 /// returns the Id of the Dynamic Object
 /// </summary>
 /// <returns></returns>
 public string GetId()
 {
     if (DynamicManager.IsDataActive(DataId))
     {
         return(DataId);
     }
     if (!string.IsNullOrEmpty(CustomId))
     {
         return(CustomId);
     }
     return(string.Empty);
 }
Example #4
0
        /// <summary>
        /// Starts a CognitiveVR session. Records hardware info, creates network manager
        /// </summary>
        public static Error Init(Transform HMDCamera)
        {
            _hmd = HMDCamera;
            CognitiveStatics.Initialize();
            CustomEvent.Initialize();

            Error error = Error.None;

            // Have we already initialized CognitiveVR?
            if (IsInitialized)
            {
                Util.logWarning("CognitiveVR has already been initialized, no need to re-initialize");
                error = Error.AlreadyInitialized;
            }

            if (error == Error.None)
            {
                SetSessionProperty("c3d.app.name", Application.productName);
                SetSessionProperty("c3d.app.version", Application.version);
                SetSessionProperty("c3d.app.engine.version", Application.unityVersion);
                SetSessionProperty("c3d.device.type", SystemInfo.deviceType.ToString());
                SetSessionProperty("c3d.device.cpu", SystemInfo.processorType);
                SetSessionProperty("c3d.device.model", SystemInfo.deviceModel);
                SetSessionProperty("c3d.device.gpu", SystemInfo.graphicsDeviceName);
                SetSessionProperty("c3d.device.os", SystemInfo.operatingSystem);
                SetSessionProperty("c3d.device.memory", Mathf.RoundToInt(SystemInfo.systemMemorySize / 1024));

                DeviceId = UnityEngine.SystemInfo.deviceUniqueIdentifier;
                SetSessionProperty("c3d.deviceid", DeviceId);

                //initialize Network Manager early, before gameplay actually starts
                var temp = NetworkManager.Sender;

                DynamicManager.Initialize();
                DynamicObjectCore.Initialize();

                _timestamp = Util.Timestamp();
                //set session timestamp
                if (string.IsNullOrEmpty(_sessionId))
                {
                    _sessionId = (int)SessionTimeStamp + "_" + DeviceId;
                }

                IsInitialized = true;
            }

            return(error);
        }
Example #5
0
        private void LateUpdate()
        {
            //assuming controller updates happen before/in update loop?

            if (Time.time > nextUpdateTime)
            {
                RecordAnalogInputs();
                nextUpdateTime = Time.time + UpdateRate;
            }

            if (CurrentButtonStates.Count > 0)
            {
                List <ButtonState> copy = new List <ButtonState>(CurrentButtonStates.Count);
                for (int i = 0; i < CurrentButtonStates.Count; i++)
                {
                    copy.Add(CurrentButtonStates[i]);
                }
                CurrentButtonStates.Clear();
                DynamicManager.RecordControllerEvent(dynamic.DataId, copy);
            }
        }
Example #6
0
        private void Update()
        {
            if (controllerDynamic == null)
            {
                return;
            }
            //thumbstick button
            if (SvrInput.Controller.GetButtonDown(SvrController.svrControllerButton.PrimaryThumbstick))
            {
                OnButtonChanged(controllerDynamic, true, "thumbstick", true, CurrentButtonStates);
            }
            if (SvrInput.Controller.GetButtonUp(SvrController.svrControllerButton.PrimaryThumbstick))
            {
                OnButtonChanged(controllerDynamic, true, "thumbstick", false, CurrentButtonStates);
            }

            //trigger
            if (SvrInput.Controller.GetButtonDown(SvrController.svrControllerButton.PrimaryIndexTrigger))
            {
                OnButtonChanged(controllerDynamic, true, "trigger", true, CurrentButtonStates);
            }
            if (SvrInput.Controller.GetButtonUp(SvrController.svrControllerButton.PrimaryIndexTrigger))
            {
                OnButtonChanged(controllerDynamic, true, "trigger", false, CurrentButtonStates);
            }
            if (CurrentButtonStates.Count > 0)
            {
                List <ButtonState> copy = new List <ButtonState>(CurrentButtonStates.Count);
                for (int i = 0; i < CurrentButtonStates.Count; i++)
                {
                    copy[i].Copy(CurrentButtonStates[i]);
                }
                CurrentButtonStates.Clear();

                DynamicManager.RecordControllerEvent(controllerDynamic.DataId, copy);
            }
        }
Example #7
0
 /// <summary>
 /// Alternate method to end a Custom Event on a specific Dynamic Object. If the event does not exist, creates and immediately ends the event
 /// </summary>
 /// <param name="engagementName">the name of the Event to end</param>
 /// <param name="uniqueEngagementId">identifies the event to end, regardless of name</param>
 /// <param name="properties">any properties to add to this event before it ends</param>
 public void EndEngagement(string engagementName, string uniqueEngagementId = null, List <KeyValuePair <string, object> > properties = null)
 {
     DynamicManager.EndEngagement(GetId(), engagementName, uniqueEngagementId, properties);
 }
Example #8
0
 /// <summary>
 /// manually record position and rotation and properties on this dynamic object
 /// </summary>
 public void RecordSnapshot(List <KeyValuePair <string, object> > properties)
 {
     DynamicManager.SetProperties(DataId, properties);
 }
Example #9
0
 /// <summary>
 /// manually record position and rotation on this dynamic object
 /// </summary>
 public void RecordSnapshot()
 {
     DynamicManager.SetDirty(DataId);
 }
Example #10
0
        //updates for interaction hand implementation
        private void Update()
        {
            if (ControllerDevice == null)
            {
                return;
            }

            //menu
            if (ControllerDevice.GetPressDown(Varjo.Valve.VR.EVRButtonId.k_EButton_ApplicationMenu))
            {
                OnButtonChanged(dynamic, isRight, "vive_menubtn", true, CurrentButtonStates);
            }
            if (ControllerDevice.GetPressUp(Varjo.Valve.VR.EVRButtonId.k_EButton_ApplicationMenu))
            {
                OnButtonChanged(dynamic, isRight, "vive_menubtn", false, CurrentButtonStates);
            }

            //home ?? doesn't record event correctly
            //if (ControllerDevice.GetPressDown(EVRButtonId.k_EButton_Dashboard_Back))
            //    OnButtonChanged(dynamic, isRight, "vive_homebtn", true);
            //if (ControllerDevice.GetPressUp(EVRButtonId.k_EButton_Dashboard_Back))
            //    OnButtonChanged(dynamic, isRight, "vive_homebtn", false);

            //grip
            if (ControllerDevice.GetPressDown(Varjo.Valve.VR.EVRButtonId.k_EButton_Grip))
            {
                OnButtonChanged(dynamic, isRight, "vive_grip", true, CurrentButtonStates);
            }
            if (ControllerDevice.GetPressUp(Varjo.Valve.VR.EVRButtonId.k_EButton_Grip))
            {
                OnButtonChanged(dynamic, isRight, "vive_grip", false, CurrentButtonStates);
            }

            {
                //touchpad touched/pressed
                if (ControllerDevice.GetPressDown(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
                {
                    CurrentTouchpadState = TouchpadState.Press;
                    var     touchpadaxis  = ControllerDevice.GetAxis(Varjo.Valve.VR.EVRButtonId.k_EButton_Axis0);
                    var     x             = touchpadaxis.x;
                    var     y             = touchpadaxis.y;
                    int     force         = 100;
                    Vector3 currentVector = new Vector3(x, y, force);
                    OnVectorChanged(dynamic, isRight, "vive_touchpad", force, touchpadaxis, CurrentButtonStates);
                    LastTouchpadVector = currentVector;
                }
                else if (ControllerDevice.GetTouchDown(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
                {
                    CurrentTouchpadState = TouchpadState.Touch;
                    var     touchpadaxis  = ControllerDevice.GetAxis(Varjo.Valve.VR.EVRButtonId.k_EButton_Axis0);
                    var     x             = touchpadaxis.x;
                    var     y             = touchpadaxis.y;
                    int     force         = 50;
                    Vector3 currentVector = new Vector3(x, y, force);
                    OnVectorChanged(dynamic, isRight, "vive_touchpad", force, touchpadaxis, CurrentButtonStates);
                    LastTouchpadVector = currentVector;
                }
                else if (ControllerDevice.GetPressUp(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
                {
                    CurrentTouchpadState = TouchpadState.Touch;
                    var touchpadaxis = ControllerDevice.GetAxis(Varjo.Valve.VR.EVRButtonId.k_EButton_Axis0);
                    var x            = touchpadaxis.x;
                    var y            = touchpadaxis.y;

                    int force = 0;
                    if (ControllerDevice.GetTouch(Varjo.Valve.VR.EVRButtonId.k_EButton_Axis0))
                    {
                        force = 50;
                    }
                    Vector3 currentVector = new Vector3(x, y, force);
                    OnVectorChanged(dynamic, isRight, "vive_touchpad", force, touchpadaxis, CurrentButtonStates);
                    LastTouchpadVector = currentVector;
                }
                else if (ControllerDevice.GetTouchUp(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Touchpad))
                {
                    CurrentTouchpadState = TouchpadState.None;
                    var     touchpadaxis  = ControllerDevice.GetAxis(Varjo.Valve.VR.EVRButtonId.k_EButton_Axis0);
                    var     x             = touchpadaxis.x;
                    var     y             = touchpadaxis.y;
                    int     force         = 0;
                    Vector3 currentVector = new Vector3(x, y, force);
                    OnVectorChanged(dynamic, isRight, "vive_touchpad", force, touchpadaxis, CurrentButtonStates);
                    LastTouchpadVector = currentVector;
                }
            }

            //trigger clicked
            if (ControllerDevice.GetPressDown(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
            {
                if (LastTrigger != 100)
                {
                    var triggeramount  = ControllerDevice.GetAxis(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger).x;
                    int currentTrigger = (int)(triggeramount * 100);
                    LastTrigger = currentTrigger;
                    OnButtonChanged(dynamic, isRight, "vive_trigger", true, CurrentButtonStates);
                }
            }
            else if (ControllerDevice.GetPressUp(Varjo.Valve.VR.EVRButtonId.k_EButton_SteamVR_Trigger))
            {
                if (LastTrigger != 0)
                {
                    LastTrigger = 0;
                    OnButtonChanged(dynamic, isRight, "vive_trigger", false, CurrentButtonStates);
                }
            }

            if (Time.time > nextUpdateTime)
            {
                RecordAnalogInputs(); //should this go at the end? double inputs on triggers
                nextUpdateTime = Time.time + UpdateRate;
            }

            if (CurrentButtonStates.Count > 0)
            {
                List <ButtonState> copy = new List <ButtonState>(CurrentButtonStates.Count);

                for (int i = 0; i < CurrentButtonStates.Count; i++)
                {
                    copy.Add(CurrentButtonStates[i]); //move the reference over to the copy
                }
                CurrentButtonStates.Clear();
                DynamicManager.RecordControllerEvent(dynamic.DataId, copy);
            }
        }
Example #11
0
        //have to do polling every frame to capture inputs
        private void Update()
        {
            //right hand a
            if (OVRInput.GetDown(OVRInput.Button.One, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_abtn", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.One, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_abtn", false, CurrentRightButtonStates);
            }

            //right hand b
            if (OVRInput.GetDown(OVRInput.Button.Two, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_bbtn", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.Two, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_bbtn", false, CurrentRightButtonStates);
            }

            //left hand X
            if (OVRInput.GetDown(OVRInput.Button.One, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_xbtn", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.One, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_xbtn", false, CurrentLeftButtonStates);
            }

            //left hand y
            if (OVRInput.GetDown(OVRInput.Button.Two, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_ybtn", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.Two, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_ybtn", false, CurrentLeftButtonStates);
            }

            //left thumbrest
            if (OVRInput.GetDown(OVRInput.Touch.PrimaryThumbRest, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_thumbrest", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Touch.PrimaryThumbRest, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_thumbrest", false, CurrentLeftButtonStates);
            }

            //right thumbrest
            if (OVRInput.GetDown(OVRInput.Touch.PrimaryThumbRest, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_thumbrest", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Touch.PrimaryThumbRest, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_thumbrest", false, CurrentRightButtonStates);
            }

            //start
            if (OVRInput.GetDown(OVRInput.Button.Start, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(RightHand, true, "rift_start", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.Start, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(RightHand, true, "rift_start", false, CurrentLeftButtonStates);
            }

            //trigger buttons
            if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_trigger", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_trigger", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_trigger", false, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryIndexTrigger, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_trigger", false, CurrentRightButtonStates);
            }

            //grip
            if (OVRInput.GetDown(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_grip", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetDown(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_grip", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_grip", false, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryHandTrigger, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_grip", false, CurrentRightButtonStates);
            }


            //thumbstick buttons
            if (OVRInput.GetDown(OVRInput.Button.PrimaryThumbstick, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_joystick", true, CurrentLeftButtonStates);
            }
            if (OVRInput.GetDown(OVRInput.Button.PrimaryThumbstick, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_joystick", true, CurrentRightButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryThumbstick, OVRInput.Controller.LTouch))
            {
                OnButtonChanged(LeftHand, false, "rift_joystick", false, CurrentLeftButtonStates);
            }
            if (OVRInput.GetUp(OVRInput.Button.PrimaryThumbstick, OVRInput.Controller.RTouch))
            {
                OnButtonChanged(RightHand, true, "rift_joystick", false, CurrentRightButtonStates);
            }

            if (Time.time > nextUpdateTime)
            {
                RecordAnalogInputs();
                nextUpdateTime = Time.time + UpdateRate;
            }

            if (CurrentRightButtonStates.Count > 0)
            {
                List <ButtonState> copy = new List <ButtonState>(CurrentRightButtonStates.Count);
                for (int i = 0; i < CurrentRightButtonStates.Count; i++)
                {
                    copy.Add(CurrentRightButtonStates[i]);
                }
                CurrentRightButtonStates.Clear();

                DynamicManager.RecordControllerEvent(RightHand.DataId, copy);
            }
            if (CurrentLeftButtonStates.Count > 0)
            {
                List <ButtonState> copy = new List <ButtonState>(CurrentLeftButtonStates.Count);
                for (int i = 0; i < CurrentLeftButtonStates.Count; i++)
                {
                    copy.Add(CurrentLeftButtonStates[i]);
                }
                CurrentLeftButtonStates.Clear();

                DynamicManager.RecordControllerEvent(LeftHand.DataId, copy);
            }
        }
Example #12
0
        static IEnumerator WriteJson()
        {
            while (true)
            {
                if (!ReadyToWriteJson)
                {
                    yield return(null);
                }
                else
                {
                    int totalDataToWrite = queuedManifest.Count + queuedSnapshots.Count;
                    totalDataToWrite = Mathf.Min(totalDataToWrite, CognitiveVR_Preferences.S_DynamicExtremeSnapshotCount);

                    var builder       = new System.Text.StringBuilder(200 + 128 * totalDataToWrite);
                    int manifestCount = Mathf.Min(queuedManifest.Count, totalDataToWrite);
                    int count         = Mathf.Min(queuedSnapshots.Count, totalDataToWrite - manifestCount);

                    if (queuedSnapshots.Count - count == 0 && queuedManifest.Count - manifestCount == 0)
                    {
                        ReadyToWriteJson = false;
                    }

                    bool threadDone = true;

                    builder.Append("{");

                    //header
                    JsonUtil.SetString("userid", Core.DeviceId, builder);
                    builder.Append(",");

                    if (!string.IsNullOrEmpty(Core.LobbyId))
                    {
                        JsonUtil.SetString("lobbyId", Core.LobbyId, builder);
                        builder.Append(",");
                    }

                    JsonUtil.SetDouble("timestamp", (int)Core.SessionTimeStamp, builder);
                    builder.Append(",");
                    JsonUtil.SetString("sessionid", Core.SessionID, builder);
                    builder.Append(",");
                    JsonUtil.SetInt("part", jsonPart, builder);
                    builder.Append(",");
                    jsonPart++;
                    JsonUtil.SetString("formatversion", "1.0", builder);
                    builder.Append(",");

                    //manifest entries
                    if (manifestCount > 0)
                    {
                        builder.Append("\"manifest\":{");
                        threadDone = false;

                        if (WriteImmediate)
                        {
                            for (int i = 0; i < manifestCount; i++)
                            {
                                if (i != 0)
                                {
                                    builder.Append(',');
                                }
                                var manifestentry = queuedManifest.Dequeue();
                                SetManifestEntry(manifestentry, builder);
                            }
                            threadDone = true;
                        }
                        else
                        {
                            new System.Threading.Thread(() =>
                            {
                                for (int i = 0; i < manifestCount; i++)
                                {
                                    if (i != 0)
                                    {
                                        builder.Append(',');
                                    }
                                    var manifestentry = queuedManifest.Dequeue();
                                    SetManifestEntry(manifestentry, builder);
                                }
                                threadDone = true;
                            }).Start();

                            while (!threadDone)
                            {
                                yield return(null);
                            }
                        }

                        if (count > 0)
                        {
                            builder.Append("},");
                        }
                        else
                        {
                            builder.Append("}");
                        }
                    }

                    //snapshots
                    if (count > 0)
                    {
                        builder.Append("\"data\":[");
                        threadDone = false;
                        if (WriteImmediate)
                        {
                            for (int i = 0; i < count; i++)
                            {
                                if (i != 0)
                                {
                                    builder.Append(',');
                                }
                                var snap = queuedSnapshots.Dequeue();
                                SetSnapshot(snap, builder);
                                snap.ReturnToPool();
                            }
                            threadDone = true;
                        }
                        else
                        {
                            new System.Threading.Thread(() =>
                            {
                                for (int i = 0; i < count; i++)
                                {
                                    if (i != 0)
                                    {
                                        builder.Append(',');
                                    }
                                    var snap = queuedSnapshots.Dequeue();
                                    SetSnapshot(snap, builder);
                                    snap.ReturnToPool();
                                }
                                threadDone = true;
                            }).Start();

                            while (!threadDone)
                            {
                                yield return(null);
                            }
                        }
                        builder.Append("]");
                    }
                    builder.Append("}");

                    string s   = builder.ToString();
                    string url = CognitiveStatics.POSTDYNAMICDATA(Core.TrackingSceneId, Core.TrackingSceneVersionNumber);
                    NetworkManager.Post(url, s);
                    DynamicManager.DynamicObjectSendEvent();
                }
            }
        }