Exemplo n.º 1
0
//	void OnDestroy(){
//		pupilTracker.StopFramePublishing ();
//		pupilTracker.isOperatorMonitor = false;
    //		PupilTools.Settings.currentCamera.targetDisplay = MainCameraTargetDisplay;
//	}

    void Awake()
    {
        pupilTracker  = PupilGazeTracker.Instance;
        pupilSettings = pupilTracker.Settings;
        PupilTools.Settings.currentCamera.SetReplacementShader(CameraShader, null);
        _Instance = this;
    }
    public static void AutoRunLayout()
    {
        PupilSettings pupilSettings = PupilSettings.Instance;

        ////////////////////////////TOGGLE AUTO MODE////////////////////////////
        GUI.enabled = !Application.isPlaying;
        PupilTools.Connection.isAutorun = GUILayout.Toggle(PupilTools.Connection.isAutorun, "Auto-connect to Pupil", "Button");
        GUI.enabled = Application.isPlaying;
        if (!PupilTools.Connection.isAutorun && Application.isPlaying)
        {
            GUILayout.BeginHorizontal();
            GUI.enabled = !PupilTools.IsConnected;
            if (GUILayout.Button("Start"))
            {
                PupilGazeTracker.Instance.RunConnect();
            }
            GUI.enabled = PupilTools.IsConnected;
            if (GUILayout.Button("Stop"))
            {
                PupilGazeTracker.Instance.CloseShop();
            }
            GUILayout.EndHorizontal();
        }
        GUI.enabled = true;
        ////////////////////////////TOGGLE AUTO MODE////////////////////////////
    }
Exemplo n.º 3
0
    void Start()
    {
        Settings = PupilSettings.Instance;

        if (PupilGazeTracker._Instance == null)
        {
            PupilGazeTracker._Instance = this;
        }

#if !UNITY_WSA
        PupilData.calculateMovingAverage = false;
#endif

        PupilGazeTracker.Instance.ProjectName = Application.productName;

        PupilTools.IsConnected = false;
        PupilTools.IsIdle      = true;

        var relativeRightEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.RightEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);
        PupilTools.Calibration.rightEyeTranslation = new float[] { relativeRightEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };
        var relativeLeftEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.LeftEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);
        PupilTools.Calibration.leftEyeTranslation = new float[] { relativeLeftEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };

#if !UNITY_WSA
        RunConnect();
#endif
    }
Exemplo n.º 4
0
    void Start()
    {
        Settings = PupilSettings.Instance;

        if (PupilGazeTracker._Instance == null)
        {
            PupilGazeTracker._Instance = this;
        }

                #if !UNITY_WSA
        PupilData.calculateMovingAverage = false;
                #endif

        PupilGazeTracker.Instance.ProjectName = Application.productName;

        PupilTools.IsConnected = false;
        PupilTools.IsIdle      = true;

        PupilTools.Calibration.rightEyeTranslation = new float[] { 0, 0, 0 };
        PupilTools.Calibration.leftEyeTranslation  = new float[] { 0, 0, 0 };

                #if !UNITY_WSA
        RunConnect();
                #endif
    }
Exemplo n.º 5
0
    // Use this for initialization
    void Start()
    {
        //PupilSettings.Instance.currentCamera = Camera.main;
        settings = PupilSettings.Instance;

        if (GazePointLocation._Instance == null)
        {
            GazePointLocation._Instance = this;
        }

        var relativeRightEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.RightEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);

        PupilTools.Calibration.rightEyeTranslation = new float[] { relativeRightEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };
        var relativeLeftEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.LeftEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);

        PupilTools.Calibration.leftEyeTranslation = new float[] { relativeLeftEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };

        lEye   = new PupilMarker("LeftEye", PupilSettings.leftEyeColor);
        rEye   = new PupilMarker("RightEye", PupilSettings.rightEyeColor);
        gaze   = new PupilMarker("Gaze", Color.yellow);
        marker = new PupilMarker("Marker", Color.red);

        print(rEye.name + " pos : " + rEye.position);
        print(lEye.name + " pos : " + lEye.position);
        print(gaze.name + " pos : " + gaze.position);
        print(marker.name + " pos : " + marker.position);

        RunConnect();

        /*PupilTools.IsGazing = true;
         * PupilTools.SubscribeTo("gaze");*/
    }
