From 5d354eff5e62b81f248fe1750c47b9b2f1d4e47e Mon Sep 17 00:00:00 2001 From: Atony <75191600+AtonyGit@users.noreply.github.com> Date: Sun, 11 Oct 2026 18:52:29 -0500 Subject: [PATCH] Save wiki preferences in config file --- MiraAPI/MiraApiPlugin.cs | 22 +++++ MiraAPI/Patches/RoleGuidePatches.cs | 130 +++++++++++++++++++--------- 2 files changed, 110 insertions(+), 42 deletions(-) diff --git a/MiraAPI/MiraApiPlugin.cs b/MiraAPI/MiraApiPlugin.cs index d68a87d..4da8968 100644 --- a/MiraAPI/MiraApiPlugin.cs +++ b/MiraAPI/MiraApiPlugin.cs @@ -4,6 +4,7 @@ using BepInEx; using BepInEx.Configuration; using BepInEx.Unity.IL2CPP; using HarmonyLib; +using MiraAPI.Patches; using MiraAPI.Patches.Roles; using MiraAPI.PluginLoading; using MiraAPI.Translation; @@ -63,9 +64,30 @@ public partial class MiraApiPlugin : BasePlugin, IMiraPlugin private static MiraPluginManager? PluginManager { get; set; } internal Harmony Harmony { get; } = new(Id); + public static ConfigEntry WikiSortingGroup { get; private set; } + + public static ConfigEntry WikiSortingMethod { get; private set; } + + public static ConfigEntry WikiSortingFilter { get; private set; } + /// public override void Load() { + WikiSortingGroup = Config.Bind( + "Wiki", + "WikiSortingGroup", + SortingGroups.Ungrouped, + "Determines how clusters of roles / modifiers are grouped together, if at all."); + WikiSortingMethod = Config.Bind( + "Wiki", + "WikiSortingMethod", + SortingMethod.Alphabetical, + "Determines if the list of roles / modifiers are organized in ascending or descending order."); + WikiSortingFilter = Config.Bind( + "Wiki", + "WikiSortingFilter", + SortingFilter.AllRoles, + "Determines what roles / modifiers are displayed at once."); Harmony.PatchAll(); RoleOptionsCollectionPatch.PatchRoleMethods(Harmony); UiResetEvents.Initialize(); diff --git a/MiraAPI/Patches/RoleGuidePatches.cs b/MiraAPI/Patches/RoleGuidePatches.cs index 193bd54..77f9cf4 100644 --- a/MiraAPI/Patches/RoleGuidePatches.cs +++ b/MiraAPI/Patches/RoleGuidePatches.cs @@ -346,6 +346,10 @@ public static class RoleGuidePatches return; } + _sortFilter = MiraApiPlugin.WikiSortingFilter.Value; + _sortMethod = MiraApiPlugin.WikiSortingMethod.Value; + _sortGrouping = MiraApiPlugin.WikiSortingGroup.Value; + if (_populate != null) { Coroutines.Stop(_populate); @@ -368,8 +372,8 @@ public static class RoleGuidePatches SearchSortingOrderButton, "SearchSortingOrderButton", SwitchMethod, - MiraAssets.SortingAzIdleSprite, - MiraAssets.SortingAzHoverSprite, + GetSortMethodSprite(_sortMethod, false), + GetSortMethodSprite(_sortMethod, true), new Vector3(2.4f, 0.765f, -0.1f), out _searchSortingOrderIdle, out _searchSortingOrderHover); @@ -383,8 +387,8 @@ public static class RoleGuidePatches SearchSortingGroupButton, "SearchSortingGroupButton", SwitchGrouping, - MiraAssets.GroupNoneIdleSprite, - MiraAssets.GroupNoneHoverSprite, + GetSortGroupSprite(_sortGrouping, false), + GetSortGroupSprite(_sortGrouping, true), new Vector3(1.7f, 0.765f, -0.1f), out _searchSortingGroupIdle, out _searchSortingGroupHover); @@ -398,8 +402,8 @@ public static class RoleGuidePatches SearchSortingFilterButton, "SearchSortingFilterButton", SwitchFilter, - MiraAssets.VisibleOnIdleSprite, - MiraAssets.VisibleOnHoverSprite, + GetSortFilterSprite(_sortFilter, false), + GetSortFilterSprite(_sortFilter, true), new Vector3(1f, 0.765f, -0.1f), out _searchSortingFilterIdle, out _searchSortingFilterHover); @@ -1042,25 +1046,40 @@ public static class RoleGuidePatches _sortFilter = SortingFilter.EnabledOnly; } - switch (_sortFilter) - { - case SortingFilter.AllRoles: - _searchSortingFilterIdle.sprite = MiraAssets.VisibleAllIdleSprite; - _searchSortingFilterHover.sprite = MiraAssets.VisibleAllHoverSprite; - break; - case SortingFilter.DisabledOnly: - _searchSortingFilterIdle.sprite = MiraAssets.VisibleOffIdleSprite; - _searchSortingFilterHover.sprite = MiraAssets.VisibleOffHoverSprite; - break; - default: - _searchSortingFilterIdle.sprite = MiraAssets.VisibleOnIdleSprite; - _searchSortingFilterHover.sprite = MiraAssets.VisibleOnHoverSprite; - break; - } + MiraApiPlugin.WikiSortingFilter.Value = _sortFilter; + + _searchSortingFilterIdle.sprite = GetSortFilterSprite(_sortFilter, false); + _searchSortingFilterHover.sprite = GetSortFilterSprite(_sortFilter, true); RefreshActiveTab(false); } + private static Sprite GetSortFilterSprite(SortingFilter value, bool hover) + { + if (hover) + { + switch (value) + { + case SortingFilter.AllRoles: + return MiraAssets.VisibleAllHoverSprite; + case SortingFilter.DisabledOnly: + return MiraAssets.VisibleOffHoverSprite; + default: + return MiraAssets.VisibleOnHoverSprite; + } + } + + switch (value) + { + case SortingFilter.AllRoles: + return MiraAssets.VisibleAllIdleSprite; + case SortingFilter.DisabledOnly: + return MiraAssets.VisibleOffIdleSprite; + default: + return MiraAssets.VisibleOnIdleSprite; + } + } + public static void SwitchMethod() { var stepUp = (SortingMethod)((int)_sortMethod + 1); @@ -1073,16 +1092,28 @@ public static class RoleGuidePatches _sortMethod = SortingMethod.Alphabetical; } - _searchSortingOrderIdle.sprite = _sortMethod is SortingMethod.Alphabetical - ? MiraAssets.SortingAzIdleSprite - : MiraAssets.SortingZaIdleSprite; - _searchSortingOrderHover.sprite = _sortMethod is SortingMethod.Alphabetical - ? MiraAssets.SortingAzHoverSprite - : MiraAssets.SortingZaHoverSprite; + MiraApiPlugin.WikiSortingMethod.Value = _sortMethod; + + _searchSortingOrderIdle.sprite = GetSortMethodSprite(_sortMethod, false); + _searchSortingOrderHover.sprite = GetSortMethodSprite(_sortMethod, true); RefreshActiveTab(false); } + private static Sprite GetSortMethodSprite(SortingMethod value, bool hover) + { + if (hover) + { + return value is SortingMethod.Alphabetical + ? MiraAssets.SortingAzHoverSprite + : MiraAssets.SortingZaHoverSprite; + } + + return _sortMethod is SortingMethod.Alphabetical + ? MiraAssets.SortingAzIdleSprite + : MiraAssets.SortingZaIdleSprite; + } + public static void SwitchGrouping() { var stepUp = (SortingGroups)((int)_sortGrouping + 1); @@ -1095,25 +1126,40 @@ public static class RoleGuidePatches _sortGrouping = SortingGroups.Ungrouped; } - switch (_sortGrouping) - { - case SortingGroups.Faction: - _searchSortingGroupIdle.sprite = MiraAssets.GroupFactionIdleSprite; - _searchSortingGroupHover.sprite = MiraAssets.GroupFactionHoverSprite; - break; - case SortingGroups.AmountChance: - _searchSortingGroupIdle.sprite = MiraAssets.GroupCountIdleSprite; - _searchSortingGroupHover.sprite = MiraAssets.GroupCountHoverSprite; - break; - default: - _searchSortingGroupIdle.sprite = MiraAssets.GroupNoneIdleSprite; - _searchSortingGroupHover.sprite = MiraAssets.GroupNoneHoverSprite; - break; - } + MiraApiPlugin.WikiSortingGroup.Value = _sortGrouping; + + _searchSortingGroupIdle.sprite = GetSortGroupSprite(_sortGrouping, false); + _searchSortingGroupHover.sprite = GetSortGroupSprite(_sortGrouping, true); RefreshActiveTab(false); } + private static Sprite GetSortGroupSprite(SortingGroups value, bool hover) + { + if (hover) + { + switch (value) + { + case SortingGroups.Faction: + return MiraAssets.GroupFactionHoverSprite; + case SortingGroups.AmountChance: + return MiraAssets.GroupCountHoverSprite; + default: + return MiraAssets.GroupNoneHoverSprite; + } + } + + switch (value) + { + case SortingGroups.Faction: + return MiraAssets.GroupFactionIdleSprite; + case SortingGroups.AmountChance: + return MiraAssets.GroupCountIdleSprite; + default: + return MiraAssets.GroupNoneIdleSprite; + } + } + private static void CopyTextLayout(TextMeshPro source, TextMeshPro target) { target.font = source.font;