protected override void Awake() { ObjectBender bender = (ObjectBender)target; if (!Application.isPlaying) { bender.UpdateReferences(); } base.Awake(); }
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; } } }