Exemplo n.º 6
0
//	void OnDestroy(){
//		pupilTracker.StopFramePublishing ();
//		pupilTracker.isOperatorMonitor = false;
//		Camera.main.targetDisplay = MainCameraTargetDisplay;
//	}

    void Awake()
    {
        pupilTracker  = PupilGazeTracker.Instance;
        pupilSettings = pupilTracker.Settings;
        Camera.main.SetReplacementShader(CameraShader, null);
        _Instance = this;
    }
Exemplo n.º 7
0
    public static void SavePupilSettings(ref PupilSettings pupilSettings)
    {
#if UNITY_EDITOR
        AssetDatabase.Refresh();
        EditorUtility.SetDirty(pupilSettings);
        AssetDatabase.SaveAssets();
#endif
    }
Exemplo n.º 8
0
    void Start()
    {
//		print ("Start of pupil gaze tracker");

        Settings = PupilSettings.Instance;


        string str = PupilConversions.ReadStringFromFile("camera_intrinsics");

        PupilConversions.ReadCalibrationData(str, ref PupilData.CalibrationData);

        Settings.framePublishing.StreamCameraImages = false;
        if (Settings.framePublishing.StreamCameraImages)
        {
            Settings.framePublishing.InitializeFramePublishing();
        }

        if (PupilGazeTracker._Instance == null)
        {
            PupilGazeTracker._Instance = this;
        }

        PupilData.calculateMovingAverage = true;

        //make sure that if the toggles are on it functions as the toggle requires it
        if (isOperatorMonitor && OnOperatorMonitor == null)
        {
            OperatorMonitor.Instantiate();
        }
        //OnOperatorMonitor += DrawOperatorMonitor;
        if (Settings.debugView.active)
        {
            debugInstance.StartCalibrationDebugView();
        }

        PupilGazeTracker.Instance.ProjectName = Application.productName;

        Settings.connection.isConnected = false;
        Settings.DataProcessState       = PupilSettings.EStatus.Idle;

        var relativeRightEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.RightEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);

        Settings.calibration.rightEyeTranslation = new float[] { relativeRightEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };
        var relativeLeftEyePosition = UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.LeftEye) - UnityEngine.XR.InputTracking.GetLocalPosition(UnityEngine.XR.XRNode.CenterEye);

        Settings.calibration.leftEyeTranslation = new float[] { relativeLeftEyePosition.z *PupilSettings.PupilUnitScalingFactor, 0, 0 };

#if !UNITY_WSA
        if (Settings.connection.isAutorun)
        {
            RunConnect();
        }
#else
        RunConnect();
#endif
    }
Exemplo n.º 9
0
    public static void AutoRunLayout()
    {
        PupilSettings pupilSettings = PupilTools.Settings;

        ////////////////////////////TOGGLE AUTO MODE////////////////////////////

        PupilTools.Settings.connection.isAutorun = GUILayout.Toggle(PupilTools.Settings.connection.isAutorun, "Autorun Pupil Service", "Button");

        if (!PupilTools.Settings.connection.isAutorun && Application.isPlaying)
        {
            GUILayout.BeginHorizontal();

            if (GUILayout.Button("Start"))
            {
                Debug.Log("start button before connect");
                PupilTools.Connect();
                Debug.Log("start button after connect");

                //				if (PupilTools.Settings.connection.isLocal)
                //					PupilTools.RunServiceAtPath ();
                //
                //
                //				PupilDataReceiver.Instance.StartCoroutine (PupilDataReceiver.Instance.Connect (retry: true, retryDelay: 5f));



                //				if (PupilTools.Settings.connection.isLocal) {
                //
                //					PupilTools.RunServiceAtPath ();
                //					PupilDataReceiver.Instance.StartCoroutine (PupilDataReceiver.Instance.Connect (retry: true, retryDelay: 5f));
                //
                //				} else {
                //
                //					PupilDataReceiver.Instance.StartCoroutine (PupilDataReceiver.Instance.Connect (retry: true, retryDelay: 5f));
                //
                //				}
            }

            if (GUILayout.Button("Stop"))
            {
                PupilTools.StopEyeProcesses();
            }

            GUILayout.EndHorizontal();
        }

        ////////////////////////////TOGGLE AUTO MODE////////////////////////////
    }
