/// <summary> /// Remove a {@link TETCSharpClient.IGazeListener} from the TET C# client. /// </summary> /// <returns>True if succesfully removed, false otherwise</returns> /// <param name="listener"/>The {@link TETCSharpClient.IGazeListener} instance to remove</param> public bool RemoveGazeListener(IGazeListener listener) { bool result = false; lock (((ICollection)gazeListeners).SyncRoot) { if (gazeListeners.Contains(listener)) { result = gazeListeners.Remove(listener); } if (gazeListeners.Count == 0) { if (null != gazeBroadcaster) { gazeBroadcaster.Stop(); gazeBroadcaster = null; } lock (((ICollection)queueGazeData).SyncRoot) { queueGazeData.Clear(); } } } return(result); }
/// <summary> /// Checkes if a given instance of {@link TETCSharpClient.IGazeListener} is currently attached. /// </summary> /// <returns>True if already attached, false otherwise</returns> public bool HasGazeListener(IGazeListener listener) { bool result = false; lock (((ICollection)gazeListeners).SyncRoot) { result = gazeListeners.Contains(listener); } return(result); }
internal static void HandleOnGazeUpdate(Object stateInfo) { IGazeListener listener = null; try { Object[] objs = (Object[])stateInfo; listener = (IGazeListener)objs[0]; GazeData gaze = (GazeData)objs[1]; listener.OnGazeUpdate(gaze); } catch (Exception e) { Debug.WriteLine("Exception while calling IGazeListener.OnGazeUpdate() on listener " + listener + ": " + e.Message); } }
//----------------------------------------------------------- /// <summary> /// Function to add listener to array of listeners /// </summary> /// <param name="Event_Type">Event to Listen for</param> /// <param name="Listener">Object to listen for event</param> public void AddListener(EVENT_TYPE Event_Type, IGazeListener Listener) { //List of listeners for this event List <IGazeListener> ListenList = null; // Check existing event type key. If exists, add to list if (Listeners.TryGetValue(Event_Type, out ListenList)) { //List exists, so add new item ListenList.Add(Listener); return; } //Otherwise create new list as dictionary key ListenList = new List <IGazeListener>(); ListenList.Add(Listener); Listeners.Add(Event_Type, ListenList); }
/// <summary> /// Adds a {@link TETCSharpClient.IGazeListener} to the TET C# client. This listener /// will recieve {@link TETCSharpClient.Data.GazeData} updates when available /// </summary> /// <param name="listener"/>The {@link TETCSharpClient.IGazeListener} instance to add</param> public void AddGazeListener(IGazeListener listener) { if (null != listener) { lock (((ICollection)gazeListeners).SyncRoot) { if (gazeListeners.Count == 0) { //init wait handles events = new WaitHandleWrap(); //init broadcasting routines, gazeBroadcaster = new GazeBroadcaster(queueGazeData, gazeListeners, events); gazeBroadcaster.Start(); } if (!gazeListeners.Contains(listener)) { gazeListeners.Add(listener); } } } }
/// <summary> /// Checkes if a given instance of {@link TETCSharpClient.IGazeListener} is currently attached. /// </summary> /// <returns>True if already attached, false otherwise</returns> public bool HasGazeListener(IGazeListener listener) { bool result = false; lock (((ICollection)gazeListeners).SyncRoot) { result = gazeListeners.Contains(listener); } return result; }
/// <summary> /// Adds a {@link TETCSharpClient.IGazeListener} to the TET C# client. This listener /// will recieve {@link TETCSharpClient.Data.GazeData} updates when available /// </summary> /// <param name="listener"/>The {@link TETCSharpClient.IGazeListener} instance to add</param> public void AddGazeListener(IGazeListener listener) { if (null != listener) { lock (((ICollection)gazeListeners).SyncRoot) { if (gazeListeners.Count == 0) { //init wait handles events = new WaitHandleWrap(); //init broadcasting routines, gazeBroadcaster = new GazeBroadcaster(queueGazeData, gazeListeners, events); gazeBroadcaster.Start(); } if (!gazeListeners.Contains(listener)) gazeListeners.Add(listener); } } }
/// <summary> /// Remove a {@link TETCSharpClient.IGazeListener} from the TET C# client. /// </summary> /// <returns>True if succesfully removed, false otherwise</returns> /// <param name="listener"/>The {@link TETCSharpClient.IGazeListener} instance to remove</param> public bool RemoveGazeListener(IGazeListener listener) { bool result = false; lock (((ICollection)gazeListeners).SyncRoot) { if (gazeListeners.Contains(listener)) result = gazeListeners.Remove(listener); if (gazeListeners.Count == 0) { if (null != gazeBroadcaster) { gazeBroadcaster.Stop(); gazeBroadcaster = null; } lock (((ICollection)queueGazeData).SyncRoot) { queueGazeData.Clear(); } } } return result; }
/// <summary> /// Remove a <see cref="TETCSharpClient.IGazeListener"/> from the TET C# client. /// </summary> /// <returns>True if succesfully removed, false otherwise</returns> /// <param name="listener">The <see cref="TETCSharpClient.IGazeListener"/> instance to remove</param> public bool RemoveGazeListener(IGazeListener listener) { bool result = false; if (null != listener) { lock (gazeListeners) { if (gazeListeners.Contains(listener)) result = gazeListeners.Remove(listener); if (gazeListeners.Count == 0) { if (null != gazeBroadcaster) { gazeBroadcaster.Stop(); gazeBroadcaster = null; } } } } return result; }
/// <summary> /// Checkes if a given instance of <see cref="TETCSharpClient.IGazeListener"/> is currently attached. /// </summary> /// <returns>True if already attached, false otherwise</returns> public bool HasGazeListener(IGazeListener listener) { bool result = false; if (null != listener) { result = gazeListeners.Contains(listener); } return result; }
/// <summary> /// Adds a <see cref="TETCSharpClient.IGazeListener"/> to the TET C# client. This listener /// will recieve <see cref="TETCSharpClient.Data.GazeData"/> updates when available /// </summary> /// <param name="listener">The <see cref="TETCSharpClient.IGazeListener"/> instance to add</param> public void AddGazeListener(IGazeListener listener) { if (null != listener) { lock (gazeListeners) { if (gazeListeners.Count == 0) { //init broadcasting routines gazeBroadcaster = new GazeBroadcaster(gazeQueue, gazeListeners); gazeBroadcaster.Start(); } if (!gazeListeners.Contains(listener)) gazeListeners.Add(listener); } } }
void Update() { if (PupilTools.IsConnected && PupilTools.IsGazing) { _gazePointLeft = PupilData._2D.GetEyePosition(_sceneCamera, PupilData.leftEyeID); _gazePointRight = PupilData._2D.GetEyePosition(_sceneCamera, PupilData.rightEyeID); _gazePointCenter = PupilData._2D.GazePosition; Vector3 gazeTargetPos = new Vector3(_gazePointCenter.x, _gazePointCenter.y, 10.0f); _viewportPoint = Vector3.Lerp(_viewportPoint, gazeTargetPos, 30.0f * Time.deltaTime); } else { //Vector3 gazeNoise = new Vector3(Random.Range(-0.06f, 0.06f), Random.Range(-0.06f, 0.06f), 0); if (GazeEmulate) { Vector3 tmpViewPort = Input.mousePosition; tmpViewPort = new Vector3(tmpViewPort.x / Screen.currentResolution.width, tmpViewPort.y / Screen.currentResolution.height, 10); _viewportPoint = Vector3.Lerp(_viewportPoint, tmpViewPort, 250.0f * Time.deltaTime); } if (NoEmulate) { GazeEmulate = false; _viewportPoint = _standardViewportPoint; } //else //_viewportPoint = Vector3.Lerp(_viewportPoint, _standardViewportPoint + gazeNoise, 25.0f * Time.deltaTime); } if (Input.GetKeyUp(KeyCode.L)) { _heading.enabled = !_heading.enabled; } _heading.SetPosition(0, _sceneCamera.transform.position - _sceneCamera.transform.up); float thickness = 1.0f; Ray ray = _sceneCamera.ViewportPointToRay(_viewportPoint); RaycastHit hit; if (Physics.SphereCast(ray, thickness, out hit, Mathf.Infinity, layerMask)) { _gazeWorldPosition = hit.point; if (hit.transform.GetComponent <IGazeListener>() != null) { IGazeListener listener = hit.transform.GetComponent <IGazeListener>(); listener.OnEvent(EVENT_TYPE.ON_EYE_INTERACTION, this, null); if (_currentListener != null && _currentListener != listener) { try { _currentListener.OnEvent(EVENT_TYPE.ON_EYE_STOP_INTERACTION, this, null); } catch { } } _currentListener = listener; } else { if (_currentListener != null) { try { _currentListener.OnEvent(EVENT_TYPE.ON_EYE_STOP_INTERACTION, this, null); } catch { } _currentListener = null; } } _heading.SetPosition(1, hit.point); } else { _gazeWorldPosition = Vector3.positiveInfinity; _heading.SetPosition(1, ray.origin + ray.direction * 50f); if (_currentListener != null) { try { _currentListener.OnEvent(EVENT_TYPE.ON_EYE_STOP_INTERACTION, this, null); } catch { } _currentListener = null; } } }