예제 #1
0
        public override void Calibrate(CalibrationResultHandler callback)
        {
            IsCalibrated = false;

            DebugLog.Info("EyeTribe: Start calibration");
            UnityCalibrationRunner.StartCalibration(
                CalibrationPointSampleDuration,
                CalibrationPoints,
                (object sender, TETControls.Calibration.CalibrationRunnerEventArgs e) =>
            {
                IsCalibrated = e.CalibrationResult.Result;
                if (IsCalibrated)
                {
                    GazeManager.Instance.AddGazeListener(this);
                }

                Dictionary <string, object> calibrationProperties = new Dictionary <string, object>();
                calibrationProperties["Result"]                  = e.Result.ToString();
                calibrationProperties["Rating"]                  = e.Rating;
                calibrationProperties["AverageErrorDegree"]      = e.CalibrationResult.AverageErrorDegree;
                calibrationProperties["AverageErrorDegreeLeft"]  = e.CalibrationResult.AverageErrorDegreeLeft;
                calibrationProperties["AverageErrorDegreeRight"] = e.CalibrationResult.AverageErrorDegreeRight;

                callback(IsCalibrated, e.Message, calibrationProperties);
            });
        }
예제 #2
0
        public override void Disconnect()
        {
            UnityCalibrationRunner.Abort();

            GazeManager.Instance.RemoveGazeListener(this);
            GazeManager.Instance.RemoveConnectionStateListener(this);

            DebugLog.Info("Eye Tracker: Disconnect...");
            GazeManager.Instance.Deactivate();
            DebugLog.Info("Disconnnected from EyeTracker: {0}:{1}", ServerRecvAddress, ServerRecvPort);
            IsConnected = false;
        }
    public static UnityCalibrationRunner StartCalibration(float calibrationSampleDuration, int calibrationPoints, EventHandler <CalibrationRunnerEventArgs> resultHandler)
    {
        try
        {
            if (instance != null)
            {
                throw new Exception("Calibration already in progress. Abort to retry.");
            }

            CheckTrackerState(GazeManager.Instance.Trackerstate);

            GameObject gameObject = null;

            UnityEngine.Object prefab = Resources.Load(CalibrationRunnerPrefabName);
            if (prefab)
            {
                gameObject = Instantiate(prefab) as GameObject;
            }
            else
            {
                throw new Exception(string.Format("Unable to load {0} prefab from Resources", CalibrationRunnerPrefabName));
            }

            instance = (gameObject != null ? gameObject.GetComponent <UnityCalibrationRunner>() : null);
            if (instance != null)
            {
                instance.OnResult += resultHandler;
                instance.CalibrationSampleDuration = calibrationSampleDuration;
                instance.PointCount = calibrationPoints;
            }
            else
            {
                throw new Exception(string.Format("Unable to find {0} component on {1} prefab", typeof(UnityCalibrationRunner).Name, CalibrationRunnerPrefabName));
            }
        }
        catch (Exception e)
        {
            resultHandler(null, new CalibrationRunnerEventArgs(
                              CalibrationRunnerResult.Error,
                              e.Message));
        }

        return(instance);
    }
 public void OnDestroy()
 {
     GazeManager.Instance.RemoveTrackerStateListener(this);
     GazeManager.Instance.CalibrationAbort();
     instance = null;
 }