123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using UnityEditor;
- using UnityEngine;
- namespace HQFPSWeapons
- {
- [CustomPropertyDrawer(typeof(ItemProperty.Value))]
- public class ItemPropertyDrawer : PropertyDrawer
- {
- public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
- {
- position = EditorGUI.IndentedRect(position);
- position.x -= 16f
- ;
- var name = property.FindPropertyRelative("m_Name");
- float initialX = position.x;
- // Source label
- position.width = 64f;
- position.height = 16f;
- UnityEngine.GUI.Label(position, "Property: ");
- // Source popup
- var allProperties = ItemDatabase.Default.GetAllPropertyNames();
- if(allProperties.Length == 0)
- return;
- position.x = position.xMax;
- position.width = 128f;
- int selectedIndex = GetStringIndex(name.stringValue, allProperties);
- selectedIndex = EditorGUI.Popup(position, selectedIndex, allProperties);
- name.stringValue = allProperties[selectedIndex];
- // Value label
- position.x = initialX;
- position.width = 64f;
- position.y = position.yMax + 4f;
- UnityEngine.GUI.Label(position, "Value: ");
- // Show the correct value based on the selected type
- position.x = position.xMax;
- DrawFloatProperty(position, property.FindPropertyRelative("m_Float"));
- }
- public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
- {
- return 36f;
- }
- public static int GetStringIndex(string str, string[] strings)
- {
- for(int i = 0;i < strings.Length;i ++)
- if(strings[i] == str)
- return i;
- return 0;
- }
- private static void DrawFloatProperty(Rect position, SerializedProperty property)
- {
- var current = property.FindPropertyRelative("m_Current");
- var defaultVal = property.FindPropertyRelative("m_Default");
- current.floatValue = EditorGUI.FloatField(position, current.floatValue);
- defaultVal.floatValue = current.floatValue;
- }
- }
- }
|