コード例 #1
0
        protected virtual void HeaderGUI()
        {
            SplineUser user             = (SplineUser)target;
            bool       isTargetComputer = (user.user == null || sampleTarget == SampleTarget.Computer);

            if (user.computer != null && !user.computer.IsSubscribed(user))
            {
                user.computer.Subscribe(user);
            }
            Undo.RecordObject(user, "Inspector Change");

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Spline User", EditorStyles.boldLabel, GUILayout.Width(85));
            GUI.color    = new Color(1f, 1f, 1f, 0.75f);
            sampleTarget = (SampleTarget)EditorGUILayout.EnumPopup(sampleTarget, GUILayout.Width(75));
            GUI.color    = Color.white;
            EditorGUILayout.EndHorizontal();
            if (sampleTarget == SampleTarget.Computer)
            {
                user.computer = (SplineComputer)EditorGUILayout.ObjectField("Computer", user.computer, typeof(SplineComputer), true);
            }
            else
            {
                SplineUser lastUser = user.user;
                user.user = (SplineUser)EditorGUILayout.ObjectField("User", user.user, typeof(SplineUser), true);
                if (lastUser != user.user && user.rootUser == user)
                {
                    user.user = null;
                    EditorUtility.DisplayDialog("Cannot assign user.", "A SplineUser component cannot sample itself, please select another user to sample.", "OK");
                }
            }
            if (user.computer == null && isTargetComputer)
            {
                EditorGUILayout.HelpBox("No SplineComputer or SplineUser is referenced. Reference a SplineComputer or another SplineUser component to make this SplineUser work.", MessageType.Error);
            }

            if (showResolution && isTargetComputer)
            {
                user.resolution = (double)EditorGUILayout.Slider("Resolution", (float)user.resolution, 0f, 1f);
            }
            if (showClip)
            {
                float clipFrom = (float)user.clipFrom;
                float clipTo   = (float)user.clipTo;


                if (user.rootUser.computer != null && user.rootUser.computer.isClosed && user.loopSamples)
                {
                    EditorGUILayout.BeginHorizontal();
                    if (EditButton(_editIndex == 0))
                    {
                        if (_editIndex == 0)
                        {
                            _editIndex = -1;
                        }
                        else
                        {
                            _editIndex = 0;
                        }
                    }
                    EditorGUILayout.BeginVertical();
                    user.clipFrom = EditorGUILayout.Slider("Clip From", (float)user.clipFrom, 0f, 1f);
                    user.clipTo   = EditorGUILayout.Slider("Clip To", (float)user.clipTo, 0f, 1f);
                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndHorizontal();
                }
                else
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.BeginHorizontal();
                    if (EditButton(_editIndex == 0))
                    {
                        if (_editIndex == 0)
                        {
                            _editIndex = -1;
                        }
                        else
                        {
                            _editIndex = 0;
                        }
                    }
                    EditorGUIUtility.labelWidth = 80f;
                    EditorGUILayout.MinMaxSlider(new GUIContent("Clip Range:"), ref clipFrom, ref clipTo, 0f, 1f);
                    EditorGUIUtility.labelWidth = 0f;
                    EditorGUILayout.EndHorizontal();
                    user.clipFrom = clipFrom;
                    user.clipTo   = clipTo;
                    EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(30));
                    user.clipFrom = EditorGUILayout.FloatField((float)user.clipFrom);
                    user.clipTo   = EditorGUILayout.FloatField((float)user.clipTo);
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.EndHorizontal();
                }
                SplineEditor.hold = _editIndex >= 0;
                if (user.rootUser.computer != null && user.rootUser.computer.isClosed)
                {
                    user.loopSamples = EditorGUILayout.Toggle("Loop Samples", user.loopSamples);
                }
            }

            settings = EditorGUILayout.Foldout(settings, "Settings");
            if (settings)
            {
                EditorGUI.indentLevel++;
                if (showUpdateMethod && isTargetComputer)
                {
                    user.updateMethod = (SplineUser.UpdateMethod)EditorGUILayout.EnumPopup("Update Method", user.updateMethod);
                }
                if (showUniform && (user.user == null || sampleTarget == SampleTarget.Computer))
                {
                    user.uniformSample = EditorGUILayout.Toggle("Unform samples", user.uniformSample);
                    if (user.uniformSample)
                    {
                        user.uniformPreserveClipRange = EditorGUILayout.Toggle("Preserve clip range", user.uniformPreserveClipRange);
                    }
                }
                user.autoUpdate = EditorGUILayout.Toggle("Runtime Auto Update", user.autoUpdate);
                if (showMultithreading)
                {
                    user.multithreaded = EditorGUILayout.Toggle("Multithreading", user.multithreaded);
                }
                user.buildOnAwake  = EditorGUILayout.Toggle("Build on Awake", user.buildOnAwake);
                user.buildOnEnable = EditorGUILayout.Toggle("Build on Enable", user.buildOnEnable);
                EditorGUI.indentLevel--;
            }

            if (user.computer != null && user.computer.nodeLinks.Length > 0 && isTargetComputer)
            {
                if (GUILayout.Button("Edit junction path"))
                {
                    pathWindow = EditorWindow.GetWindow <PathWindow>();
                    pathWindow.Init(this);
                }
            }
        }
