Esempio n. 1
0
        void OnEnumFlagSelected(FlagsOption option, SerializedProperty property)
        {
            var enumValue = property.GetValue <int>();

            switch (option.Type)
            {
            case FlagsOption.OptionTypes.Everything:
                enumValue = -1;
                break;

            case FlagsOption.OptionTypes.Nothing:
                enumValue = 0;
                break;

            case FlagsOption.OptionTypes.Custom:
                var value = (int)option.Value;

                if ((enumValue & value) == value)
                {
                    enumValue &= ~value;
                }
                else
                {
                    enumValue |= value;
                }
                break;
            }

            property.SetValue(enumValue);
        }
Esempio n. 2
0
        void DrawNumericalFlag()
        {
            var enumValue = currentProperty.GetValue <int>();
            var options   = new FlagsOption[enumValues.Length];

            for (int i = 0; i < options.Length; i++)
            {
                var name  = enumNames[i].Replace('_', '/').ToGUIContent();
                var value = Convert.ToInt32(enumValues.GetValue(i));
                options[i] = new FlagsOption(name, value, (enumValue & value) == value);
            }

            Flags(currentPosition, options, OnEnumFlagSelected, currentLabel, currentProperty);
        }
Esempio n. 3
0
        void DrawByteFlag()
        {
            if (Enum.GetUnderlyingType(enumType) != typeof(byte))
            {
                EditorGUI.HelpBox(currentPosition, string.Format("Underlying type of {0} must be of type {1}.", enumType.Name, typeof(byte)), MessageType.Error);
                return;
            }

            var byteFlag = currentProperty.GetValue <ByteFlag>();
            var options  = new FlagsOption[enumValues.Length];

            for (int i = 0; i < options.Length; i++)
            {
                var name  = enumNames[i].Replace('_', '/').ToGUIContent();
                var value = Convert.ToByte(enumValues.GetValue(i));
                options[i] = new FlagsOption(name, value, byteFlag[value]);
            }

            Flags(currentPosition, options, OnByteFlagSelected, currentLabel, currentProperty);
        }
        void DrawByteFlag()
        {
            if (Enum.GetUnderlyingType(enumType) != typeof(byte))
            {
                EditorGUI.HelpBox(currentPosition, string.Format("Underlying type of {0} must be of type {1}.", enumType.Name, typeof(byte)), MessageType.Error);
                return;
            }

            var byteFlag = currentProperty.GetValue<ByteFlag>();
            var options = new FlagsOption[enumValues.Length];

            for (int i = 0; i < options.Length; i++)
            {
                var name = enumNames[i].Replace('_', '/').ToGUIContent();
                var value = Convert.ToByte(enumValues.GetValue(i));
                options[i] = new FlagsOption(name, value, byteFlag[value]);
            }

            Flags(currentPosition, options, OnByteFlagSelected, currentLabel, currentProperty);
        }
Esempio n. 5
0
        void OnByteFlagSelected(FlagsOption option, SerializedProperty property)
        {
            var byteFlag = property.GetValue <ByteFlag>();

            switch (option.Type)
            {
            case FlagsOption.OptionTypes.Everything:
                byteFlag = new ByteFlag(enumValues.Convert((object v) => Convert.ToByte(v)));
                break;

            case FlagsOption.OptionTypes.Nothing:
                byteFlag = ByteFlag.Nothing;
                break;

            case FlagsOption.OptionTypes.Custom:
                byte value = (byte)option.Value;
                byteFlag = byteFlag[value] ? byteFlag - value : byteFlag + value;
                break;
            }

            property.SetValue(byteFlag);
        }
Esempio n. 6
0
        void OnEnumFlagSelected(FlagsOption option, SerializedProperty property)
        {
            var flags = property.GetValue<IEnumFlag>();

            switch (option.Type)
            {
                case FlagsOption.OptionTypes.Everything:
                    foreach (IEnumFlag value in enumValues)
                        flags = flags.Add(value);
                    break;
                case FlagsOption.OptionTypes.Nothing:
                    foreach (IEnumFlag value in enumValues)
                        flags = flags.Remove(value);
                    break;
                case FlagsOption.OptionTypes.Custom:
                    if (option.IsSelected)
                        flags = flags.Remove((IEnumFlag)option.Value);
                    else
                        flags = flags.Add((IEnumFlag)option.Value);
                    break;
            }

            property.SetValue(flags);
        }
Esempio n. 7
0
        void ShowEnumFlag()
        {
            var enumFlagValue = currentProperty.GetValue<IEnumFlag>();
            var options = new FlagsOption[enumValues.Length];

            for (int i = 0; i < options.Length; i++)
            {
                var flags = (IEnumFlag)enumValues.GetValue(i);
                options[i] = new FlagsOption(enumNames[i].ToGUIContent(), flags, enumFlagValue.HasAll(flags));
            }

            Flags(currentPosition, currentProperty, options, OnEnumFlagSelected, currentLabel);
        }
