Files
HOILAI-Galgame-Framework/Old version_1.0/Assets/HGF/Scripts/StringInList.cs
2025-03-24 19:57:26 +08:00

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
}