evershade/Packages/super-tiled2unity.v2.2.0/Editor/Settings/CustomPropertiesWindow.cs

99 lines
3.3 KiB
C#

using System.Linq;
using UnityEditor;
using UnityEngine;
namespace SuperTiled2Unity.Editor
{
public class CustomPropertiesWindow : EditorWindow
{
private static readonly GUIContent m_TitleContent = new GUIContent("Custom Object Types Properties", "These are the objects created in the Object Types Editor in Tiled.");
private Vector2 m_ScrollPosition;
public static void ShowCustomPropertiesWindow()
{
ST2USettings.instance.RefreshCustomObjectTypes();
GetWindow<CustomPropertiesWindow>("SuperTiled2Unity Custom Properties Viewer");
}
private void OnGUI()
{
using (var scroll = new GUILayout.ScrollViewScope(m_ScrollPosition))
{
m_ScrollPosition = scroll.scrollPosition;
OnGUICustomProperties();
OnGUIButtons();
}
}
private void OnGUICustomProperties()
{
EditorGUILayout.LabelField(m_TitleContent, EditorStyles.boldLabel);
foreach (var obj in ST2USettings.instance.m_CustomObjectTypes)
{
EditorGUILayout.Space();
OnGUICustomObjectType(obj);
EditorGUILayout.Space();
}
}
private void OnGUICustomObjectType(CustomObjectType obj)
{
using (new GUILayout.VerticalScope(EditorStyles.helpBox))
{
EditorGUILayout.LabelField(obj.m_Name);
GUI.enabled = false;
EditorGUILayout_ColorFieldNoEdit(GUIContent.none, obj.m_Color);
GUI.enabled = true;
EditorGUILayout.Space();
if (obj.m_CustomProperties.Any())
{
using (new GuiScopedIndent())
{
using (new GUILayout.VerticalScope(EditorStyles.helpBox))
{
foreach (var customProperty in obj.m_CustomProperties)
{
using (new GUILayout.HorizontalScope())
{
EditorGUILayout.LabelField(customProperty.m_Name);
EditorGUILayout.LabelField(customProperty.m_Value, EditorStyles.textField);
EditorGUILayout.LabelField(customProperty.m_Type);
}
}
}
}
}
}
}
private void OnGUIButtons()
{
EditorGUILayout.Space();
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button("Refresh Properties"))
{
ST2USettings.instance.RefreshCustomObjectTypes();
}
if (GUILayout.Button("Close Custom Properties Viewer"))
{
Close();
return;
}
}
}
internal static void EditorGUILayout_ColorFieldNoEdit(GUIContent label, Color color)
{
EditorGUILayout.ColorField(label, color, false, true, false);
}
}
}