Esempio n. 8
0
        public static void Flags(Rect position, FlagsOption[] options, Action <FlagsOption, SerializedProperty> onSelected, GUIContent label = null, SerializedProperty property = null)
        {
            label = label ?? property.ToGUIContent();
            int        selectedCount = options.Count(option => option.IsSelected);
            bool       nothing       = selectedCount == 0;
            bool       everything    = selectedCount == options.Length;
            GUIContent popupName;

            position = EditorGUI.PrefixLabel(position, label);

            if (nothing)
            {
                popupName = "Nothing".ToGUIContent();
            }
            else if (everything)
            {
                popupName = "Everything".ToGUIContent();
            }
            else
            {
                var name = "";

                foreach (var option in options)
                {
                    if (option.IsSelected)
                    {
                        if (string.IsNullOrEmpty(name))
                        {
                            name = option.Label.text;
                        }
                        else
                        {
                            name += " | " + option.Label.text;
                        }
                    }
                }

                if (selectedCount > 1 && name.GetWidth(EditorStyles.miniFont) > position.width)
                {
                    popupName = string.Format("Mixed ({0}) ...", selectedCount).ToGUIContent();
                }
                else
                {
                    popupName = name.ToGUIContent();
                }
            }

            int indent = EditorGUI.indentLevel;

            EditorGUI.indentLevel = 0;
            GenericMenu.MenuFunction2 callback = data => onSelected((FlagsOption)data, property);

            if (GUI.Button(position, GUIContent.none, new GUIStyle()))
            {
                var menu = new GenericMenu();

                menu.AddItem(FlagsOption.GetNothing(nothing), callback);
                menu.AddItem(FlagsOption.GetEverything(everything), callback);

                for (int i = 0; i < options.Length; i++)
                {
                    var option = options[i];
                    menu.AddItem(option.Label, option.IsSelected, callback, option);
                }

                menu.DropDown(position);
            }

            EditorGUI.LabelField(position, popupName, EditorStyles.popup);
            EditorGUI.indentLevel = indent;
        }
 public static void AddItem(this GenericMenu menu, FlagsOption option, GenericMenu.MenuFunction2 callback)
 {
     menu.AddItem(option.Label, option.IsSelected, callback, option);
 }
Esempio n. 10
0
        void DrawNumericalFlag()
        {
            var enumValue = currentProperty.GetValue<int>();
            var options = new FlagsOption[enumValues.Length];

            for (int i = 0; i < options.Length; i++)
            {
                var name = enumNames[i].Replace('_', '/').ToGUIContent();
                var value = Convert.ToInt32(enumValues.GetValue(i));
                options[i] = new FlagsOption(name, value, (enumValue & value) == value);
            }

            Flags(currentPosition, options, OnEnumFlagSelected, currentLabel, currentProperty);
        }
Esempio n. 11
0
        void OnEnumFlagSelected(FlagsOption option, SerializedProperty property)
        {
            var enumValue = property.GetValue<int>();

            switch (option.Type)
            {
                case FlagsOption.OptionTypes.Everything:
                    enumValue = -1;
                    break;
                case FlagsOption.OptionTypes.Nothing:
                    enumValue = 0;
                    break;
                case FlagsOption.OptionTypes.Custom:
                    var value = (int)option.Value;

                    if ((enumValue & value) == value)
                        enumValue &= ~value;
                    else
                        enumValue |= value;
                    break;
            }

            property.SetValue(enumValue);
        }
Esempio n. 12
0
        void OnByteFlagSelected(FlagsOption option, SerializedProperty property)
        {
            var byteFlag = property.GetValue<ByteFlag>();

            switch (option.Type)
            {
                case FlagsOption.OptionTypes.Everything:
                    byteFlag = new ByteFlag(enumValues.Convert((object v) => Convert.ToByte(v)));
                    break;
                case FlagsOption.OptionTypes.Nothing:
                    byteFlag = ByteFlag.Nothing;
                    break;
                case FlagsOption.OptionTypes.Custom:
                    byte value = (byte)option.Value;
                    byteFlag = byteFlag[value] ? byteFlag - value : byteFlag + value;
                    break;
            }

            property.SetValue(byteFlag);
        }
Esempio n. 13
0
 public static void AddItem(this GenericMenu menu, FlagsOption option, GenericMenu.MenuFunction2 callback)
 {
     menu.AddItem(option.Label, option.IsSelected, callback, option);
 }