50 lines
1.2 KiB
C#
50 lines
1.2 KiB
C#
namespace Fusion.Addons.KCC.Editor
|
|
{
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
[CustomPropertyDrawer(typeof(KCCLayerAttribute))]
|
|
public sealed class KCCLayerDrawer : PropertyDrawer
|
|
{
|
|
// PRIVATE MEMBERS
|
|
|
|
private int[] _layerIDs;
|
|
private GUIContent[] _layerNames;
|
|
|
|
// PropertyDrawer INTERFACE
|
|
|
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
{
|
|
if (_layerNames == null)
|
|
{
|
|
List<int> layerIDs = new List<int>();
|
|
List<GUIContent> layerNames = new List<GUIContent>();
|
|
|
|
for (int i = 0; i < 32; ++i)
|
|
{
|
|
string layerName = LayerMask.LayerToName(i);
|
|
if (string.IsNullOrEmpty(layerName) == false)
|
|
{
|
|
layerIDs.Add(i);
|
|
layerNames.Add(new GUIContent(layerName));
|
|
}
|
|
}
|
|
|
|
_layerIDs = layerIDs.ToArray();
|
|
_layerNames = layerNames.ToArray();
|
|
}
|
|
|
|
int storedLayerIndex = _layerIDs.IndexOf(property.intValue);
|
|
int selectedLayerIndex = EditorGUI.Popup(position, label, storedLayerIndex, _layerNames);
|
|
|
|
if (selectedLayerIndex >= 0 && selectedLayerIndex != storedLayerIndex)
|
|
{
|
|
property.intValue = _layerIDs[selectedLayerIndex];
|
|
|
|
EditorUtility.SetDirty(property.serializedObject.targetObject);
|
|
}
|
|
}
|
|
}
|
|
}
|