You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
mapbox-sdk/Unity/Editor/ScriptablePaletteEditor.cs

108 lines
4.5 KiB

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);
}
}
}