private void DrawEndGameCondition(EndGameCondition condition) { var oldLabelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = EditorConfig.LargeLabelWidth; GUILayout.BeginVertical(); var fields = condition.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public).OrderBy(x => ((OrderAttribute)x.GetCustomAttributes(typeof(OrderAttribute), false)[0]).Order).ToArray(); for (var i = 0; i < fields.Length; i++) { var attribute = Attribute.GetCustomAttribute(fields[i], typeof(FieldAttribute)) as FieldAttribute; if (attribute != null) { GUILayout.BeginHorizontal(); attribute.Draw(gameConfig, condition, ref fields[i]); GUILayout.EndHorizontal(); } } GUILayout.EndVertical(); EditorGUIUtility.labelWidth = oldLabelWidth; }
public GameConfigurationEditor(GameConfiguration config) : base(config) { gameStartActionList = EditorUtils.SetupReorderableList("Game start actions", gameConfig.properties.gameStartActions, ref currentGameStartAction, (rect, x) => { EditorGUI.LabelField(new Rect(rect.x, rect.y, 200, EditorGUIUtility.singleLineHeight), x.name); }, (x) => { currentGameStartAction = x; }, () => { var menu = new GenericMenu(); var actionTypes = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(GameAction)); foreach (var action in actionTypes) { menu.AddItem(new GUIContent(StringUtils.DisplayCamelCaseString(action.Name)), false, CreateGameStartActionCallback, action); } menu.ShowAsContext(); }, (x) => { currentGameStartAction = null; }); turnStartActionList = EditorUtils.SetupReorderableList("Turn start actions", gameConfig.properties.turnStartActions, ref currentTurnStartAction, (rect, x) => { EditorGUI.LabelField(new Rect(rect.x, rect.y, 200, EditorGUIUtility.singleLineHeight), x.name); }, (x) => { currentTurnStartAction = x; }, () => { var menu = new GenericMenu(); var actionTypes = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(GameAction)); foreach (var action in actionTypes) { menu.AddItem(new GUIContent(StringUtils.DisplayCamelCaseString(action.Name)), false, CreateTurnStartActionCallback, action); } menu.ShowAsContext(); }, (x) => { currentTurnStartAction = null; }); turnEndActionList = EditorUtils.SetupReorderableList("Turn end actions", gameConfig.properties.turnEndActions, ref currentTurnEndAction, (rect, x) => { EditorGUI.LabelField(new Rect(rect.x, rect.y, 200, EditorGUIUtility.singleLineHeight), x.name); }, (x) => { currentTurnEndAction = x; }, () => { var menu = new GenericMenu(); var actionTypes = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(GameAction)); foreach (var action in actionTypes) { menu.AddItem(new GUIContent(StringUtils.DisplayCamelCaseString(action.Name)), false, CreateTurnEndActionCallback, action); } menu.ShowAsContext(); }, (x) => { currentTurnEndAction = null; }); endGameConditionList = EditorUtils.SetupReorderableList("End game conditions", gameConfig.properties.endGameConditions, ref currentEndGameCondition, (rect, x) => { var conditionString = x.type.ToString() + ": " + x.GetReadableString(gameConfig); EditorGUI.LabelField(new Rect(rect.x, rect.y, 200, EditorGUIUtility.singleLineHeight), conditionString); }, (x) => { currentEndGameCondition = x; }, () => { var menu = new GenericMenu(); var conditionTypes = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(EndGameCondition)); foreach (var condition in conditionTypes) { menu.AddItem(new GUIContent(StringUtils.DisplayCamelCaseString(condition.Name)), false, CreateEndGameConditionCallback, condition); } menu.ShowAsContext(); }, (x) => { currentEndGameCondition = null; }); }