33using MonkeyLoader . Configuration ;
44using System ;
55using System . Collections . Generic ;
6+ using System . Diagnostics . CodeAnalysis ;
67using System . Linq ;
78using System . Reflection ;
89
@@ -13,10 +14,14 @@ namespace ResoniteModLoader
1314 /// </summary>
1415 public class ModConfigurationDefinitionBuilder
1516 {
16- private static readonly Type _modConfigKeyType = typeof ( ModConfigurationKey ) ;
1717 private static readonly MethodInfo _addRangeComponentMethod = AccessTools . Method ( typeof ( ModConfigurationDefinitionBuilder ) , nameof ( AddRangeComponent ) ) ;
18+ private static readonly string [ ] _definitiveEnabledToggles = new [ ] { "enabled" , "mod enabled" , "mod_enabled" , "is_enabled" } ;
19+ private static readonly string [ ] _indicativeEnabledToggles = new [ ] { "enabled" } ;
20+ private static readonly Type _modConfigKeyType = typeof ( ModConfigurationKey ) ;
21+
1822 private readonly HashSet < ModConfigurationKey > _keys = new ( ) ;
1923 private readonly ResoniteModBase _owner ;
24+
2025 private bool _autoSaveConfig = true ;
2126 private Version _configVersion = new ( 1 , 0 , 0 ) ;
2227
@@ -88,6 +93,43 @@ internal void ProcessAttributes()
8893 . Do ( ProcessField ) ;
8994 }
9095
96+ internal bool TryGetEnabledToggle ( [ NotNullWhen ( true ) ] out DefiningConfigKey < bool > ? enabledToggleKey , bool remove = true )
97+ {
98+ enabledToggleKey = null ;
99+ ModConfigurationKey ? enabledToggle = null ;
100+
101+ var potentialKeys = _keys . OfType < ModConfigurationKey < bool > > ( ) . ToArray ( ) ;
102+
103+ foreach ( var definitiveEnabledToggle in _definitiveEnabledToggles )
104+ {
105+ if ( potentialKeys . FirstOrDefault ( key => key . Name . Equals ( definitiveEnabledToggle , StringComparison . OrdinalIgnoreCase ) ) is ModConfigurationKey enabledKey )
106+ {
107+ enabledToggle = enabledKey ;
108+ break ;
109+ }
110+ }
111+
112+ if ( enabledToggle is null )
113+ {
114+ potentialKeys = potentialKeys
115+ . Where ( key => _indicativeEnabledToggles
116+ . Any ( name => key . Name . Contains ( name , StringComparison . OrdinalIgnoreCase ) ) )
117+ . ToArray ( ) ;
118+
119+ if ( potentialKeys . Length != 1 )
120+ return false ;
121+
122+ enabledToggle = potentialKeys [ 0 ] ;
123+ }
124+
125+ enabledToggleKey = ( DefiningConfigKey < bool > ) enabledToggle . UntypedKey ;
126+
127+ if ( remove )
128+ _keys . Remove ( enabledToggle ) ;
129+
130+ return true ;
131+ }
132+
91133 private static void AddRangeComponent < T > ( DefiningConfigKey < T > key , T min , T max )
92134 {
93135 var rangeComponent = new ConfigKeyRange < T > ( min , max , null ) ;
0 commit comments