using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; [CustomEditor(typeof(ScriptablePalette))] public class ScriptablePaletteEditor : Editor { private const int _NUM_COLORS_MIN = 3; private const int _NUM_COLORS_MAX = 10; private const float _HELPER_TEXT_COLOR_VAL = 0.7f; private const string _COLOR_FIELD_PREFIX = "Color {0}"; private const string _KEY_COLOR_INFO = "Color used as a seed for generating the color palette"; private const string _NUM_COLOR_INFO = "Number of colors to generate in the palette"; private const string _HUE_RANGE_INFO = "Maximum range that randomly generated colors will deviate from the key color hue"; private const string _SAT_RANGE_INFO = "Maximum range that randomly generated colors will deviate from the key color saturation"; private const string _VAL_RANGE_INFO = "Maximum range that randomly generated colors will deviate from the key color value"; override public void OnInspectorGUI() { ScriptablePalette sp = (ScriptablePalette)target; EditorGUILayout.Space(); GUIStyle wrapTextStyle = new GUIStyle(); wrapTextStyle.wordWrap = true; wrapTextStyle.normal.textColor = new Color(_HELPER_TEXT_COLOR_VAL, _HELPER_TEXT_COLOR_VAL, _HELPER_TEXT_COLOR_VAL, 1.0f); EditorGUILayout.LabelField("Generate a palette for building colorization by defining a key color, palette size and hue/saturation/value range parameters.", wrapTextStyle); EditorGUILayout.Space(); EditorGUILayout.LabelField("Base and detail layer colors will be randomly set from the generated palette at runtime for each building.", wrapTextStyle); EditorGUILayout.Space(); GUIContent keyColorContent = new GUIContent("Key color", _KEY_COLOR_INFO); sp.m_keyColor = EditorGUILayout.ColorField(keyColorContent, sp.m_keyColor); EditorGUILayout.Space(); GUIContent numColorContent = new GUIContent("Palette Size", _NUM_COLOR_INFO); sp.m_numColors = EditorGUILayout.IntSlider(numColorContent, sp.m_numColors, _NUM_COLORS_MIN, _NUM_COLORS_MAX); GUIContent hueRangeContent = new GUIContent("Hue Range", _HUE_RANGE_INFO); GUIContent satRangeContent = new GUIContent("Saturation Range", _SAT_RANGE_INFO); GUIContent valRangeContent = new GUIContent("Value Range", _VAL_RANGE_INFO); sp.m_hueRange = EditorGUILayout.Slider(hueRangeContent, sp.m_hueRange, 0, 1); sp.m_saturationRange = EditorGUILayout.Slider(satRangeContent, sp.m_saturationRange, 0, 1); sp.m_valueRange = EditorGUILayout.Slider(valRangeContent, sp.m_valueRange, 0, 1); EditorGUILayout.Space(); if (GUILayout.Button("Generate Palette")) { sp.GeneratePalette(); } GUILayout.Space(20); if(sp.m_colors == null || sp.m_colors.Length == 0) { EditorGUILayout.LabelField("No color palette defined!", EditorStyles.boldLabel); } else { for (int i = 0; i < sp.m_colors.Length; i++) { string fieldName = string.Format(_COLOR_FIELD_PREFIX, i); sp.m_colors[i] = EditorGUILayout.ColorField(fieldName, sp.m_colors[i]); } } GUILayout.Space(20); EditorGUILayout.LabelField("Color Overrides", EditorStyles.boldLabel); EditorGUILayout.Space(); EditorGUILayout.LabelField("Layer colors can be overriden by enabling any of the overrides below.", wrapTextStyle); EditorGUILayout.LabelField("If a layer's color is overridden, it will be set directly from the defined override color.", wrapTextStyle); EditorGUILayout.Space(); sp.m_setBaseColor_Override = EditorGUILayout.Toggle("Override base", sp.m_setBaseColor_Override); if (sp.m_setBaseColor_Override) { sp.m_baseColor_Override = EditorGUILayout.ColorField("Base Color:", sp.m_baseColor_Override); } sp.m_setDetailColor1_Override = EditorGUILayout.Toggle("Override detail 1", sp.m_setDetailColor1_Override); if (sp.m_setDetailColor1_Override) { sp.m_detailColor1_Override = EditorGUILayout.ColorField("Detail 1 Color:", sp.m_detailColor1_Override); } sp.m_setDetailColor2_Override = EditorGUILayout.Toggle("Override detail 2", sp.m_setDetailColor2_Override); if (sp.m_setDetailColor2_Override) { sp.m_detailColor2_Override = EditorGUILayout.ColorField("Detail 2 Color:", sp.m_detailColor2_Override); } } }