mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-20 21:35:49 +00:00
Force role menu to be refreshed on gamemode change
This commit is contained in:
1 parent
fb164a54e3
commit
b83cb5cc29
3 files changed
+41
-8
No files matched your search
@@ -109,16 +109,28 @@ public static class GameModeOption
|
||||
internal static void Set(int val)
|
||||
{
|
||||
Value = val;
|
||||
var previousMode = CustomGameModeManager.ActiveMode;
|
||||
CustomGameModeManager.GetAndSetGameMode();
|
||||
HudPatches.SetGameModeText(CustomGameModeManager.GetMode(Values.ElementAt(_lastValue).Key).ColoredName);
|
||||
var gm = CustomGameModeManager.ActiveMode!;
|
||||
ModdedOptionsManager.AddSettingsChangeMessage(
|
||||
HudManager.Instance.Notifier,
|
||||
GamemodeName,
|
||||
gm.ColoredName,
|
||||
new Color(0.7333f, 0.7333f, 0.7333f, 1),
|
||||
gm.TmpIcon,
|
||||
true);
|
||||
if (gm != previousMode)
|
||||
{
|
||||
ModdedOptionsManager.AddSettingsChangeMessage(
|
||||
HudManager.Instance.Notifier,
|
||||
GamemodeName,
|
||||
gm.ColoredName,
|
||||
new Color(0.7333f, 0.7333f, 0.7333f, 1),
|
||||
gm.TmpIcon,
|
||||
true);
|
||||
if (MenuState.Instance)
|
||||
{
|
||||
// should force reset roles for gamemodes properly
|
||||
foreach (var roleMenu in MenuState.Instance.QueuedRoleMenuRefresh)
|
||||
{
|
||||
MenuState.Instance.QueuedRoleMenuRefresh[roleMenu.Key] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
// could make Values a dict of AbstractGameMode too
|
||||
}
|
||||
|
||||
|
||||
@@ -63,6 +63,8 @@ public class MenuState(IntPtr cppPtr) : MonoBehaviour(cppPtr)
|
||||
|
||||
[HideFromIl2Cpp]
|
||||
internal Dictionary<int, bool> FinishedRoleMenus { get; } = [];
|
||||
[HideFromIl2Cpp]
|
||||
internal Dictionary<int, bool> QueuedRoleMenuRefresh { get; } = [];
|
||||
|
||||
public void Awake()
|
||||
{
|
||||
|
||||
@@ -75,7 +75,24 @@ public static class RoleSettingMenuPatches
|
||||
dividerImage.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
if (MenuState.Instance.FinishedRoleMenus.TryGetValue(MenuState.Instance.CurrentModIdx, out var finished) && finished)
|
||||
var queuedRefresh = false;
|
||||
if (MenuState.Instance.QueuedRoleMenuRefresh.TryGetValue(MenuState.Instance.CurrentModIdx, out var queued) && queued)
|
||||
{
|
||||
queuedRefresh = true;
|
||||
var roleOptionSettings = roleMenu.scrollBar.Inner.GetComponentsInChildren<RoleOptionSetting>(true);
|
||||
var headers = roleMenu.scrollBar.Inner.GetComponentsInChildren<CategoryHeaderMasked>(true);
|
||||
foreach (var child in roleOptionSettings)
|
||||
{
|
||||
Object.Destroy(child.gameObject);
|
||||
}
|
||||
foreach (var child in headers)
|
||||
{
|
||||
Object.Destroy(child.gameObject);
|
||||
}
|
||||
yield return new WaitForEndOfFrame();
|
||||
MenuState.Instance.QueuedRoleMenuRefresh[MenuState.Instance.CurrentModIdx] = false;
|
||||
}
|
||||
if (!queuedRefresh && MenuState.Instance.FinishedRoleMenus.TryGetValue(MenuState.Instance.CurrentModIdx, out var finished) && finished)
|
||||
{
|
||||
var roleOptionSettings = roleMenu.scrollBar.Inner.GetComponentsInChildren<RoleOptionSetting>(true);
|
||||
foreach (var r in roleOptionSettings)
|
||||
@@ -308,6 +325,7 @@ public static class RoleSettingMenuPatches
|
||||
RoleGroupHidden[group] = !groupHidden;
|
||||
}
|
||||
|
||||
MenuState.Instance.QueuedRoleMenuRefresh[MenuState.Instance.CurrentModIdx] = false;
|
||||
MenuState.Instance.FinishedRoleMenus[MenuState.Instance.CurrentModIdx] = false;
|
||||
|
||||
foreach (var child in roleMenu.RoleChancesSettings.transform)
|
||||
@@ -327,6 +345,7 @@ public static class RoleSettingMenuPatches
|
||||
}
|
||||
}
|
||||
}
|
||||
MenuState.Instance.QueuedRoleMenuRefresh[MenuState.Instance.CurrentModIdx] = false;
|
||||
MenuState.Instance.FinishedRoleMenus[MenuState.Instance.CurrentModIdx] = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user