oni-priority-ux/mod/Utils.cs

67 lines
2.3 KiB
C#

using System.Reflection;
namespace PriorityUX {
static class Utils {
static readonly string PlayerPrefsKey = "LastUsedPriority";
static int? lastValue;
public static PrioritySetting getDefaultPriority() {
return new PrioritySetting(PriorityScreen.PriorityClass.basic, Options.Instance.resetPriorityLevel);
}
static int prioritySettingToInt(PrioritySetting setting) {
if (setting.priority_class == PriorityScreen.PriorityClass.topPriority)
return 0;
return setting.priority_value;
}
static PrioritySetting intToPrioritySetting(int v) {
if (v < 1 || v > 9)
return new PrioritySetting(PriorityScreen.PriorityClass.topPriority, 1);
return new PrioritySetting(PriorityScreen.PriorityClass.basic, v);
}
public static void setLastPriority(PrioritySetting setting) {
int value = prioritySettingToInt(setting);
if (lastValue.HasValue && lastValue.Value == value)
return;
Debug.Log("[PriorityUX] >> setLastPriority: " + value);
KPlayerPrefs.SetInt(PlayerPrefsKey, value);
lastValue = value;
}
public static PrioritySetting getLastPriority() {
int value = KPlayerPrefs.GetInt(PlayerPrefsKey, -1);
if (value < 0) {
Debug.Log("[PriorityUX] >> getLastPriority: <invalid>");
return getDefaultPriority();
} else {
// Debug.Log("[PriorityUX] >> getLastPriority: " + value);
return intToPrioritySetting(value);
}
}
public static void refreshPriorityScreen(PriorityScreen screen) {
screen.SetScreenPriority(Utils.getLastPriority());
}
public static void refreshToolMenuPriority() {
refreshPriorityScreen(ToolMenu.Instance.PriorityScreen);
}
// static readonly FieldInfo productInfoScreenField = typeof(BuildMenu).GetField("productInfoScreen", BindingFlags.NonPublic | BindingFlags.Instance);
// public static ProductInfoScreen? getPlanScreenProductInfoScreen() {
// if (BuildMenu.Instance) {
// ProductInfoScreen productInfoScreen = (ProductInfoScreen)productInfoScreenField.GetValue(BuildMenu.Instance);
// return productInfoScreen;
// }
// return null;
// }
public static PriorityScreen? getPlanPriorityScreen() {
return PlanScreen.Instance?.ProductInfoScreen?.materialSelectionPanel?.PriorityScreen;
}
}
}