Exemplo n.º 10
0
    void Start()
    {
        //		print ("Start of pupil gaze tracker");

        Settings = PupilTools.Settings;


        string str = PupilConversions.ReadStringFromFile("camera_intrinsics");

        PupilConversions.ReadCalibrationData(str, ref PupilData.CalibrationData);

        Settings.framePublishing.StreamCameraImages = false;
        if (Settings.framePublishing.StreamCameraImages)
        {
            Settings.framePublishing.InitializeFramePublishing();
        }

        if (PupilGazeTracker._Instance == null)
        {
            PupilGazeTracker._Instance = this;
        }

        PupilData.calculateMovingAverage = true;

        //make sure that if the toggles are on it functions as the toggle requires it
        if (isOperatorMonitor && OnOperatorMonitor == null)
        {
            OperatorMonitor.Instantiate();
        }
        //OnOperatorMonitor += DrawOperatorMonitor;
        if (Settings.debugView.active)
        {
            debugInstance.StartCalibrationDebugView();
        }

        PupilGazeTracker.Instance.ProjectName = Application.productName;

        Settings.connection.isConnected = false;
        Settings.dataProcess.state      = PupilSettings.EStatus.Idle;

        if (Settings.connection.isAutorun)
        {
            RunConnect();
        }
    }
