using UnityEditor; using UnityEngine; namespace Flexalon.Editor { [CustomEditor(typeof(FlexalonGridLayout)), CanEditMultipleObjects] public class FlexalonGridLayoutEditor : FlexalonComponentEditor { private SerializedProperty _cellType; private SerializedProperty _columns; private SerializedProperty _rows; private SerializedProperty _layers; private SerializedProperty _columnDirection; private SerializedProperty _layerDirection; private SerializedProperty _rowDirection; private SerializedProperty _rowSizeType; private SerializedProperty _rowSize; private SerializedProperty _columnSizeType; private SerializedProperty _columnSize; private SerializedProperty _layerSizeType; private SerializedProperty _layerSize; private SerializedProperty _columnSpacing; private SerializedProperty _rowSpacing; private SerializedProperty _layerSpacing; private SerializedProperty _horizontalAlign; private SerializedProperty _verticalAlign; private SerializedProperty _depthAlign; private GUIContent _rowSizeLabel; private GUIContent _columnSizeLabel; private GUIContent _layerSizeLabel; [MenuItem("GameObject/Flexalon/Grid Layout")] public static void Create(MenuCommand command) { FlexalonComponentEditor.Create("Grid Layout", command.context); } void OnEnable() { _cellType = serializedObject.FindProperty("_cellType"); _columns = serializedObject.FindProperty("_columns"); _rows = serializedObject.FindProperty("_rows"); _layers = serializedObject.FindProperty("_layers"); _columnDirection = serializedObject.FindProperty("_columnDirection"); _rowDirection = serializedObject.FindProperty("_rowDirection"); _layerDirection = serializedObject.FindProperty("_layerDirection"); _rowSizeType = serializedObject.FindProperty("_rowSizeType"); _rowSize = serializedObject.FindProperty("_rowSize"); _columnSizeType = serializedObject.FindProperty("_columnSizeType"); _columnSize = serializedObject.FindProperty("_columnSize"); _layerSizeType = serializedObject.FindProperty("_layerSizeType"); _layerSize = serializedObject.FindProperty("_layerSize"); _columnSpacing = serializedObject.FindProperty("_columnSpacing"); _rowSpacing = serializedObject.FindProperty("_rowSpacing"); _layerSpacing = serializedObject.FindProperty("_layerSpacing"); _horizontalAlign = serializedObject.FindProperty("_horizontalAlign"); _verticalAlign = serializedObject.FindProperty("_verticalAlign"); _depthAlign = serializedObject.FindProperty("_depthAlign"); _rowSizeLabel = new GUIContent("Row Size"); _columnSizeLabel = new GUIContent("Column Size"); _layerSizeLabel = new GUIContent("Layer Size"); } public override void OnInspectorGUI() { serializedObject.Update(); ForceUpdateButton(); SerializedObject so = serializedObject; EditorGUILayout.PropertyField(_cellType); EditorGUILayout.PropertyField(_columns); EditorGUILayout.PropertyField(_rows); EditorGUILayout.PropertyField(_layers); EditorGUILayout.PropertyField(_columnDirection); EditorGUILayout.PropertyField(_rowDirection); EditorGUILayout.PropertyField(_layerDirection); CreateSizeProperty(_columnSizeType, _columnSize, _columnSizeLabel); CreateSizeProperty(_rowSizeType, _rowSize, _rowSizeLabel); CreateSizeProperty(_layerSizeType, _layerSize, _layerSizeLabel); EditorGUILayout.PropertyField(_columnSpacing); EditorGUILayout.PropertyField(_rowSpacing); EditorGUILayout.PropertyField(_layerSpacing); EditorGUILayout.PropertyField(_horizontalAlign); EditorGUILayout.PropertyField(_verticalAlign); EditorGUILayout.PropertyField(_depthAlign); ApplyModifiedProperties(); } private void CreateSizeProperty(SerializedProperty typeProperty, SerializedProperty sizeProperty, GUIContent label) { EditorGUILayout.BeginHorizontal(); bool showLabel = true; if (typeProperty.enumValueIndex == (int)FlexalonGridLayout.CellSizeTypes.Fixed) { showLabel = false; EditorGUILayout.PropertyField(sizeProperty, label, true); } EditorGUILayout.PropertyField(typeProperty, showLabel ? label : GUIContent.none, true); EditorGUILayout.EndHorizontal(); } } }