C#
  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
using BepInEx;
using BepInEx.Configuration;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using UnityEngine;

namespace RiskOfOptions_Example
{
    [BepInPlugin(Guid, ModName, Version)]
    public sealed class RiskOfOptionsExamplePlugin : BaseUnityPlugin
    {
        private const string
            ModName = "Risk Of Options Example",
            Author = "rune580",
            Guid = "com." + Author + "." + "riskofoptions-example",
            Version = "1.0.0";

        private ConfigEntry<bool> _disabled;

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Code Quality", "IDE0051:Remove unused private members", Justification = "Awake is automatically called by Unity")]
        private void Awake()
        {
            GeneralShowcase();
            DisableShowcase();
        }

        private void GeneralShowcase()
        {
            ModSettingsManager.AddOption(new CheckBoxOption(Config.Bind("General",
                "CheckBox",
                false,
                "Normal CheckBox with default config")));
            
            ModSettingsManager.AddOption(new SliderOption(Config.Bind("General",
                "Slider",
                50f,
                "Normal Slider with default config")));
            
            ModSettingsManager.AddOption(new SliderOption(Config.Bind("General",
                    "Limited Slider",
                    75f,
                    "Slider with limited range 70 - 130"),
                new SliderConfig
                {
                    min = 70f,
                    max = 130f
                }));
            
            ModSettingsManager.AddOption(new StepSliderOption(Config.Bind("General",
                    "Stepped Slider",
                    2f,
                    "Slider with limited range 70 - 130"),
                new StepSliderConfig
                {
                    min = 1f,
                    max = 6f,
                    increment = 0.25f
                }));
            
            ModSettingsManager.AddOption(new IntSliderOption(Config.Bind("General",
                "Int Slider",
                3,
                "Slider limited to whole numbers with a range of 1 - 10"),
                new IntSliderConfig
                {
                    min = 1,
                    max = 10
                }));

            var key = Config.Bind("General",
                "KeyBind",
                new KeyboardShortcut(KeyCode.A),
                "KeyBind with a default keycode of `A`");

            ModSettingsManager.AddOption(new KeyBindOption(key));
            
            ModSettingsManager.AddOption(new StringInputFieldOption(Config.Bind("General",
                "InputField",
                "",
                "Input Field")));
            
            ModSettingsManager.AddOption(new GenericButtonOption("GenericButton",
                "General",
                "GenericButton that invokes the attached option",
                "Invokes Action",
                () => Debug.Log("Action invoked!")));

            ConfigEntry<MyEnum> testEnum = Config.Bind("General", "Choice", MyEnum.Two, "Choice Description");

            ModSettingsManager.AddOption(new ChoiceOption(testEnum));
            
            ModSettingsManager.AddOption(new ColorOption(Config.Bind("General",
                "Color Picker",
                Color.green,
                "A color option that opens a color picker to modify.")));
        }

        private void DisableShowcase()
        {
            _disabled = Config.Bind("Disable",
                "Toggle",
                false,
                "");
            
            ModSettingsManager.AddOption(new CheckBoxOption(_disabled));
            
            ModSettingsManager.AddOption(new CheckBoxOption(Config.Bind("Disable",
                "CheckBox",
                false,
                ""),
                new CheckBoxConfig { checkIfDisabled = Disabled }));
            
            ModSettingsManager.AddOption(new SliderOption(Config.Bind("Disable",
                "Slider",
                50f,
                ""),
                new SliderConfig { checkIfDisabled = Disabled }));
            
            ModSettingsManager.AddOption(new StepSliderOption(Config.Bind("Disable",
                    "Stepped Slider",
                    2f,
                    ""),
                new StepSliderConfig
                {
                    min = 1f,
                    max = 6f,
                    increment = 0.25f,
                    checkIfDisabled = Disabled
                }));
            
            ModSettingsManager.AddOption(new IntSliderOption(Config.Bind("Disable",
                    "Int Slider",
                    3,
                    ""),
                new IntSliderConfig
                {
                    min = 1,
                    max = 10,
                    checkIfDisabled = Disabled
                }));
            
            ModSettingsManager.AddOption(new KeyBindOption(Config.Bind("Disable",
                "KeyBind",
                new KeyboardShortcut(KeyCode.A),
                ""),
                new KeyBindConfig { checkIfDisabled = Disabled }));
            
            ModSettingsManager.AddOption(new StringInputFieldOption(Config.Bind("Disable",
                "InputField",
                "",
                ""),
                new InputFieldConfig { checkIfDisabled = Disabled }));
            
            ModSettingsManager.AddOption(new ChoiceOption(Config.Bind("Disable",
                "Choice",
                MyEnum.Two,
                ""),
                new ChoiceConfig { checkIfDisabled = Disabled }));
            
            ModSettingsManager.AddOption(new ColorOption(Config.Bind("Disable",
                "Color Picker",
                Color.green,
                "A color option that opens a color picker to modify."),
                new ColorOptionConfig { checkIfDisabled = Disabled }));
        }

        private bool Disabled()
        {
            return _disabled.Value;
        }
        
        public enum MyEnum
        {
            None,
            Two,
            Eight
        }
    }
}