Exemplo n.º 11
0
    public override void OnInspectorGUI()
    {
        if (pupilTracker == null)
        {
            //			Debug.Log ("fos");
            pupilTracker = (PupilGazeTracker)target;
            //			pupilTracker.AdjustPath ();

            PupilTools.WantRepaint += this.Repaint;

            if (pupilTracker.Settings == null)
            {
                pupilTracker.Settings = Resources.Load <PupilSettings>("PupilSettings");
                pupilSettings         = pupilTracker.Settings;
            }
            else
            {
                pupilSettings = pupilTracker.Settings;
            }

            tempServerIP = PupilTools.Connection.IP;
            if (pupilTracker.DrawMenu == null)
            {
                switch (pupilSettings.customGUIVariables.tabs.mainTab)
                {
                case 0:    ////////MAIN MENU////////
                    pupilTracker.DrawMenu  = null;
                    pupilTracker.DrawMenu += DrawMainMenu;
                    break;

                case 1:    ////////SETTINGS////////
                    pupilTracker.DrawMenu  = null;
                    pupilTracker.DrawMenu += DrawSettings;
                    break;
                }
            }
        }

        GUILayout.Space(20);

        ////////LABEL WITH STYLE////////
        System.Object logo = Resources.Load("pupil_labs_logotype") as Texture;
        GUILayout.Label(logo as Texture, pupilSettings.GUIStyles[0]);
        ////////LABEL WITH STYLE////////

        GUILayout.Space(50);

        ////////DRAW TAB MENU SYSTEM////////
        EditorGUI.BeginChangeCheck();

        EditorGUILayout.BeginHorizontal();

        //////////////////////////////////////STATUS FIELD//////////////////////////////////////
        if (PupilTools.IsConnected)
        {
            GUI.color = Color.green;
            if (PupilTools.Connection.isLocal)
            {
                GUILayout.Label("localHost ( Connected )", pupilSettings.GUIStyles[1]);
            }
            else
            {
                GUILayout.Label("remote " + PupilTools.Connection.IP + " ( Connected )", pupilSettings.GUIStyles[1]);
            }
        }
        else
        {
            if (PupilTools.Connection.isLocal)
            {
                GUILayout.Label("localHost ( Not Connected )", pupilSettings.GUIStyles[1]);
            }
            else
            {
                GUILayout.Label("remote " + PupilTools.Connection.IP + " ( Not Connected )", pupilSettings.GUIStyles[1]);
            }
        }
        GUI.color = Color.white;

        Texture2D eyeIcon = Resources.Load("eye") as Texture2D;

        if (PupilTools.eyeProcess0)
        {
            GUI.color = Color.green;
        }
        else
        {
            GUI.color = Color.gray;
        }
        GUILayout.Label(eyeIcon as Texture2D, pupilSettings.GUIStyles[2], GUILayout.Width(20), GUILayout.Height(20));
        GUILayout.Space(5);
        if (PupilTools.eyeProcess1)
        {
            GUI.color = Color.green;
        }
        else
        {
            GUI.color = Color.gray;
        }
        GUILayout.Label(eyeIcon as Texture2D, pupilSettings.GUIStyles[2], GUILayout.Width(20), GUILayout.Height(20));
        GUI.color = Color.white;

        EditorGUILayout.EndHorizontal();
        //////////////////////////////////////STATUS FIELD\//////////////////////////////////////

        //////////////////////////////////////DEVELOPER MODE TOGGLE//////////////////////////////////////
        GUILayout.BeginHorizontal();////////////////////HORIZONTAL////////////////////

        GUI.skin.button.fontSize = 9;
        pupilSettings.customGUIVariables.bools.isAdvanced = GUILayout.Toggle(pupilSettings.customGUIVariables.bools.isAdvanced, "developer mode", "Button", GUILayout.Width(90));
        //GUI.skin.button.fontSize = 13;
        GUI.skin.button.fontSize = 12;

        GUILayout.EndHorizontal();                                           ////////////////////HORIZONTAL////////////////////
                                                                             //////////////////////////////////////DEVELOPER MODE TOGGLE\//////////////////////////////////////
        //base.OnInspectorGUI ();
        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1)); //Separator Line
        pupilSettings.customGUIVariables.tabs.mainTab = GUILayout.Toolbar(pupilSettings.customGUIVariables.tabs.mainTab, new string[] { "Main", "Settings" }, GUILayout.Height(35));
        GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1)); //Separator Line
        if (EditorGUI.EndChangeCheck())
        {                                                                    //I delegates are used to assign the relevant menu to be drawn. This way I can fire off something on tab change.
            switch (pupilSettings.customGUIVariables.tabs.mainTab)
            {
            case 0:    ////////MAIN MENU////////
                pupilTracker.DrawMenu  = null;
                pupilTracker.DrawMenu += DrawMainMenu;
                break;

            case 1:    ////////SETTINGS////////
                pupilTracker.DrawMenu  = null;
                pupilTracker.DrawMenu += DrawSettings;
                break;
            }
        }

        if (pupilTracker.DrawMenu != null)
        {
            pupilTracker.DrawMenu();
        }

        ////////DRAW TAB MENU SYSTEM////////
        GUILayout.Space(50);

        GUI.skin = null;
    }
