public static void Open()
 {
     if (_i == null)
     {
         _i              = ScriptableObject.CreateInstance <VrtpAboutWindow>();
         _i.minSize      = _i.maxSize = new Vector2(320, 160);
         _i.titleContent = new GUIContent("About VRTP v" + VrTunnellingPro.TunnellingBase.VRTP_VERSION);
         _i._headerLogo  = VrtpEditorUtils.LoadTexture(VrTunnellingProImageEditor.LOGO_NAME);
     }
     _i.ShowUtility();
 }
        public override void OnInspectorGUI()
        {
            // Draw header
            EditorGUI.BeginChangeCheck();

            VrtpEditorUtils.DrawImage(_headerLogo, 77, new Vector2(0, 4));

            EditorGUILayout.Space();
            VrtpStyles.BeginSectionBox(); {
                EditorGUILayout.PropertyField(_pTarget);
                if (_tb.motionTarget == null)
                {
                    EditorGUILayout.HelpBox("No motion target specified!", MessageType.Error);
                }
                else if (_tb.motionTarget == _tb.transform)
                {
                    EditorGUILayout.HelpBox("Motion Target generally shouldn't be the HMD", MessageType.Warning);
                }
            } VrtpStyles.EndSectionBox();

            VrtpStyles.BeginSectionBox(); {
                ++EditorGUI.indentLevel;
                _showEffectSettings = EditorGUILayout.Foldout(_showEffectSettings, "Effect Settings", VrtpStyles.sectionFoldout);
                --EditorGUI.indentLevel;

                if (_showEffectSettings)
                {
                    EditorGUILayout.Space();
                    EditorGUILayout.PropertyField(_pFxColor);
                    EditorGUILayout.PropertyField(_pFxCover);
                    EditorGUILayout.PropertyField(_pFxFeather);
                }
            } VrtpStyles.EndSectionBox();

            // Draw content
            DrawSettings();

            // Finalise
            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
            }

            #region Debug
            VrtpStyles.BeginSectionBox(); {
                ++EditorGUI.indentLevel;
                EditorGUILayout.BeginHorizontal(); {
                    _showDebug = EditorGUILayout.Foldout(_showDebug, _gcDebugLabel, VrtpStyles.sectionFoldout);
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("About VRTP", EditorStyles.miniButton))
                    {
                        VrtpAboutWindow.Open();
                    }
                    if (GUILayout.Button("Open Manual", EditorStyles.miniButton))
                    {
                        Application.OpenURL(URL_DOCS);
                    }
                } EditorGUILayout.EndHorizontal();
                --EditorGUI.indentLevel;

                if (_showDebug)
                {
                    bool showMotionDebug = (bool)_fiDebugMotion.GetValue(_tb);
                    EditorGUI.BeginChangeCheck();
                    showMotionDebug = EditorGUILayout.ToggleLeft(_gcDebugMotion, showMotionDebug, VrtpStyles.sectionHeader);
                    if (EditorGUI.EndChangeCheck())
                    {
                        _fiDebugMotion.SetValue(_tb, showMotionDebug);
                        // Reset peak motion data each time toggled
                        _debugAvMax = _debugLaMax = _debugLvMax = 0;
                    }
                    if (showMotionDebug)
                    {
                        ++EditorGUI.indentLevel;
                        float currentAv, currentLa, currentLv;
                        currentAv = currentLa = currentLv = 0;
                        if (Application.isPlaying)
                        {
                            #region Get motion data
                            currentAv   = (float)_fiDebugAv.GetValue(_tb);
                            currentLa   = (float)_fiDebugLa.GetValue(_tb);
                            currentLv   = (float)_fiDebugLv.GetValue(_tb);
                            _debugAvMax = Mathf.Max(currentAv, _debugAvMax);
                            _debugLaMax = Mathf.Max(currentLa, _debugLaMax);
                            _debugLvMax = Mathf.Max(currentLv, _debugLvMax);
                            #endregion
                        }
                        else
                        {
                            GUI.enabled = false;
                            _debugAvMax = _debugLaMax = _debugLvMax = 0;
                        }

                        #region Draw
                        GUILayoutOption[] options = new GUILayoutOption[] { GUILayout.Width(72) };

                        EditorGUILayout.BeginHorizontal(); {
                            EditorGUILayout.LabelField("Motion", EditorStyles.boldLabel, options);
                            EditorGUILayout.LabelField("Current", EditorStyles.boldLabel, options);
                            EditorGUILayout.LabelField("Max", EditorStyles.boldLabel, options);
                            if (GUILayout.Button(_gcDebugMotionResetAll, options))
                            {
                                _debugAvMax = _debugLaMax = _debugLvMax = 0;
                            }
                        } EditorGUILayout.EndHorizontal();

                        EditorGUILayout.BeginHorizontal(); {
                            EditorGUILayout.LabelField(_gcDebugAvLabel, options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, currentAv), options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, _debugAvMax), options);
                            if (GUILayout.Button(_gcDebugMotionResetBtn, options))
                            {
                                _debugAvMax = 0;
                            }
                        } EditorGUILayout.EndHorizontal();

                        EditorGUILayout.BeginHorizontal(); {
                            EditorGUILayout.LabelField(_gcDebugLaLabel, options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, currentLa), options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, _debugLaMax), options);
                            if (GUILayout.Button(_gcDebugMotionResetBtn, options))
                            {
                                _debugLaMax = 0;
                            }
                        } EditorGUILayout.EndHorizontal();

                        EditorGUILayout.BeginHorizontal(); {
                            EditorGUILayout.LabelField(_gcDebugLvLabel, options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, currentLv), options);
                            EditorGUILayout.LabelField(string.Format(DEBUG_MOTION_FORMAT, _debugLvMax), options);
                            if (GUILayout.Button(_gcDebugMotionResetBtn, options))
                            {
                                _debugLvMax = 0;
                            }
                        } EditorGUILayout.EndHorizontal();
                        #endregion
                        GUI.enabled = true;
                        --EditorGUI.indentLevel;
                    }
                    DrawDebugOptions();
                }
            } VrtpStyles.EndSectionBox();

            #endregion
        }