void DrawGroupGUI(int index) { TriggerGroup group = spline.triggerGroups[index]; SerializedObject serializedObject = new SerializedObject(spline); SerializedProperty groups = serializedObject.FindProperty("triggerGroups"); SerializedProperty groupProperty = groups.GetArrayElementAtIndex(index); EditorGUI.indentLevel += 2; if (selectedGroup == index && renameGroup) { if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter)) { renameGroup = false; Repaint(); } group.name = EditorGUILayout.TextField(group.name); } else { group.open = EditorGUILayout.Foldout(group.open, index + " - " + group.name); } Rect lastRect = GUILayoutUtility.GetLastRect(); if (lastRect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown && Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Rename"), false, delegate { RecordUndo("Rename Trigger Group"); selectedGroup = index; renameGroup = true; renameTrigger = false; Repaint(); }); menu.AddItem(new GUIContent("Delete"), false, delegate { RecordUndo("Delete Trigger Group"); ArrayUtility.RemoveAt(ref spline.triggerGroups, index); Repaint(); }); menu.ShowAsContext(); } EditorGUI.indentLevel -= 2; if (!group.open) { return; } for (int i = 0; i < group.triggers.Length; i++) { DrawTriggerGUI(i, index, groupProperty); } if (GUI.changed) { serializedObject.ApplyModifiedProperties(); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Trigger")) { RecordUndo("Add Trigger"); SplineTrigger newTrigger = new SplineTrigger(addTriggerType); newTrigger.name = "Trigger " + (group.triggers.Length + 1); ArrayUtility.Add(ref group.triggers, newTrigger); } addTriggerType = (SplineTrigger.Type)EditorGUILayout.EnumPopup(addTriggerType); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); }
void DrawTriggerGUI(int index, int groupIndex, SerializedProperty groupProperty) { bool isSelected = selected == index && selectedGroup == groupIndex; TriggerGroup group = spline.triggerGroups[groupIndex]; SplineTrigger trigger = group.triggers[index]; SerializedProperty triggersProperty = groupProperty.FindPropertyRelative("triggers"); SerializedProperty triggerProperty = triggersProperty.GetArrayElementAtIndex(index); SerializedProperty eventProperty = triggerProperty.FindPropertyRelative("onCross"); SerializedProperty positionProperty = triggerProperty.FindPropertyRelative("position"); SerializedProperty colorProperty = triggerProperty.FindPropertyRelative("color"); SerializedProperty nameProperty = triggerProperty.FindPropertyRelative("name"); SerializedProperty enabledProperty = triggerProperty.FindPropertyRelative("enabled"); SerializedProperty workOnceProperty = triggerProperty.FindPropertyRelative("workOnce"); SerializedProperty typeProperty = triggerProperty.FindPropertyRelative("type"); Color col = colorProperty.colorValue; if (isSelected) { col.a = 1f; } else { col.a = 0.6f; } GUI.backgroundColor = col; EditorGUILayout.BeginVertical(GUI.skin.box); GUI.backgroundColor = Color.white; if (trigger == null) { EditorGUILayout.BeginHorizontal(); GUILayout.Label("NULL"); if (GUILayout.Button("x")) { ArrayUtility.RemoveAt(ref group.triggers, index); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); return; } if (isSelected && renameTrigger) { if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter)) { renameTrigger = false; Repaint(); } nameProperty.stringValue = EditorGUILayout.TextField(nameProperty.stringValue); } else { EditorGUILayout.LabelField(nameProperty.stringValue); } if (isSelected) { EditorGUILayout.Space(); EditorGUILayout.PropertyField(enabledProperty); EditorGUILayout.PropertyField(colorProperty); EditorGUILayout.BeginHorizontal(); positionProperty.floatValue = EditorGUILayout.Slider("Position", positionProperty.floatValue, 0f, 1f); if (GUILayout.Button("Set Distance", GUILayout.Width(85))) { DistanceWindow w = EditorWindow.GetWindow <DistanceWindow>(true); w.Init(OnSetDistance, spline.CalculateLength()); setDistanceGroup = groupIndex; setDistanceTrigger = index; } EditorGUILayout.EndHorizontal(); EditorGUILayout.PropertyField(typeProperty); EditorGUILayout.PropertyField(workOnceProperty); EditorGUILayout.PropertyField(eventProperty); } EditorGUILayout.EndVertical(); Rect lastRect = GUILayoutUtility.GetLastRect(); if (lastRect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown) { if (Event.current.button == 0) { Select(groupIndex, index); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Deselect"), false, delegate { Select(-1, -1); }); menu.AddItem(new GUIContent("Rename"), false, delegate { Select(groupIndex, index); renameTrigger = true; renameGroup = false; }); if (index > 0) { menu.AddItem(new GUIContent("Move Up"), false, delegate { RecordUndo("Move Trigger Up"); SplineTrigger temp = group.triggers[index - 1]; group.triggers[index - 1] = trigger; group.triggers[index] = temp; selected--; renameTrigger = false; }); } else { menu.AddDisabledItem(new GUIContent("Move Up")); } if (index < group.triggers.Length - 1) { menu.AddItem(new GUIContent("Move Down"), false, delegate { RecordUndo("Move Trigger Down"); SplineTrigger temp = group.triggers[index + 1]; group.triggers[index + 1] = trigger; group.triggers[index] = temp; selected--; renameTrigger = false; }); } else { menu.AddDisabledItem(new GUIContent("Move Down")); } menu.AddItem(new GUIContent("Duplicate"), false, delegate { RecordUndo("Duplicate Trigger"); SplineTrigger newTrigger = new SplineTrigger(SplineTrigger.Type.Double); newTrigger.color = colorProperty.colorValue; newTrigger.enabled = enabledProperty.boolValue; newTrigger.position = positionProperty.floatValue; newTrigger.type = (SplineTrigger.Type)typeProperty.intValue; newTrigger.name = "Trigger " + (group.triggers.Length + 1); ArrayUtility.Add(ref group.triggers, newTrigger); Select(groupIndex, group.triggers.Length - 1); }); menu.AddItem(new GUIContent("Delete"), false, delegate { RecordUndo("Delete Trigger"); ArrayUtility.RemoveAt(ref group.triggers, index); Select(-1, -1); }); menu.ShowAsContext(); } } }
void DrawTriggerGUI(int index, int groupIndex, SerializedProperty groupProperty) { bool isSelected = selected == index && selectedGroup == groupIndex; TriggerGroup group = spline.triggerGroups[groupIndex]; SplineTrigger trigger = group.triggers[index]; SerializedProperty triggersProperty = groupProperty.FindPropertyRelative("triggers"); SerializedProperty triggerProperty = triggersProperty.GetArrayElementAtIndex(index); SerializedProperty eventProperty = triggerProperty.FindPropertyRelative("onCross"); Color col = trigger.color; if (isSelected) { col.a = 1f; } else { col.a = 0.6f; } GUI.backgroundColor = col; EditorGUILayout.BeginVertical(GUI.skin.box); GUI.backgroundColor = Color.white; if (trigger == null) { EditorGUILayout.BeginHorizontal(); GUILayout.Label("NULL"); if (GUILayout.Button("x")) { ArrayUtility.RemoveAt(ref group.triggers, index); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); return; } if (isSelected && renameTrigger) { if (Event.current.type == EventType.KeyDown && (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.KeypadEnter)) { renameTrigger = false; Repaint(); } trigger.name = EditorGUILayout.TextField(trigger.name); } else { EditorGUILayout.LabelField(trigger.name); } if (isSelected) { EditorGUILayout.Space(); trigger.enabled = EditorGUILayout.Toggle("Enabled", trigger.enabled); trigger.color = EditorGUILayout.ColorField("Color", trigger.color); trigger.position = EditorGUILayout.Slider("Position", (float)trigger.position, 0f, 1f); trigger.type = (SplineTrigger.Type)EditorGUILayout.EnumPopup("Type", trigger.type); trigger.workOnce = EditorGUILayout.Toggle("Work Once", trigger.workOnce); EditorGUILayout.PropertyField(eventProperty); } EditorGUILayout.EndVertical(); Rect lastRect = GUILayoutUtility.GetLastRect(); if (lastRect.Contains(Event.current.mousePosition) && Event.current.type == EventType.MouseDown) { if (Event.current.button == 0) { Select(groupIndex, index); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Deselect"), false, delegate { Select(-1, -1); }); menu.AddItem(new GUIContent("Rename"), false, delegate { Select(groupIndex, index); renameTrigger = true; renameGroup = false; }); if (index > 0) { menu.AddItem(new GUIContent("Move Up"), false, delegate { RecordUndo("Move Trigger Up"); SplineTrigger temp = group.triggers[index - 1]; group.triggers[index - 1] = trigger; group.triggers[index] = temp; selected--; renameTrigger = false; }); } else { menu.AddDisabledItem(new GUIContent("Move Up")); } if (index < group.triggers.Length - 1) { menu.AddItem(new GUIContent("Move Down"), false, delegate { RecordUndo("Move Trigger Down"); SplineTrigger temp = group.triggers[index + 1]; group.triggers[index + 1] = trigger; group.triggers[index] = temp; selected--; renameTrigger = false; }); } else { menu.AddDisabledItem(new GUIContent("Move Down")); } menu.AddItem(new GUIContent("Duplicate"), false, delegate { RecordUndo("Duplicate Trigger"); SplineTrigger newTrigger = new SplineTrigger(SplineTrigger.Type.Double); newTrigger.color = trigger.color; newTrigger.enabled = trigger.enabled; newTrigger.position = trigger.position; newTrigger.type = trigger.type; newTrigger.name = "Trigger " + (group.triggers.Length + 1); ArrayUtility.Add(ref group.triggers, newTrigger); Select(groupIndex, group.triggers.Length - 1); }); menu.AddItem(new GUIContent("Delete"), false, delegate { RecordUndo("Delete Trigger"); ArrayUtility.RemoveAt(ref group.triggers, index); Select(-1, -1); }); menu.ShowAsContext(); } } }