コード例 #2
0
        public virtual void BaseGUI()
        {
            if (initGUI)
            {
                SplineEditorGUI.Initialize();
                initGUI = false;
            }
            base.OnInspectorGUI();
            SplineUser user             = (SplineUser)target;
            bool       isTargetComputer = (user.user == null || sampleTarget == SampleTarget.Computer);

            if (user.computer != null && !user.computer.IsSubscribed(user))
            {
                user.computer.Subscribe(user);
            }
            Undo.RecordObject(user, "Inspector Change");

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Spline User", EditorStyles.boldLabel, GUILayout.Width(85));
            GUI.color    = new Color(1f, 1f, 1f, 0.75f);
            sampleTarget = (SampleTarget)EditorGUILayout.EnumPopup(sampleTarget, GUILayout.Width(75));
            GUI.color    = Color.white;
            EditorGUILayout.EndHorizontal();
            if (sampleTarget == SampleTarget.Computer)
            {
                user.computer = (SplineComputer)EditorGUILayout.ObjectField("Computer", user.computer, typeof(SplineComputer), true);
            }
            else
            {
                SplineUser lastUser = user.user;
                user.user = (SplineUser)EditorGUILayout.ObjectField("User", user.user, typeof(SplineUser), true);
                if (lastUser != user.user && user.rootUser == user)
                {
                    user.user = null;
                    EditorUtility.DisplayDialog("Cannot assign user.", "A SplineUser component cannot sample itself, please select another user to sample.", "OK");
                }
            }
            if (showUpdateMethod && isTargetComputer)
            {
                user.updateMethod = (SplineUser.UpdateMethod)EditorGUILayout.EnumPopup("Update Method", user.updateMethod);
            }
            if (user.computer == null && isTargetComputer)
            {
                EditorGUILayout.HelpBox("No SplineComputer or SplineUser is referenced. Reference a SplineComputer or another SplineUser component to make this SplineUser work.", MessageType.Error);
            }

            if (showResolution && isTargetComputer)
            {
                user.resolution = (double)EditorGUILayout.Slider("Resolution", (float)user.resolution, 0f, 1f);
            }
            if (showClip)
            {
                EditorGUILayout.BeginHorizontal();
                float clipFrom = (float)user.clipFrom;
                float clipTo   = (float)user.clipTo;
                EditorGUILayout.MinMaxSlider(new GUIContent("Clip Range:"), ref clipFrom, ref clipTo, 0f, 1f);
                user.clipFrom = clipFrom;
                user.clipTo   = clipTo;
                EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(30));
                user.clipFrom = EditorGUILayout.FloatField((float)user.clipFrom);
                user.clipTo   = EditorGUILayout.FloatField((float)user.clipTo);
                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndHorizontal();
            }
            if (showAveraging && (user.user == null || sampleTarget == SampleTarget.Computer))
            {
                user.averageResultVectors = EditorGUILayout.Toggle("Average Result Vectors", user.averageResultVectors);
            }
            if (showMultithreading)
            {
                user.multithreaded = EditorGUILayout.Toggle("Multithreading", user.multithreaded);
            }

            user.buildOnAwake = EditorGUILayout.Toggle("Build on Awake", user.buildOnAwake);
            if (user.computer != null && user.computer.nodeLinks.Length > 0 && isTargetComputer)
            {
                if (GUILayout.Button("Edit junction path"))
                {
                    pathWindow = EditorWindow.GetWindow <PathWindow>();
                    pathWindow.init(this, "Junction Path", new Vector2(300, 150));
                }
            }
        }