Exemplo n.º 12
0
    private void DrawSettings()
    {
        PupilSettings pupilSettings = PupilSettings.Instance;

        ////////////////////////////CONNECTION MODE////////////////////////////

        if (PupilTools.IsCalibrating)
        {
            GUI.enabled = false;
        }
        GUILayout.Space(4);
        GUILayout.Label("Connection", pupilSettings.GUIStyles[3]);
        GUILayout.Space(4);
        EditorGUI.BeginChangeCheck();
        PupilTools.Connection.isLocal = Convert.ToBoolean(GUILayout.Toolbar(Convert.ToInt32(PupilTools.Connection.isLocal), new string[]
        {
            "Remote",
            "Local"
        }, GUILayout.Height(30), GUILayout.MinWidth(25)));

        GUI.color = Color.white;
        if (EditorGUI.EndChangeCheck())
        {
            if (PupilTools.Connection.isLocal)
            {
                tempServerIP             = PupilTools.Connection.IP;
                PupilTools.Connection.IP = "127.0.0.1";
            }
            else
            {
                PupilTools.Connection.IP = tempServerIP;
            }
        }
        //ADVANCED SETTING
        if (pupilSettings.customGUIVariables.bools.isAdvanced)
        {
            ////////////////////////////SERVICE PORT////////////////////////////
            ///
            GUILayout.BeginHorizontal(); //---------HORIZONTAL GROUP---------//
                                         //
            GUILayout.Label("Service Port : ", pupilSettings.GUIStyles[3], GUILayout.MinWidth(50));
            PupilTools.Connection.PORT = EditorGUILayout.IntField(PupilTools.Connection.PORT, pupilSettings.GUIStyles[4], GUILayout.MinWidth(100), GUILayout.Height(22));
            //
            GUILayout.EndHorizontal();//---------HORIZONTAL GROUP\---------//
            ///
            ////////////////////////////SERVICE PORT\////////////////////////////
            base.OnInspectorGUI();
            GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1));//Separator Line
        }
        //ADVANCED SETTING\

        //---------REMOTE CONNECTION MODE---------//
        if (!PupilTools.Connection.isLocal)
        {
            GUILayout.Space(5);

            ////////////////////////////SERVER IP ADDRESS////////////////////////////
            ///
            GUILayout.BeginHorizontal(); //---------HORIZONTAL GROUP---------//
                                         //
            GUILayout.Label("IP : ", pupilSettings.GUIStyles[5], GUILayout.MinWidth(50));
            //
            PupilTools.Connection.IP = EditorGUILayout.TextArea(PupilTools.Connection.IP, pupilSettings.GUIStyles[4], GUILayout.MinWidth(50), GUILayout.Height(22));
            if (GUILayout.Button("Default"))
            {
                PupilTools.Connection.IP = "127.0.0.1";
                Repaint();
                GUI.FocusControl("");
            }
            //
            GUILayout.EndHorizontal();//---------HORIZONTAL GROUP\---------//
            ///
            ////////////////////////////SERVER IP ADDRESS\////////////////////////////
        }
        //---------REMOTE CONNECTION MODE\---------//

        GUI.enabled = true;

        GUILayout.Space(4);
        GUILayout.Label("Recording", pupilSettings.GUIStyles[3]);
        GUILayout.Space(4);

        GUILayout.BeginHorizontal();
        PupilSettings.Instance.recorder.resolution = (FFmpegOut.FFmpegPipe.Resolution)EditorGUILayout.EnumPopup(PupilSettings.Instance.recorder.resolution);
        PupilSettings.Instance.recorder.codec      = (FFmpegOut.FFmpegPipe.Codec)EditorGUILayout.EnumPopup(PupilSettings.Instance.recorder.codec);//  GUILayout.Toolbar (pupilTracker.Codec, new string[] {
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        EditorGUI.BeginChangeCheck();
        PupilSettings.Instance.recorder.isCustomPath = GUILayout.Toggle(PupilSettings.Instance.recorder.isCustomPath, "CustomPath", "Button", GUILayout.Width(90));
        if (EditorGUI.EndChangeCheck())
        {
            if (PupilSettings.Instance.recorder.isCustomPath)
            {
                PupilSettings.Instance.recorder.filePath = EditorUtility.OpenFolderPanel("Select the output folder", PupilSettings.Instance.recorder.filePath, "");
            }
        }

        if (PupilSettings.Instance.recorder.isCustomPath)
        {
            GUIStyle centeredStyle = new GUIStyle(GUI.skin.textField);
            centeredStyle.alignment   = TextAnchor.MiddleCenter;
            centeredStyle.margin      = new RectOffset(0, 0, 3, 0);
            centeredStyle.fixedHeight = 20;
            PupilSettings.Instance.recorder.filePath = GUILayout.TextField(PupilSettings.Instance.recorder.filePath, centeredStyle);
            if (GUILayout.Button("Browse", GUILayout.Width(60)))
            {
                PupilSettings.Instance.recorder.filePath = EditorUtility.OpenFolderPanel("Select the output folder", PupilSettings.Instance.recorder.filePath, "");
            }
        }
        GUILayout.EndHorizontal();

        GUILayout.Space(10);
    }
