Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        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);
            }
        }
Example #4
0
        //-----------------------------------------------------------
        /// <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);
        }
Example #5
0
        /// <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;
        }
Example #9
0
        /// <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;
        }
Example #10
0
        /// <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;
        }
Example #11
0
        /// <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);
                }
            }
        }
Example #12
0
        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;
                }
            }
        }