126 lines
1.8 KiB
C#
126 lines
1.8 KiB
C#
using System;
|
|
|
|
using UnityEngine;
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
using UnityEditor;
|
|
|
|
#endif
|
|
|
|
namespace UnityCustom
|
|
{
|
|
public class StringInList : PropertyAttribute
|
|
|
|
{
|
|
|
|
public delegate string[] GetStringList ();
|
|
|
|
|
|
|
|
public StringInList (params string[] list)
|
|
|
|
{
|
|
|
|
List = list;
|
|
|
|
}
|
|
|
|
|
|
|
|
public StringInList (Type type, string methodName)
|
|
|
|
{
|
|
|
|
var method = type.GetMethod(methodName);
|
|
|
|
if (method != null)
|
|
|
|
{
|
|
|
|
List = method.Invoke(null, null) as string[];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Debug.LogError("NO SUCH METHOD " + methodName + " FOR " + type);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public string[] List
|
|
|
|
{
|
|
|
|
get;
|
|
|
|
private set;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
[CustomPropertyDrawer(typeof(StringInList))]
|
|
|
|
public class StringInListDrawer : PropertyDrawer
|
|
|
|
{
|
|
|
|
// Draw the property inside the given rect
|
|
|
|
public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
|
|
|
|
{
|
|
|
|
var stringInList = attribute as StringInList;
|
|
|
|
var list = stringInList.List;
|
|
|
|
if (property.propertyType == SerializedPropertyType.String)
|
|
|
|
{
|
|
|
|
int index = Mathf.Max(0, Array.IndexOf(list, property.stringValue));
|
|
|
|
index = EditorGUI.Popup(position, property.displayName, index, list);
|
|
|
|
|
|
|
|
property.stringValue = list[index];
|
|
|
|
}
|
|
|
|
else if (property.propertyType == SerializedPropertyType.Integer)
|
|
|
|
{
|
|
|
|
property.intValue = EditorGUI.Popup(position, property.displayName, property.intValue, list);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
base.OnGUI(position, property, label);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
}
|