22using Overlayer . Core . Interfaces ;
33using Overlayer . Models ;
44using Overlayer . Utils ;
5+ using System ;
6+ using System . IO ;
7+ using System . Xml . Serialization ;
58using UnityModManagerNet ;
69
710namespace Overlayer ;
811
9- public class Settings : UnityModManager . ModSettings , IModel , ICopyable < Settings > {
12+ public class Settings : IModel , ICopyable < Settings > {
1013 public enum EditorUIMode {
1114 Simple ,
1215 Advanced
@@ -62,7 +65,7 @@ public JToken Serialize() {
6265 public void Deserialize ( JToken node ) {
6366 var defaultSettings = new Settings ( ) ;
6467
65- DisableLogo = LegacyGet ( node , nameof ( DisableLogo ) ) ? . Value < bool > ( ) ?? defaultSettings . DisableLogo ;
68+ DisableLogo = node [ nameof ( DisableLogo ) ] ? . Value < bool > ( ) ?? defaultSettings . DisableLogo ;
6669 ChangeFont = node [ nameof ( ChangeFont ) ] ? . Value < bool > ( ) ?? defaultSettings . ChangeFont ;
6770 AdofaiFont = node [ nameof ( AdofaiFont ) ] != null
6871 ? ModelUtils . Unbox < FontMeta > ( node [ nameof ( AdofaiFont ) ] )
@@ -71,20 +74,20 @@ public void Deserialize(JToken node) {
7174 FPSUpdateRate = node [ nameof ( FPSUpdateRate ) ] ? . Value < float > ( ) ?? defaultSettings . FPSUpdateRate ;
7275 FrameTimeUpdateRate = node [ nameof ( FrameTimeUpdateRate ) ] ? . Value < float > ( ) ?? defaultSettings . FrameTimeUpdateRate ;
7376 SystemTagUpdateRate = node [ nameof ( SystemTagUpdateRate ) ] ? . Value < int > ( ) ?? defaultSettings . SystemTagUpdateRate ;
74- LegacyTheme = LegacyUseGet ( node , nameof ( LegacyTheme ) ) ? . Value < bool > ( ) ?? defaultSettings . LegacyTheme ;
75- ShowTrueAutoJudgment = LegacyUseGet ( node , nameof ( ShowTrueAutoJudgment ) ) ? . Value < bool > ( ) ?? defaultSettings . ShowTrueAutoJudgment ;
76- MovingManEditor = LegacyUseGet ( node , nameof ( MovingManEditor ) ) ? . Value < bool > ( ) ?? defaultSettings . MovingManEditor ;
77- ColorRangeEditor = LegacyUseGet ( node , nameof ( ColorRangeEditor ) ) ? . Value < bool > ( ) ?? defaultSettings . ColorRangeEditor ;
78- EasedValueEditor = LegacyUseGet ( node , nameof ( EasedValueEditor ) ) ? . Value < bool > ( ) ?? defaultSettings . EasedValueEditor ;
79- AutoUpdate = LegacyUseGet ( node , nameof ( AutoUpdate ) ) ? . Value < bool > ( ) ?? defaultSettings . AutoUpdate ;
80- AutoUpdateBeta = LegacyUseGet ( node , nameof ( AutoUpdateBeta ) ) ? . Value < bool > ( ) ?? defaultSettings . AutoUpdateBeta ;
81- Tooltip = LegacyUseGet ( node , nameof ( Tooltip ) ) ? . Value < bool > ( ) ?? defaultSettings . Tooltip ;
82- AutoPivot = LegacyGet ( node , nameof ( AutoPivot ) ) ? . Value < bool > ( ) ?? defaultSettings . AutoPivot ;
77+ LegacyTheme = node [ nameof ( LegacyTheme ) ] ? . Value < bool > ( ) ?? defaultSettings . LegacyTheme ;
78+ ShowTrueAutoJudgment = node [ nameof ( ShowTrueAutoJudgment ) ] ? . Value < bool > ( ) ?? defaultSettings . ShowTrueAutoJudgment ;
79+ MovingManEditor = node [ nameof ( MovingManEditor ) ] ? . Value < bool > ( ) ?? defaultSettings . MovingManEditor ;
80+ ColorRangeEditor = node [ nameof ( ColorRangeEditor ) ] ? . Value < bool > ( ) ?? defaultSettings . ColorRangeEditor ;
81+ EasedValueEditor = node [ nameof ( EasedValueEditor ) ] ? . Value < bool > ( ) ?? defaultSettings . EasedValueEditor ;
82+ AutoUpdate = node [ nameof ( AutoUpdate ) ] ? . Value < bool > ( ) ?? defaultSettings . AutoUpdate ;
83+ AutoUpdateBeta = node [ nameof ( AutoUpdateBeta ) ] ? . Value < bool > ( ) ?? defaultSettings . AutoUpdateBeta ;
84+ Tooltip = node [ nameof ( Tooltip ) ] ? . Value < bool > ( ) ?? defaultSettings . Tooltip ;
85+ AutoPivot = node [ nameof ( AutoPivot ) ] ? . Value < bool > ( ) ?? defaultSettings . AutoPivot ;
8386 IncludeReferences = node [ nameof ( IncludeReferences ) ] ? . Value < bool > ( ) ?? defaultSettings . IncludeReferences ;
84- ShowTextNameAsDisplayText = LegacyGet ( node , nameof ( ShowTextNameAsDisplayText ) ) ? . Value < bool > ( ) ?? defaultSettings . ShowTextNameAsDisplayText ;
85- UiMode = EnumHelper < EditorUIMode > . Parse ( LegacyGet ( node , nameof ( UiMode ) ) ? . Value < string > ( ) ?? defaultSettings . UiMode . ToString ( ) ) ;
87+ ShowTextNameAsDisplayText = node [ nameof ( ShowTextNameAsDisplayText ) ] ? . Value < bool > ( ) ?? defaultSettings . ShowTextNameAsDisplayText ;
88+ UiMode = EnumHelper < EditorUIMode > . Parse ( node [ nameof ( UiMode ) ] ? . Value < string > ( ) ?? defaultSettings . UiMode . ToString ( ) ) ;
8689
87- IsFirstEg = LegacyGet ( node , nameof ( IsFirstEg ) ) ? . Value < bool > ( ) ?? defaultSettings . IsFirstEg ;
90+ IsFirstEg = node [ nameof ( IsFirstEg ) ] ? . Value < bool > ( ) ?? defaultSettings . IsFirstEg ;
8891 }
8992 public Settings Copy ( ) {
9093 var newSettings = new Settings {
@@ -110,11 +113,89 @@ public Settings Copy() {
110113 return newSettings ;
111114 }
112115
113- public static JToken LegacyGet ( JToken node , string name ) {
114- return node [ name ] ?? node [ char . ToLower ( name [ 0 ] ) + name . Substring ( 1 ) ] ;
116+ public void Save ( ) {
117+ var path = Path . Combine ( Main . Mod . Path , "Settings.json" ) ;
118+ var json = Serialize ( ) . ToString ( ) ;
119+ File . WriteAllText ( path , json ) ;
115120 }
116121
117- public static JToken LegacyUseGet ( JToken node , string name ) {
118- return node [ name ] ?? node [ "use" + name ] ;
122+ public void Load ( ) {
123+ if ( MigratefromLegacyXmlSettings ( ) ) {
124+ return ;
125+ }
126+
127+ var path = Path . Combine ( Main . Mod . Path , "Settings.json" ) ;
128+ if ( File . Exists ( path ) ) {
129+ var json = File . ReadAllText ( path ) ;
130+ var node = JToken . Parse ( json ) ;
131+ Deserialize ( node ) ;
132+ }
133+ }
134+
135+ private bool MigratefromLegacyXmlSettings ( ) {
136+ var jsonPath = Path . Combine ( Main . Mod . Path , "Settings.json" ) ;
137+ var xmlPath = Path . Combine ( Main . Mod . Path , "Settings.xml" ) ;
138+
139+ if ( File . Exists ( jsonPath ) ) {
140+ return false ;
141+ }
142+
143+ if ( ! File . Exists ( xmlPath ) ) {
144+ return false ;
145+ }
146+
147+ var serializer = new XmlSerializer ( typeof ( LegacyXmlSettings ) ) ;
148+ using ( var stream = File . OpenRead ( xmlPath ) ) {
149+ var legacy = ( LegacyXmlSettings ) serializer . Deserialize ( stream ) ;
150+
151+ DisableLogo = legacy . disableLogo ;
152+ ChangeFont = legacy . ChangeFont ;
153+ AdofaiFont = legacy . AdoFont ;
154+ Lang = legacy . Lang ;
155+ FPSUpdateRate = legacy . FPSUpdateRate ;
156+ FrameTimeUpdateRate = legacy . FrameTimeUpdateRate ;
157+ SystemTagUpdateRate = legacy . SystemTagUpdateRate ;
158+ LegacyTheme = legacy . useLegacyTheme ;
159+ ShowTrueAutoJudgment = legacy . useShowTrueAutoJudgment ;
160+ MovingManEditor = legacy . useMovingManEditor ;
161+ ColorRangeEditor = legacy . useColorRangeEditor ;
162+ EasedValueEditor = legacy . useEasedValueEditor ;
163+ AutoUpdate = legacy . useAutoUpdate ;
164+ AutoUpdateBeta = legacy . useAutoUpdateBeta ;
165+ Tooltip = legacy . useTooltip ;
166+ AutoPivot = legacy . autoPivot ;
167+ ShowTextNameAsDisplayText = legacy . showTextNameAsDisplayText ;
168+ UiMode = legacy . uiMode ;
169+ IsFirstEg = legacy . isFirstEg ;
170+ }
171+
172+ Save ( ) ;
173+
174+ File . Delete ( xmlPath ) ;
175+
176+ return true ;
177+ }
178+
179+ [ Serializable ]
180+ public class LegacyXmlSettings {
181+ public bool disableLogo ;
182+ public bool ChangeFont ;
183+ public FontMeta AdoFont ;
184+ public string Lang ;
185+ public float FPSUpdateRate ;
186+ public float FrameTimeUpdateRate ;
187+ public int SystemTagUpdateRate ;
188+ public bool useLegacyTheme ;
189+ public bool useShowTrueAutoJudgment ;
190+ public bool useMovingManEditor ;
191+ public bool useColorRangeEditor ;
192+ public bool useEasedValueEditor ;
193+ public bool useAutoUpdate ;
194+ public bool useAutoUpdateBeta ;
195+ public bool useTooltip ;
196+ public bool autoPivot ;
197+ public bool showTextNameAsDisplayText ;
198+ public Settings . EditorUIMode uiMode ;
199+ public bool isFirstEg ;
119200 }
120201}
0 commit comments