Esempio n. 1
0
        protected override void Awake()
        {
            ObjectBender bender = (ObjectBender)target;

            if (!Application.isPlaying)
            {
                bender.UpdateReferences();
            }
            base.Awake();
        }
Esempio n. 2
0
        protected override void BodyGUI()
        {
            base.BodyGUI();
            ObjectBender bender = (ObjectBender)target;

            serializedObject.Update();
            SerializedProperty axis        = serializedObject.FindProperty("_axis");
            SerializedProperty normalMode  = serializedObject.FindProperty("_normalMode");
            SerializedProperty forwardMode = serializedObject.FindProperty("_forwardMode");

            for (int i = 0; i < targets.Length; i++)
            {
                ObjectBender objBender  = (ObjectBender)targets[i];
                int          childCount = 0;
                GetChildCount(objBender.transform, ref childCount);
                if (objBender.bendProperties.Length - 1 != childCount && !Application.isPlaying)
                {
                    objBender.UpdateReferences();
                }
            }
            EditorGUI.BeginChangeCheck();
            EditorGUILayout.PropertyField(axis, new GUIContent("Axis"));
            EditorGUILayout.PropertyField(normalMode, new GUIContent("Up Vector"));

            if (normalMode.intValue == (int)ObjectBender.NormalMode.Custom)
            {
                SerializedProperty customNormal = serializedObject.FindProperty("_customNormal");
                EditorGUILayout.PropertyField(customNormal, new GUIContent("Custom Up"));
            }
            EditorGUILayout.PropertyField(forwardMode, new GUIContent("Forward Vector"));
            if (forwardMode.intValue == (int)ObjectBender.ForwardMode.Custom)
            {
                SerializedProperty customForward = serializedObject.FindProperty("_customForward");
                EditorGUILayout.PropertyField(customForward, new GUIContent("Custom Forward"));
            }

            if (EditorGUI.EndChangeCheck())
            {
                serializedObject.ApplyModifiedProperties();
                for (int i = 0; i < targets.Length; i++)
                {
                    ObjectBender objBender = (ObjectBender)targets[i];
                    objBender.Rebuild();
                }
            }

            if (targets.Length > 1)
            {
                EditorGUILayout.LabelField("Object properties unavailable when multiple benders are selected.", EditorStyles.centeredGreyMiniLabel);
                return;
            }
            if (!bender.bend)
            {
                float scrollHeight = Mathf.Min(bender.bendProperties.Length, 15) * 22;
                scroll = EditorGUILayout.BeginScrollView(scroll, GUILayout.Height(scrollHeight + 5));

                for (int i = 0; i < bender.bendProperties.Length; i++)
                {
                    bool isSelected = selected.Contains(i);
                    if (!bender.bendProperties[i].enabled)
                    {
                        GUI.color = Color.gray;
                        if (isSelected)
                        {
                            GUI.color = Color.Lerp(Color.gray, SplinePrefs.highlightColor, 0.5f);
                        }
                    }
                    else
                    {
                        if (isSelected)
                        {
                            GUI.color = SplinePrefs.highlightColor;
                        }
                        else
                        {
                            GUI.color = Color.white;
                        }
                    }
                    GUILayout.Box(bender.bendProperties[i].transform.transform.name, GUILayout.Height(18), GUILayout.Width(EditorGUIUtility.currentViewWidth - 60));
                    if (GUILayoutUtility.GetLastRect().Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown)
                    {
                        if (Event.current.control)
                        {
                            if (!selected.Contains(i))
                            {
                                selected.Add(i);
                            }
                        }
                        else if (Event.current.shift && selected.Count > 0)
                        {
                            int from = selected[0];
                            selected.Clear();
                            if (from < i)
                            {
                                for (int n = from; n <= i; n++)
                                {
                                    selected.Add(n);
                                }
                            }
                            else
                            {
                                for (int n = from; n >= i; n--)
                                {
                                    selected.Add(n);
                                }
                            }
                        }
                        else
                        {
                            selected.Clear();
                            selected.Add(i);
                        }
                        Repaint();
                        SceneView.RepaintAll();
                    }
                    GUI.color = Color.white;
                }
                EditorGUILayout.EndScrollView();

                if (selected.Count > 0)
                {
                    PropertyEditor(bender.bendProperties);
                }

                if (selected.Count > 0)
                {
                    if (Event.current.type == EventType.KeyDown)
                    {
                        if (Event.current.keyCode == KeyCode.DownArrow)
                        {
                            if (selected.Count > 1)
                            {
                                int temp = selected[selected.Count - 1];
                                selected.Clear();
                                selected.Add(temp);
                            }
                            selected[0]++;
                            if (selected[0] >= bender.bendProperties.Length)
                            {
                                selected[0] = 0;
                            }
                        }
                        if (Event.current.keyCode == KeyCode.UpArrow)
                        {
                            if (selected.Count > 1)
                            {
                                int temp = selected[0];
                                selected.Clear();
                                selected.Add(temp);
                            }
                            selected[0]--;
                            if (selected[0] < 0)
                            {
                                selected[0] = bender.bendProperties.Length - 1;
                            }
                        }

                        Repaint();
                        SceneView.RepaintAll();
                        Event.current.Use();
                    }
                }
            }
            string editModeText = "Enter Edit Mode";

            if (!bender.bend)
            {
                editModeText = "Bend";
            }
            if (GUILayout.Button(editModeText))
            {
                if (bender.bend)
                {
                    bender.bend = false;
                }
                else
                {
                    bender.bend = true;
                }
            }
            if (bender.bend && !generatedUvs)
            {
                if (GUILayout.Button("Generate Lightmap UVS"))
                {
                    bender.EditorGenerateLightmapUVs();
                    generatedUvs = true;
                }
            }
        }