11using System.Collections.Generic;
24 private string[] _enumNames;
25 private int[] _enumValues;
27 public void DrawProperty(Rect rect, SerializedProperty property, GUIContent label) {
28 if (_enumNames ==
null) {
29 string[] names = (
string[])Enum.GetNames(
fieldInfo.FieldType);
30 int[] values = (
int[])Enum.GetValues(
fieldInfo.FieldType);
32 int count = values.Query().Count(v => v != 0);
33 _enumNames =
new string[count];
34 _enumValues =
new int[count];
37 for (
int i = 0; i < names.Length; i++) {
38 if (values[i] == 0)
continue;
40 _enumNames[index] = names[i];
41 _enumValues[index] = values[i];
46 int convertedMask = 0;
47 for (
int i = 0; i < _enumValues.Length; i++) {
48 if ((property.intValue & _enumValues[i]) != 0) {
49 convertedMask |= (1 << i);
53 int resultMask = EditorGUI.MaskField(rect, label, convertedMask, _enumNames);
58 while (resultMask != 0 && index < _enumValues.Length) {
59 if ((resultMask & 1) != 0) {
60 propertyMask |= _enumValues[index];
64 resultMask = resultMask >> 1;
68 property.intValue = propertyMask;
71 public override IEnumerable<SerializedPropertyType> SupportedTypes {
73 yield
return SerializedPropertyType.Enum;