void OnDestroy()
 {
     if (EyeTracker.Active)
     {
         EyeTracker.Stop();
     }
 }
        public override void OnInspectorGUI()
        {
            base.DrawDefaultInspector();

            eyeTracker = ((PimaxEyeTracker)target).EyeTracker;
            if (eyeTracker == null)
            {
                return;
            }

            if (eyeTracker.Active)
            {
                Action DrawEyePreview = () => {
                    var eyePreviewSize        = 200.0f;
                    var eyeBlinkPreviewHeight = 50.0f;
                    var eyeSize = 20.0f;

                    GUILayout.BeginHorizontal();
                    Rect rtBackgroundLeft = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyePreviewSize + eyeSize));
                    GUILayout.Space(80);
                    Rect rtBackgroundRight = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyePreviewSize + eyeSize));
                    GUILayout.EndHorizontal();

                    GUILayout.BeginHorizontal();
                    Rect rtBlinkBackgroundLeft = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyeBlinkPreviewHeight));
                    GUILayout.Space(80);
                    Rect rtBlinkBackgroundRight = GUILayoutUtility.GetRect(GUIContent.none, GUI.skin.box, GUILayout.MinWidth(eyePreviewSize + eyeSize), GUILayout.MinHeight(eyeBlinkPreviewHeight));
                    GUILayout.EndHorizontal();

                    Rect rtEyeLeft  = new Rect(rtBackgroundLeft.x + (Mathf.InverseLerp(-1.0f, 1.0f, eyeTracker.LeftEye.Expression.PupilCenter.x) * eyePreviewSize), rtBackgroundLeft.y + (Mathf.InverseLerp(-1.0f, 1.0f, -eyeTracker.LeftEye.Expression.PupilCenter.y) * eyePreviewSize), 20, 20);
                    Rect rtEyeRight = new Rect(rtBackgroundRight.x + (Mathf.InverseLerp(-1.0f, 1.0f, eyeTracker.RightEye.Expression.PupilCenter.x) * eyePreviewSize), rtBackgroundRight.y + (Mathf.InverseLerp(-1.0f, 1.0f, -eyeTracker.RightEye.Expression.PupilCenter.y) * eyePreviewSize), 20, 20);

                    //Rect rtEyeLeft = new Rect(rtBackgroundLeft.x + (eyeTracker.LeftEye.PupilCenter.x * eyePreviewSize), rtBackgroundLeft.y + (eyeTracker.LeftEye.PupilCenter.y * eyePreviewSize), 20, 20);
                    //Rect rtEyeRight = new Rect(rtBackgroundRight.x + (eyeTracker.RightEye.PupilCenter.x * eyePreviewSize), rtBackgroundRight.y + (eyeTracker.RightEye.PupilCenter.y * eyePreviewSize), 20, 20);

                    var oldColor = GUI.backgroundColor;
                    GUI.backgroundColor = Color.white;

                    GUI.Box(rtBackgroundLeft, "");
                    GUI.Box(rtBackgroundRight, "");

                    GUI.backgroundColor = Color.red;

                    GUI.Box(rtEyeLeft, "");
                    GUI.Box(rtEyeRight, "");

                    if (eyeTracker.LeftEye.Expression.Openness <= 0.2f)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    else if (eyeTracker.LeftEye.Expression.Openness >= 0.8f)
                    {
                        GUI.backgroundColor = Color.grey;
                    }
                    else
                    {
                        GUI.backgroundColor = Color.yellow;
                    }

                    GUI.Box(rtBlinkBackgroundLeft, "");

                    if (eyeTracker.RightEye.Expression.Openness <= 0.2f)
                    {
                        GUI.backgroundColor = Color.green;
                    }
                    else if (eyeTracker.RightEye.Expression.Openness >= 0.8f)
                    {
                        GUI.backgroundColor = Color.grey;
                    }
                    else
                    {
                        GUI.backgroundColor = Color.yellow;
                    }

                    GUI.Box(rtBlinkBackgroundRight, "");

                    GUI.backgroundColor = oldColor;
                };

                if (GUILayout.Button("Stop Eye Tracking"))
                {
                    eyeTracker.Stop();
                }

                EditorGUILayout.LabelField("Eye Tracking Preview", EditorStyles.boldLabel);
                DrawEyePreview();
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Expression Metrics", EditorStyles.boldLabel);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Center", EditorStyles.boldLabel);
                EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.Expression.PupilCenter);
                EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.Expression.PupilCenter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Blink", EditorStyles.boldLabel);
                EditorGUILayout.Toggle("Left", eyeTracker.LeftEye.Expression.Blink);
                EditorGUILayout.Toggle("Right", eyeTracker.RightEye.Expression.Blink);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Openness", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Expression.Openness);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Expression.Openness);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Raw Metrics", EditorStyles.boldLabel);
                EditorGUILayout.Space();

                EditorGUILayout.TextField("Timestamp", eyeTracker.Timestamp.ToString());
                EditorGUILayout.TextField("Recommended Eye", eyeTracker.RecommendedEye.Eye.ToString());
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze", EditorStyles.boldLabel);
                EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.Gaze);
                EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.Gaze);
                EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.Gaze);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze (Raw)", EditorStyles.boldLabel);
                EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.GazeRaw);
                EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.GazeRaw);
                EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.GazeRaw);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze (Smooth)", EditorStyles.boldLabel);
                EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.GazeSmooth);
                EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.GazeSmooth);
                EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.GazeSmooth);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze Origin", EditorStyles.boldLabel);
                EditorGUILayout.Vector3Field("Left", eyeTracker.LeftEye.GazeOrigin);
                EditorGUILayout.Vector3Field("Right", eyeTracker.RightEye.GazeOrigin);
                EditorGUILayout.Vector3Field("Recommended", eyeTracker.RecommendedEye.GazeSmooth);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze Direction", EditorStyles.boldLabel);
                EditorGUILayout.Vector3Field("Left", eyeTracker.LeftEye.GazeDirection);
                EditorGUILayout.Vector3Field("Right", eyeTracker.RightEye.GazeDirection);
                EditorGUILayout.Vector3Field("Recommended", eyeTracker.RecommendedEye.GazeDirection);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Gaze Reliability", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.GazeReliability);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.GazeReliability);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.GazeReliability);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Center", EditorStyles.boldLabel);
                EditorGUILayout.Vector2Field("Left", eyeTracker.LeftEye.PupilCenter);
                EditorGUILayout.Vector2Field("Right", eyeTracker.RightEye.PupilCenter);
                EditorGUILayout.Vector2Field("Recommended", eyeTracker.RecommendedEye.PupilCenter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Distance", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilDistance);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilDistance);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilDistance);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Diameter (Major)", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMajorDiameter);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMajorDiameter);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMajorDiameter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Unit Diameter (Major)", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMajorUnitDiameter);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMajorUnitDiameter);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMajorUnitDiameter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Diameter (Minor)", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMinorDiameter);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMinorDiameter);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMinorDiameter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Pupil Unit Diameter (Minor)", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.PupilMinorUnitDiameter);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.PupilMinorUnitDiameter);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.PupilMinorUnitDiameter);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Blink", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Blink);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Blink);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.Blink);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Openness", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.Openness);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.Openness);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.Openness);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Upper Eyelid", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.UpperEyelid);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.UpperEyelid);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.UpperEyelid);
                EditorGUILayout.Space();

                EditorGUILayout.LabelField("Lower Eyelid", EditorStyles.boldLabel);
                EditorGUILayout.FloatField("Left", eyeTracker.LeftEye.LowerEyelid);
                EditorGUILayout.FloatField("Right", eyeTracker.RightEye.LowerEyelid);
                EditorGUILayout.FloatField("Recommended", eyeTracker.RecommendedEye.LowerEyelid);
            }
            else
            {
                if (GUILayout.Button("Start Eye Tracking"))
                {
                    eyeTracker.Start();
                }
            }
        }