ItemGeneratorDrawer.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using UnityEngine;
  2. using UnityEditor;
  3. namespace HQFPSWeapons
  4. {
  5. [CustomPropertyDrawer(typeof(ItemGenerator))]
  6. public class ItemGeneratorDrawer : PropertyDrawer
  7. {
  8. public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
  9. {
  10. var method = property.FindPropertyRelative("m_Method");
  11. var category = property.FindPropertyRelative("m_Category");
  12. var item = property.FindPropertyRelative("m_Item");
  13. var countMin = property.FindPropertyRelative("m_CountMin");
  14. var countMax = property.FindPropertyRelative("m_CountMax");
  15. //position = EditorGUI.IndentedRect(position);
  16. position.x -= 4f;
  17. float spacing = 4f;
  18. EditorGUI.indentLevel -= 1;
  19. // Method
  20. position.height = 16f;
  21. position.y += spacing;
  22. EditorGUI.PropertyField(position, method);
  23. ItemGenerator.Method methodParsed = (ItemGenerator.Method)method.enumValueIndex;
  24. //if(methodParsed != ItemGenerator.Method.RandomItem)
  25. // USEditorUtility.DoHorizontalLine(new Rect(position.x + 16f, position.yMax, position.width - 16f, 1f));
  26. if(methodParsed == ItemGenerator.Method.RandomItemFromCategory)
  27. {
  28. // Category
  29. position.y = position.yMax + spacing;
  30. EditorGUI.PropertyField(position, category);
  31. }
  32. else if(methodParsed == ItemGenerator.Method.CustomItem)
  33. {
  34. // Item
  35. position.y = position.yMax + spacing;
  36. EditorGUI.PropertyField(position, item);
  37. // Count min
  38. position.y = position.yMax + spacing;
  39. EditorGUI.PropertyField(position, countMin);
  40. // Count max
  41. position.y = position.yMax + spacing;
  42. EditorGUI.PropertyField(position, countMax);
  43. }
  44. EditorGUI.indentLevel += 1;
  45. }
  46. public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
  47. {
  48. ItemGenerator.Method method = (ItemGenerator.Method)property.FindPropertyRelative("m_Method").enumValueIndex;
  49. float defaultHeight = 16f;
  50. float height = 24f;
  51. float spacing = 4f;
  52. if(method == ItemGenerator.Method.CustomItem)
  53. height += (defaultHeight + spacing) * 3;
  54. if(method == ItemGenerator.Method.RandomItemFromCategory)
  55. height += (defaultHeight + spacing) * 1;
  56. return height;
  57. }
  58. }
  59. }