Exemplo n.º 13
0
    private void DrawSettings()
    {
        PupilSettings pupilSettings = PupilTools.Settings;

        GUILayout.Space(10);

        // test for changes in exposed values
        EditorGUI.BeginChangeCheck();
        pupilTracker.SettingsTab = GUILayout.Toolbar(pupilTracker.SettingsTab, new string[] {
            "pupil app",
            "calibration",
            "recording"
        }, GUILayout.Height(30));
        ////////INPUT FIELDS////////
        switch (pupilTracker.SettingsTab)
        {
        case 0:    //PUPIL APP
            if (PupilTools.Settings.dataProcess.state == PupilSettings.EStatus.Calibration)
            {
                GUI.enabled = false;
            }

            GUILayout.Space(10);

            AutoRunLayout();

            GUILayout.Space(20);

            ////////////////////////////CONNECTION MODE////////////////////////////
            EditorGUI.BeginChangeCheck();
            //GUI.color = new Color (.7f, .7f, .7f, 1f);

            PupilTools.Settings.connection.isLocal = Convert.ToBoolean(GUILayout.Toolbar(Convert.ToInt32(PupilTools.Settings.connection.isLocal), new string[] {
                "Remote",
                "Local"
            }, GUILayout.Height(30), GUILayout.MinWidth(25)));
            //pupilTracker.customInspector.connectionMode = GUILayout.Toolbar (pupilTracker.customInspector.connectionMode, new string[]{ "Local", "Remote" }, GUILayout.Height (30), GUILayout.MinWidth (25));
            GUI.color = Color.white;
            if (EditorGUI.EndChangeCheck())
            {
                if (PupilTools.Settings.connection.isLocal)
                {
                    tempServerIP = PupilTools.Settings.connection.IP;
                    PupilTools.Settings.connection.IP = "127.0.0.1";
                }
                else
                {
                    PupilTools.Settings.connection.IP = tempServerIP;
                }
            }

            ////////////////////////////CONNECTION MODE////////////////////////////
            GUILayout.Space(5);
            if (PupilTools.Settings.connection.isLocal)
            {    //LOCAL CONNECTION MODE//
                ////////////////////////////PUPIL APP PATH////////////////////////////
                GUILayout.BeginHorizontal();
                GUILayout.Label("path : ", pupilSettings.GUIStyles[5], GUILayout.MinWidth(50));

                PupilTools.Settings.pupilServiceApp.servicePath = EditorGUILayout.TextArea(PupilTools.Settings.pupilServiceApp.servicePath, pupilSettings.GUIStyles[6], GUILayout.MinWidth(100), GUILayout.Height(22));
                if (GUILayout.Button("Browse"))
                {
                    PupilTools.Settings.pupilServiceApp.servicePath = EditorUtility.OpenFilePanel("Select Pupil service application file", PupilTools.Settings.pupilServiceApp.servicePath, "exe");
                }
                GUILayout.EndHorizontal();
                ////////////////////////////PUPIL APP PATH////////////////////////////
            }

            if (pupilSettings.customGUIVariables.bools.isAdvanced)
            {    //ADVANCED SETTING
                ////////////////////////////SERVICE PORT////////////////////////////
                ///
                GUILayout.BeginHorizontal();    //---------HORIZONTAL GROUP---------//
                                                //
                GUILayout.Label("Service Port : ", pupilSettings.GUIStyles[3], GUILayout.MinWidth(50));
                PupilTools.Settings.connection.PORT = EditorGUILayout.IntField(PupilTools.Settings.connection.PORT, pupilSettings.GUIStyles[4], GUILayout.MinWidth(100), GUILayout.Height(22));
                //
                GUILayout.EndHorizontal();    //---------HORIZONTAL GROUP\---------//
                ///
                ////////////////////////////SERVICE PORT\////////////////////////////
                base.OnInspectorGUI();
                GUILayout.Box("", GUILayout.ExpandWidth(true), GUILayout.Height(1)); //Separator Line
            }                                                                        //ADVANCED SETTING\

            if (!PupilTools.Settings.connection.isLocal)
            {    //---------REMOTE CONNECTION MODE---------//
                GUILayout.Space(5);

                ////////////////////////////SERVER IP ADDRESS////////////////////////////
                ///

                GUILayout.BeginHorizontal();    //---------HORIZONTAL GROUP---------//
                                                //
                GUILayout.Label("IP : ", pupilSettings.GUIStyles[5], GUILayout.MinWidth(50));
                //

                //				pupilTracker.Settings = (PupilSettings)EditorGUILayout.ObjectField (pupilTracker.Settings);
                //				pupilTracker.Settings.a = EditorGUILayout.TextArea (pupilTracker.Settings.a, pupilTracker.Styles[8], GUILayout.MinWidth (50), GUILayout.Height (22));
                PupilTools.Settings.connection.IP = EditorGUILayout.TextArea(PupilTools.Settings.connection.IP, pupilSettings.GUIStyles[4], GUILayout.MinWidth(50), GUILayout.Height(22));
                if (GUILayout.Button("Default"))
                {
                    PupilTools.Settings.connection.IP = "127.0.0.1";
                    Repaint();
                    GUI.FocusControl("");
                }
                //
                GUI.enabled = true;
                //
                GUILayout.EndHorizontal();    //---------HORIZONTAL GROUP\---------//
                ///
                ////////////////////////////SERVER IP ADDRESS\////////////////////////////


                GUI.enabled = true;
            }    //---------REMOTE CONNECTION MODE\---------//


            break;

        case 1:    //CALIBRATION


            GUILayout.Space(20);

            ////////////////////////////2D-3D TOGGLE BAR////////////////////////////
            EditorGUI.BeginChangeCheck();
            var calibrationMode = (Calibration.CalibMode)GUILayout.Toolbar((int)pupilSettings.calibration.currentCalibrationMode, new string[] { "2D", "3D" });
            if (calibrationMode != pupilSettings.calibration.currentCalibrationMode)
            {
                pupilSettings.calibration.currentCalibrationMode = calibrationMode;
            }
            GUI.enabled = true;
            if (EditorGUI.EndChangeCheck())
            {
                //				pupilSettings.calibration.SwitchCalibrationMode ();
            }
            ////////////////////////////2D-3D TOGGLE BAR////////////////////////////

            ////////////////////////////CALIBRATION DEBUG MODE////////////////////////////
            if (PupilTools.Settings.dataProcess.state == PupilSettings.EStatus.Calibration || !isEyeProcessConnected || (int)pupilSettings.calibration.currentCalibrationMode != 1)
            {
            }
            else
            {
                //GUI.enabled = false;

                EditorGUI.BeginChangeCheck();

                pupilSettings.debugView.active = GUILayout.Toggle(pupilSettings.debugView.active, "Calibration Debug Mode", "Button");
                GUI.enabled = true;
                if (EditorGUI.EndChangeCheck())
                {
                    if (pupilSettings.debugView.active)
                    {
                        if (pupilTracker.OperatorMonitorProperties[0].OperatorCamera != null)
                        {
                            OperatorMonitor.Instance.ExitOperatorMonitor();
                        }
                        pupilTracker.debugInstance.StartCalibrationDebugView();
                    }
                    else
                    {
                        pupilTracker.debugInstance.CloseCalibrationDebugView();
                    }
                }
            }

            if (pupilSettings.debugView.active)
            {
                //				pupilTracker.calibrationDebugCamera = (PupilGazeTracker.CalibrationDebugCamera) EditorGUILayout.EnumPopup (pupilTracker.calibrationDebugCamera);
                GUILayout.BeginHorizontal();
                EditorGUI.BeginChangeCheck();
                pupilTracker.debugInstance.DebugViewVariables.isDrawLines  = GUILayout.Toggle(pupilTracker.debugInstance.DebugViewVariables.isDrawLines, " Draw Debug Lines ", "Button");
                pupilTracker.debugInstance.DebugViewVariables.isDrawPoints = GUILayout.Toggle(pupilTracker.debugInstance.DebugViewVariables.isDrawPoints, " Draw Debug Points ", "Button");
                if (EditorGUI.EndChangeCheck())
                {
                    pupilTracker.debugInstance.SetDrawCalibrationPointCloud(pupilTracker.debugInstance.DebugViewVariables.isDrawPoints);
                    pupilTracker.debugInstance.SetDrawCalibrationLines(pupilTracker.debugInstance.DebugViewVariables.isDrawLines);
                }
                GUILayout.EndHorizontal();
            }

            GUI.enabled = true;
            ////////////////////////////CALIBRATION DEBUG MODE////////////////////////////

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();    ////////////////////HORIZONTAL////////////////////
            GUILayout.Label("Samples ", pupilSettings.GUIStyles[3], GUILayout.MinWidth(35));
            PupilTools.defaultCalibrationCount = EditorGUILayout.IntSlider(PupilTools.defaultCalibrationCount, 1, 120, GUILayout.ExpandWidth(true));
            GUILayout.EndHorizontal(); ////////////////////HORIZONTAL////////////////////

            GUILayout.Space(10);       //------------------------------------------------------------//

            if (pupilSettings.customGUIVariables.bools.isAdvanced)
            {
                base.OnInspectorGUI();
            }
            break;

        case 2:    //RECORDING

            GUILayout.Space(20);

            GUILayout.BeginHorizontal();
            pupilTracker.recorder.resolution = (FFmpegOut.FFmpegPipe.Resolution)EditorGUILayout.EnumPopup(pupilTracker.recorder.resolution);
            pupilTracker.recorder.codec      = (FFmpegOut.FFmpegPipe.Codec)EditorGUILayout.EnumPopup(pupilTracker.recorder.codec);//  GUILayout.Toolbar (pupilTracker.Codec, new string[] {
            GUILayout.EndHorizontal();

            //			GUILayout.BeginHorizontal ();
            //			pupilTracker.recorder.isFixedRecordingLength = GUILayout.Toggle (pupilTracker.recorder.isFixedRecordingLength, "fixed length", "Button", GUILayout.Width (90));
            //			if (pupilTracker.recorder.isFixedRecordingLength) {
            //				pupilTracker.recorder.recordingLength = EditorGUILayout.FloatField (pupilTracker.recorder.recordingLength);
            //			}
            //			GUILayout.EndHorizontal ();

            GUILayout.BeginHorizontal();
            EditorGUI.BeginChangeCheck();
            pupilTracker.recorder.isCustomPath = GUILayout.Toggle(pupilTracker.recorder.isCustomPath, "CustomPath", "Button", GUILayout.Width(90));
            if (EditorGUI.EndChangeCheck())
            {
                if (pupilTracker.recorder.isCustomPath)
                {
                    pupilTracker.recorder.filePath = EditorUtility.OpenFolderPanel("Select the output folder", pupilTracker.recorder.filePath, "");
                }
            }
            if (pupilTracker.recorder.isCustomPath)
            {
                GUIStyle centeredStyle = new GUIStyle(GUI.skin.textField);
                centeredStyle.alignment        = TextAnchor.MiddleCenter;
                centeredStyle.margin           = new RectOffset(0, 0, 3, 0);
                centeredStyle.fixedHeight      = 20;
                pupilTracker.recorder.filePath = GUILayout.TextField(pupilTracker.recorder.filePath, centeredStyle);
                if (GUILayout.Button("Browse", GUILayout.Width(60)))
                {
                    pupilTracker.recorder.filePath = EditorUtility.OpenFolderPanel("Select the output folder", pupilTracker.recorder.filePath, "");
                }
            }
            GUILayout.EndHorizontal();

            break;
        }


        //if change found set scene as dirty, so user will have to save changed values.
        if (EditorGUI.EndChangeCheck() && !Application.isPlaying)
        {
            EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
        }

        GUILayout.Space(10);
    }