public static void MaskField(Rect position, GUIContent label, Type type, int value, Action <int> action, bool showExtraOptions = true, GUIStyle style = null)
        {
            if (style == null)
            {
                style = EditorStyles.popup;
            }

            if (GUI.Button(position, label, style))
            {
                var popupWindow = new FunctioningMaskField(type, value, showExtraOptions, action);
                PopupWindow.Show(position, popupWindow);
            }
        }
        public static void EnumFlagsField(GUIContent label, SerializedProperty property, Type type, GUIStyle style, params GUILayoutOption[] options)
        {
#if UNITY_2017_3_OR_ABOVE
            var enumValue = (Enum)Enum.ToObject(type, property.intValue);
            EditorGUI.BeginChangeCheck();
            EditorGUILayout.EnumFlagsField
            if (EditorGUI.EndChangeCheck())
            {
                property.intValue = (int)Enum.ToObject(type, result);
            }
#else
            var position     = EditorGUILayout.GetControlRect();
            int controlID    = EditorGUIUtility.GetControlID(EnumFieldsHashCode, FocusType.Keyboard, position);
            var propertyRect = EditorGUI.PrefixLabel(position, controlID, label);
            FunctioningMaskField.MaskField(propertyRect, type, property);
#endif
        }