Skip to content
This repository was archived by the owner on May 30, 2026. It is now read-only.

Commit 9bdccdc

Browse files
committed
JSON Settings and Fix language
1 parent 0716660 commit 9bdccdc

11 files changed

Lines changed: 188 additions & 112 deletions

File tree

Overlayer/Main.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ public static void Load(ModEntry modEntry) {
9191

9292
GUI = new GUIController();
9393
Lang = new Translator();
94+
Settings = new Settings();
9495
modEntry.OnToggle = OnToggle;
9596
modEntry.OnShowGUI = OnShowGUI;
9697
modEntry.OnGUI = OnGUI;
@@ -112,7 +113,7 @@ public static IEnumerator LoadCoroutine(ModEntry modEntry) {
112113

113114
public static bool OnToggle(ModEntry modEntry, bool toggle) {
114115
if(toggle) {
115-
Settings = ModSettings.Load<Settings>(modEntry);
116+
Settings.Load();
116117
Lang.Language = Settings.Lang;
117118
Lang.OnInitialize += OnLanguageInitialize;
118119
var settingsDrawer = new SettingsDrawer(Settings);
@@ -171,7 +172,7 @@ public static bool OnToggle(ModEntry modEntry, bool toggle) {
171172
LazyPatchManager.UnloadAll();
172173
Lang.Release();
173174
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true);
174-
ModSettings.Save(Settings, modEntry);
175+
Settings.Save();
175176
}
176177

177178
return true;
@@ -289,7 +290,7 @@ public static void OnHideGUI(ModEntry modEntry) {
289290

290291
public static void OnSaveGUI(ModEntry modEntry) {
291292
ProfileManager.Save();
292-
ModSettings.Save(Settings, modEntry);
293+
Settings.Save();
293294
}
294295

295296
public static void OnUpdate(ModEntry modEntry, float delta) => MainThreadDispatcher.Update();

Overlayer/MiscFiles/lang/en-US.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
"FALLBACK_FONTS": "Enable Alternate Font",
6464
"FLUSH": "Flush",
6565
"FONT": "Font",
66-
"FONT_SCALE": "Font Scale",
6766
"FONT_SIZE": "Font Size",
6867
"FORWARD": "Forward",
6968
"FPS_UPDATE_RATE": "Fps Update Rate",
@@ -179,7 +178,7 @@
179178
"TAG_DESC_DEVELOPER": "Square3ang & Kkitut",
180179
"TAG_DESC_DIFFICULTY": "Current Difficulty",
181180
"TAG_DESC_DIFFICULTYRAW": "Fixed difficulty return value regardless of language setting",
182-
"TAG_DESC_EASEDVALUE": "When the tag value changes, the tag value changes according to the speed.",
181+
"TAG_DESC_EASEDVALUE": "When the target tag value changes, the tag value changes according to the speed.",
183182
"TAG_DESC_EDITORPITCH": "Pitch set in the LevelEditor (displayed as 1 when 100%)",
184183
"TAG_DESC_EPHEX": "EarlyPerfect Hex Color",
185184
"TAG_DESC_FAIL": "MissCount + Overloads",

Overlayer/MiscFiles/lang/fr-CA.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
"FALLBACK_FONTS": "Changer De Police",
6464
"FLUSH": "Allignement",
6565
"FONT": "police D'Écriture",
66-
"FONT_SCALE": "Taille De La Police",
6766
"FONT_SIZE": "Taille Du Texte",
6867
"FORWARD": "Aller",
6968
"FPS_UPDATE_RATE": "Changement D'IPS",
@@ -179,7 +178,7 @@
179178
"TAG_DESC_DEVELOPER": "Square3ang & Kkitut",
180179
"TAG_DESC_DIFFICULTY": "Current Difficulty",
181180
"TAG_DESC_DIFFICULTYRAW": "Fixed difficulty return value regardless of language setting",
182-
"TAG_DESC_EASEDVALUE": "When the tag value changes, the tag value changes according to the speed.",
181+
"TAG_DESC_EASEDVALUE": "When the target tag value changes, the tag value changes according to the speed.",
183182
"TAG_DESC_EDITORPITCH": "Pitch set in the LevelEditor (displayed as 1 when 100%)",
184183
"TAG_DESC_EPHEX": "EarlyPerfect Hex Color",
185184
"TAG_DESC_FAIL": "MissCount + Overloads",

Overlayer/MiscFiles/lang/ko-KR.json

Lines changed: 73 additions & 74 deletions
Large diffs are not rendered by default.

Overlayer/MiscFiles/lang/ru-RU.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
"FALLBACK_FONTS": "Включить Альтернативный Шрифт",
6464
"FLUSH": "Выровненный",
6565
"FONT": "Шрифт",
66-
"FONT_SCALE": "Масштаб Шрифта",
6766
"FONT_SIZE": "Размер Шрифта",
6867
"FORWARD": "Вперед",
6968
"FPS_UPDATE_RATE": "Частота кадров",
@@ -179,7 +178,7 @@
179178
"TAG_DESC_DEVELOPER": "Square3ang & Kkitut",
180179
"TAG_DESC_DIFFICULTY": "Current Difficulty",
181180
"TAG_DESC_DIFFICULTYRAW": "Fixed difficulty return value regardless of language setting",
182-
"TAG_DESC_EASEDVALUE": "When the tag value changes, the tag value changes according to the speed.",
181+
"TAG_DESC_EASEDVALUE": "When the target tag value changes, the tag value changes according to the speed.",
183182
"TAG_DESC_EDITORPITCH": "Pitch set in the LevelEditor (displayed as 1 when 100%)",
184183
"TAG_DESC_EPHEX": "EarlyPerfect Hex Color",
185184
"TAG_DESC_FAIL": "MissCount + Overloads",

Overlayer/MiscFiles/lang/vi-VN.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
"FALLBACK_FONTS": "Kích hoạt phông chữ thay thế",
6464
"FLUSH": "Làm phẳng",
6565
"FONT": "Phông chữ",
66-
"FONT_SCALE": "Tỷ lệ phông chữ",
6766
"FONT_SIZE": "Kích thước phông chữ",
6867
"FORWARD": "Tiến tới",
6968
"FPS_UPDATE_RATE": "Tốc độ cập nhật FPS",
@@ -179,7 +178,7 @@
179178
"TAG_DESC_DEVELOPER": "Square3ang & Kkitut",
180179
"TAG_DESC_DIFFICULTY": "Current Difficulty",
181180
"TAG_DESC_DIFFICULTYRAW": "Fixed difficulty return value regardless of language setting",
182-
"TAG_DESC_EASEDVALUE": "When the tag value changes, the tag value changes according to the speed.",
181+
"TAG_DESC_EASEDVALUE": "When the target tag value changes, the tag value changes according to the speed.",
183182
"TAG_DESC_EDITORPITCH": "Pitch set in the LevelEditor (displayed as 1 when 100%)",
184183
"TAG_DESC_EPHEX": "EarlyPerfect Hex Color",
185184
"TAG_DESC_FAIL": "MissCount + Overload",

Overlayer/MiscFiles/lang/zh-CN.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
"FALLBACK_FONTS": "启用备用字体",
6565
"FLUSH": "齐平中心 (一般不用)",
6666
"FONT": "游戏字体",
67-
"FONT_SCALE": "游戏字体大小",
6867
"FONT_SIZE": "文本字体大小",
6968
"FORWARD": "前进至点击 Back 之前那步",
7069
"FPS_UPDATE_RATE": "FPS刷新频率",
@@ -180,7 +179,7 @@
180179
"TAG_DESC_DEVELOPER": "Square3ang & Kkitut (中文翻译: B站 \"你怎么神经兮兮\")",
181180
"TAG_DESC_DIFFICULTY": "当前难度",
182181
"TAG_DESC_DIFFICULTYRAW": "无论语言设置,固定的难度返回值",
183-
"TAG_DESC_EASEDVALUE": " Tag 的值发生变化时,Tag 的值会随着速度一起改变",
182+
"TAG_DESC_EASEDVALUE": "目标 Tag 的值发生变化时,Tag 的值会按速度一起变化.",
184183
"TAG_DESC_EDITORPITCH": "关卡编辑器中设置的音高 (当 100% 音高时显示 1)",
185184
"TAG_DESC_EPHEX": "稍快的颜色",
186185
"TAG_DESC_FAIL": "错过数 + 按太快数",

Overlayer/Settings.cs

Lines changed: 99 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22
using Overlayer.Core.Interfaces;
33
using Overlayer.Models;
44
using Overlayer.Utils;
5+
using System;
6+
using System.IO;
7+
using System.Xml.Serialization;
58
using UnityModManagerNet;
69

710
namespace 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
}

Overlayer/Utils/Tooltip.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static string GetTagDescription(string key) {
6262
["DEVELOPER"] = "Square3ang & Kkitut",
6363
["DIFFICULTY"] = "Current Difficulty",
6464
["DIFFICULTYRAW"] = "Fixed difficulty return value regardless of language setting",
65-
["EASEDVALUE"] = "When the tag value changes, the tag value changes according to the speed.",
65+
["EASEDVALUE"] = "When the target tag value changes, the tag value changes according to the speed.",
6666
["EDITORPITCH"] = "Pitch set in the LevelEditor (displayed as 1 when 100%)",
6767
["EPHEX"] = "EarlyPerfect Hex Color",
6868
["FAIL"] = "MissCount + Overloads",

Overlayer/Views/ImageConfigDrawer.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,18 +49,18 @@ public override void Draw() {
4949
}
5050
Drawer.DrawString(Drawer.Icon_Pencil, Main.Lang.Get("NAME", "Name"), ref model.Name);
5151
bool changed = false;
52-
changed |= Drawer.DrawExpr(Main.Lang.Get("POSITION", "Position"), "I_" + nameof(model.Position), ref model.Position, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Position.Value, 0, 1); });
53-
changed |= Drawer.DrawExpr(Main.Lang.Get("SCALE", "Scale"), "I_" + nameof(model.Scale), ref model.Scale, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Scale.Value, 0, 10); });
52+
changed |= Drawer.DrawExpr(Main.Lang.Get("POSITION", "Position"), "I_" + nameof(model.Position), ref model.Position, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Position.Value, 0, 1); }, typeof(Vector2));
53+
changed |= Drawer.DrawExpr(Main.Lang.Get("SCALE", "Scale"), "I_" + nameof(model.Scale), ref model.Scale, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Scale.Value, 0, 10); }, typeof(Vector2));
5454
if(IsAdvensedMode) {
55-
changed |= Drawer.DrawExpr(Main.Lang.Get("PIVOT", "Pivot"), "I_" + nameof(model.Pivot), ref model.Pivot, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Pivot.Value, 0, 1); });
55+
changed |= Drawer.DrawExpr(Main.Lang.Get("PIVOT", "Pivot"), "I_" + nameof(model.Pivot), ref model.Pivot, () => { changed |= NeoDrawer.StaticInstance.DrawSize2(ref model.Pivot.Value, 0, 1); }, typeof(Vector2));
5656
}
57-
changed |= Drawer.DrawExpr(Main.Lang.Get("ROTATION", "Rotation"), "I_" + nameof(model.Rotation), ref model.Rotation, () => { changed |= NeoDrawer.StaticInstance.DrawRotate3(ref model.Rotation.Value, -180, 180); });
57+
changed |= Drawer.DrawExpr(Main.Lang.Get("ROTATION", "Rotation"), "I_" + nameof(model.Rotation), ref model.Rotation, () => { changed |= NeoDrawer.StaticInstance.DrawRotate3(ref model.Rotation.Value, -180, 180); }, typeof(Vector3));
5858
changed |= Drawer.DrawExpr(Drawer.Icon_Color, Main.Lang.Get("COLOR", "Color"), "I_" + nameof(model.Color), ref model.Color, () => {
5959
GUILayout.BeginHorizontal();
6060
changed |= NeoDrawer.StaticInstance.DrawColor(ref model.Color.Value);
6161
GUILayout.FlexibleSpace();
6262
GUILayout.EndHorizontal();
63-
});
63+
}, typeof(Color));
6464
GUILayout.BeginHorizontal();
6565
if(Drawer.Button(Drawer.Icon_Image, GUILayout.Width(40))) {
6666
Task.Run(() => {

0 commit comments

Comments
 (0)