private void OnDisable() { CognitiveVR.Core.InitEvent -= OnCoreInitialize; CognitiveVR.Core.TickEvent -= Core_TickEvent; DynamicManager.SetTransform(DataId, transform); CognitiveVR.DynamicManager.RemoveDynamicObject(DataId); }
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); }
/// <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); }
/// <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); }
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); } }
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); } }
/// <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); }
/// <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); }
/// <summary> /// manually record position and rotation on this dynamic object /// </summary> public void RecordSnapshot() { DynamicManager.SetDirty(DataId); }
//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); } }
//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); } }
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(); } } }