public static void DrawUIActionGUI(UnityEngine.Object target) { Initialize(); // early out if no types were found if (uiActionTypes == null || uiActionTypes.Length == 0) { return; } var targetMonobehaviour = target as MonoBehaviour; GUILayout.Label(string.Empty); using (new EditorGUILayout.HorizontalScope()) { GUILayout.Label("State", GUILayout.Width(90)); stateIndex = EditorGUILayout.Popup(stateIndex, stateNames, GUILayout.Width(150)); } using (new EditorGUILayout.HorizontalScope()) { GUILayout.Label("UI Action", GUILayout.Width(90)); uiActionIndex = EditorGUILayout.Popup(uiActionIndex, uiActionNames, GUILayout.Width(150)); } // early out if we just changed drop downs and didn't actually change anything (don't want to mark scene dirty for no reason) if (GUI.changed) { return; } using (new EditorGUILayout.HorizontalScope()) { if (GUILayout.Button("Add", GUILayout.Width(245), GUILayout.Height(14))) { var newComponent = targetMonobehaviour.gameObject.AddComponent(uiActionTypes[uiActionIndex]) as UIAction; newComponent.State = (UIActionState)stateIndex; newComponent.hideFlags = HideFlags.HideInInspector; } } GUILayout.Label(string.Empty); var uiActionComponents = targetMonobehaviour.GetComponents <UIAction>().OrderBy(x => x.State).ThenBy(x => x.Order).ToList(); // early out so we don't draw the grid if the ui object doesn't have any actions yet if (uiActionComponents.Count == 0) { return; } bool orderChanged = false; using (new BeginGridScope(grid)) { for (int i = 0; i < uiActionComponents.Count; i++) { var uiAction = uiActionComponents[i]; // making sure all button actions are hidden in editor uiAction.hideFlags = HideFlags.HideInInspector; if (uiAction.Order != i) { orderChanged = true; uiAction.Order = i; } using (new BeginGridRowScope(grid)) { grid.DrawLabel(uiAction.State.ToString()); uiAction.ActionObject = grid.DrawObject(uiAction.ActionObjectType, uiAction.ActionObject, true); grid.DrawLabel(uiAction.Name); uiAction.ActionValue = grid.DrawUnknownObject(uiAction.ActionValue); } if (grid.RowButtonPressed == GridButton.Delete) { GameObject.DestroyImmediate(uiAction); break; } else if (grid.RowButtonPressed == GridButton.MoveUp && i != 0) { uiActionComponents[i].Order--; uiActionComponents[i - 1].Order++; break; } else if (grid.RowButtonPressed == GridButton.MoveDown && i != uiActionComponents.Count - 1) { uiActionComponents[i].Order++; uiActionComponents[i + 1].Order--; break; } } GUILayout.Label(string.Empty); if (GUI.changed || orderChanged) { EditorUtility.SetDirty(target); EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); } } }
public override void OnInspectorGUI() { EditorGUILayout.Space(); EditorGUILayout.Space(); using (new BeginGridScope(grid)) { using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawFloat(i + 1.0f); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawInt(i + 1); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawBool(i % 2 == 0); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawColor(Color.white); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawLabel("Label " + (i + 1)); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawObject(null, true); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawSprite(null, true); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawString("String " + (i + 1)); } } using (new BeginGridRowScope(grid)) { for (int i = 0; i < ColumnCount; i++) { grid.DrawVector3(new Vector3(i + 1, i + 1, i + 1)); } } } }