using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UltimateBag { /// /// Class that specifies how a setting should be displayed inside the ConfigurationManager settings window. /// /// Usage: /// This class template has to be copied inside the plugin's project and referenced by its code directly. /// make a new instance, assign any fields that you want to override, and pass it as a tag for your setting. /// /// If a field is null (default), it will be ignored and won't change how the setting is displayed. /// If a field is non-null (you assigned a value to it), it will override default behavior. /// /// /// /// Here's an example of overriding order of settings and marking one of the settings as advanced: /// /// // Override IsAdvanced and Order /// Config.AddSetting("X", "1", 1, new ConfigDescription("", null, new ConfigurationManagerAttributes { IsAdvanced = true, Order = 3 })); /// // Override only Order, IsAdvanced stays as the default value assigned by ConfigManager /// Config.AddSetting("X", "2", 2, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 1 })); /// Config.AddSetting("X", "3", 3, new ConfigDescription("", null, new ConfigurationManagerAttributes { Order = 2 })); /// /// /// /// /// You can read more and see examples in the readme at https://github.com/BepInEx/BepInEx.ConfigurationManager /// You can optionally remove fields that you won't use from this class, it's the same as leaving them null. /// #pragma warning disable 0169, 0414, 0649 internal sealed class ConfigurationManagerAttributes { /// /// Should the setting be shown as a percentage (only use with value range settings). /// public bool? ShowRangeAsPercent; /// /// Custom setting editor (OnGUI code that replaces the default editor provided by ConfigurationManager). /// See below for a deeper explanation. Using a custom drawer will cause many of the other fields to do nothing. /// public System.Action CustomDrawer; /// /// Show this setting in the settings screen at all? If false, don't show. /// public bool? Browsable; /// /// Category the setting is under. Null to be directly under the plugin. /// public string Category; /// /// If set, a "Default" button will be shown next to the setting to allow resetting to default. /// public object DefaultValue; /// /// Force the "Reset" button to not be displayed, even if a valid DefaultValue is available. /// public bool? HideDefaultButton; /// /// Force the setting name to not be displayed. Should only be used with a to get more space. /// Can be used together with to gain even more space. /// public bool? HideSettingName; /// /// Optional description shown when hovering over the setting. /// Not recommended, provide the description when creating the setting instead. /// public string Description; /// /// Name of the setting. /// public string DispName; /// /// Order of the setting on the settings list relative to other settings in a category. /// 0 by default, higher number is higher on the list. /// public int? Order; /// /// Only show the value, don't allow editing it. /// public bool? ReadOnly; /// /// If true, don't show the setting by default. User has to turn on showing advanced settings or search for it. /// public bool? IsAdvanced; /// /// Custom converter from setting type to string for the built-in editor textboxes. /// public System.Func ObjToStr; /// /// Custom converter from string to setting type for the built-in editor textboxes. /// public System.Func StrToObj; } }