forked from Custom-Extension-Works/Project-Obsidian
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLocaleHelper.cs
More file actions
61 lines (57 loc) · 2.18 KB
/
Copy pathLocaleHelper.cs
File metadata and controls
61 lines (57 loc) · 2.18 KB
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
using System.Reflection;
using Elements.Assets;
using Elements.Core;
using FrooxEngine;
namespace Obsidian;
public static class SettingsLocaleHelper
{
private static StaticLocaleProvider localeProvider;
private static string lastOverrideLocale;
private const string overrideLocaleString = "somethingRandomJustToMakeItChange";
internal static LocaleData _lastLocaleData;
public static void Update(LocaleData _localeData=null)
{
var data = _localeData ?? _lastLocaleData;
if (data == null) return;
_lastLocaleData = data;
UpdateDelayed(data);
Settings.RegisterValueChanges<LocaleSettings>(localeSettings => UpdateDelayed(data));
}
private static void UpdateDelayed(LocaleData _localeData)
{
// I hate having to do an arbitrary delay
Userspace.UserspaceWorld.RunInUpdates(15, () => UpdateIntern(_localeData));
}
private static void UpdateIntern(LocaleData _localeData)
{
localeProvider = Userspace.UserspaceWorld.GetCoreLocale();
if (localeProvider?.Asset?.Data is null)
Userspace.UserspaceWorld.RunSynchronously(() => UpdateIntern(_localeData));
else
{
UpdateLocale(_localeData);
}
}
private static void UpdateLocale(LocaleData _localeData)
{
UniLog.Log("Updating Obsidian locale!");
//foreach (var kVP in _localeData.Messages)
//{
//UniLog.Log($"{kVP.Key} -> {kVP.Value}");
//}
if (localeProvider?.Asset?.Data != null)
{
localeProvider.Asset.Data.LoadDataAdditively(_localeData);
// force asset update for locale provider
if (localeProvider.OverrideLocale.Value != null && localeProvider.OverrideLocale.Value != overrideLocaleString)
lastOverrideLocale = localeProvider.OverrideLocale.Value;
localeProvider.OverrideLocale.Value = overrideLocaleString;
Userspace.UserspaceWorld.RunInUpdates(1, () =>
{
localeProvider.OverrideLocale.Value = lastOverrideLocale;
});
}
else
UniLog.Error("Locale data is null when it shouldn't be!");
}
}