protected override void Awake()
        {
            ObjectBender bender = (ObjectBender)target;

            if (!Application.isPlaying)
            {
                bender.UpdateReferences();
            }
            base.Awake();
        }
        protected override void OnSceneGUI()
        {
            base.OnSceneGUI();
            ObjectBender bender = (ObjectBender)target;

            if (selected.Count > 0)
            {
                Handles.BeginGUI();
                for (int i = 0; i < selected.Count; i++)
                {
                    Vector2 screenPosition = HandleUtility.WorldToGUIPoint(bender.bendProperties[selected[i]].transform.transform.position);
                    DreamteckEditorGUI.Label(new Rect(screenPosition.x - 120 + bender.bendProperties[selected[i]].transform.transform.name.Length * 4, screenPosition.y, 120, 25), bender.bendProperties[selected[i]].transform.transform.name);
                }
                Handles.EndGUI();
            }
            for (int i = 0; i < bender.bendProperties.Length; i++)
            {
                if (bender.bendProperties[i].bendSpline && bender.bendProperties[i].splineComputer != null)
                {
                    SplineDrawer.DrawSplineComputer(bender.bendProperties[i].splineComputer, 0.0, 1.0, 0.2f);
                }
            }

            //Draw bounds
            if (bender.bend)
            {
                return;
            }
            TS_Bounds bound = bender.GetBounds();
            Vector3   a     = bender.transform.TransformPoint(bound.min);
            Vector3   b     = bender.transform.TransformPoint(new Vector3(bound.max.x, bound.min.y, bound.min.z));
            Vector3   c     = bender.transform.TransformPoint(new Vector3(bound.max.x, bound.min.y, bound.max.z));
            Vector3   d     = bender.transform.TransformPoint(new Vector3(bound.min.x, bound.min.y, bound.max.z));

            Vector3 e = bender.transform.TransformPoint(new Vector3(bound.min.x, bound.max.y, bound.min.z));
            Vector3 f = bender.transform.TransformPoint(new Vector3(bound.max.x, bound.max.y, bound.min.z));
            Vector3 g = bender.transform.TransformPoint(new Vector3(bound.max.x, bound.max.y, bound.max.z));
            Vector3 h = bender.transform.TransformPoint(new Vector3(bound.min.x, bound.max.y, bound.max.z));

            Handles.color = Color.gray;
            Handles.DrawLine(a, b);
            Handles.DrawLine(b, c);
            Handles.DrawLine(c, d);
            Handles.DrawLine(d, a);

            Handles.DrawLine(e, f);
            Handles.DrawLine(f, g);
            Handles.DrawLine(g, h);
            Handles.DrawLine(h, e);

            Handles.DrawLine(a, e);
            Handles.DrawLine(b, f);
            Handles.DrawLine(c, g);
            Handles.DrawLine(d, h);

            Vector3 r  = bender.transform.right;
            Vector3 fr = bender.transform.forward;

            switch (bender.axis)
            {
            case ObjectBender.Axis.Z: Handles.color = Color.blue; Handles.DrawLine(r + b, r + c);  break;

            case ObjectBender.Axis.X: Handles.color = Color.red; Handles.DrawLine(b - fr, a - fr); break;

            case ObjectBender.Axis.Y: Handles.color = Color.green; Handles.DrawLine(b - fr + r, f - fr + r); break;
            }
        }
        protected override void BodyGUI()
        {
            base.BodyGUI();
            ObjectBender bender     = (ObjectBender)target;
            int          childCount = 0;

            GetChildCount(bender.transform, ref childCount);
            if (bender.bendProperties.Length - 1 != childCount && !Application.isPlaying)
            {
                bender.UpdateReferences();
            }
            bender.axis   = (ObjectBender.Axis)EditorGUILayout.EnumPopup("Axis", bender.axis);
            bender.upMode = (ObjectBender.NormalMode)EditorGUILayout.EnumPopup("Up Vector", bender.upMode);
            if (bender.upMode == ObjectBender.NormalMode.Custom)
            {
                bender.customNormal = EditorGUILayout.Vector3Field("Custom Up", bender.customNormal);
            }
            bender.forwardMode = (ObjectBender.ForwardMode)EditorGUILayout.EnumPopup("Forward Vector", bender.forwardMode);
            if (bender.forwardMode == ObjectBender.ForwardMode.Custom)
            {
                bender.customForward = EditorGUILayout.Vector3Field("Custom Forward", bender.customForward);
            }
            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;
                }
            }
        }
Esempio n. 4
0
        public override void BaseGUI()
        {
            EditorGUILayout.LabelField("ObjectBender is in BETA. Contact [email protected] for support");
            ObjectBender bender = (ObjectBender)target;

            showAveraging = false;
            base.BaseGUI();

            if (bender.bendProperties.Length - 1 != bender.transform.childCount && !Application.isPlaying)
            {
                bender.UpdateReferences();
            }
            bender.axis        = (ObjectBender.Axis)EditorGUILayout.EnumPopup("Axis", bender.axis);
            bender.autoNormals = EditorGUILayout.Toggle("Auto Normals", bender.autoNormals);
            if (bender.autoNormals)
            {
                bender.upVector = EditorGUILayout.Vector3Field("Up Vector3", bender.upVector);
            }
            showProperties = EditorGUILayout.Foldout(showProperties, "Object Properties");
            if (showProperties)
            {
                BendPropertiesGUI(bender.bendProperties);
                if (selectedProperty >= 0)
                {
                    if (Event.current.type == EventType.KeyDown)
                    {
                        if (Event.current.keyCode == KeyCode.DownArrow)
                        {
                            selectedProperty++;
                        }
                        if (Event.current.keyCode == KeyCode.UpArrow)
                        {
                            selectedProperty--;
                        }
                        if (selectedProperty < 0)
                        {
                            selectedProperty = 0;
                        }
                        if (selectedProperty >= bender.bendProperties.Length)
                        {
                            selectedProperty = bender.bendProperties.Length - 1;
                        }
                        drawTransform = bender.bendProperties[selectedProperty].transform.transform;
                        Repaint();
                        SceneView.RepaintAll();
                        Event.current.Use();
                    }
                }
            }
            else
            {
                drawTransform = null;
            }
            string editModeText = "Enter Edit Mode";

            if (!bender.bend)
            {
                editModeText = "Bend";
            }
            if (GUILayout.Button(editModeText))
            {
                if (bender.bend)
                {
                    bender.bend = false;
                }
                else
                {
                    bender.bend = true;
                }
            }
        }