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: "); 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; } } }