mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-19 15:51:48 +00:00
Merge branch 'dev' into options-improvements
This commit is contained in:
5 files changed
+63
-74
No files matched your search
@@ -139,7 +139,7 @@ public static class GameModeOption
|
||||
|
||||
[HarmonyPatch(typeof(GameOptionsMenu), nameof(GameOptionsMenu.ValueChanged))]
|
||||
[HarmonyPrefix]
|
||||
private static bool ValueChanged(GameOptionsMenu __instance, OptionBehaviour option)
|
||||
private static bool ValueChanged(OptionBehaviour option)
|
||||
{
|
||||
if (!OptionBehaviour.Equals(option))
|
||||
return true;
|
||||
|
||||
@@ -208,7 +208,7 @@ internal static class GameOptionsMenuPatch
|
||||
internal static List<KeyValuePair<string, string>> GetActiveGameSettingsRows(Func<bool, string> formatBool)
|
||||
{
|
||||
var menu = GameSettingMenu.Instance ? GameSettingMenu.Instance.GameSettingsTab : null;
|
||||
if (!menu || menu.Children == null)
|
||||
if (!menu || menu!.Children == null)
|
||||
{
|
||||
return [];
|
||||
}
|
||||
@@ -216,7 +216,7 @@ internal static class GameOptionsMenuPatch
|
||||
var rows = new List<KeyValuePair<string, string>>();
|
||||
foreach (var option in menu.Children)
|
||||
{
|
||||
if (!option || !option!.gameObject.activeInHierarchy ||
|
||||
if (!option || !option.gameObject.activeInHierarchy ||
|
||||
option == menu.MapPicker ||
|
||||
(GameModeOption.OptionBehaviour && option == GameModeOption.OptionBehaviour) ||
|
||||
!option.Data)
|
||||
|
||||
@@ -41,18 +41,17 @@ public static class RoleGuidePatches
|
||||
private static readonly List<string> UntrackedRolePanelDiagnostics = [];
|
||||
|
||||
private static GameObject searchComponentContainer;
|
||||
public static PassiveButton SearchIconButton;
|
||||
private static SpriteRenderer _searchIconIdle;
|
||||
private static SpriteRenderer _searchIconHover;
|
||||
public static PassiveButton SearchSortingOrderButton;
|
||||
private static PassiveButton _searchSortingOrderButton;
|
||||
private static SpriteRenderer _searchSortingOrderIdle;
|
||||
private static SpriteRenderer _searchSortingOrderHover;
|
||||
public static TextMeshPro GroupSortingTmp;
|
||||
public static PassiveButton SearchSortingGroupButton;
|
||||
private static TextMeshPro groupSortingTmp;
|
||||
private static PassiveButton _searchSortingGroupButton;
|
||||
private static SpriteRenderer _searchSortingGroupIdle;
|
||||
private static SpriteRenderer _searchSortingGroupHover;
|
||||
public static TextMeshPro FilterSortingTmp;
|
||||
public static PassiveButton SearchSortingFilterButton;
|
||||
private static TextMeshPro filterSortingTmp;
|
||||
private static PassiveButton _searchSortingFilterButton;
|
||||
private static SpriteRenderer _searchSortingFilterIdle;
|
||||
private static SpriteRenderer _searchSortingFilterHover;
|
||||
private static Scroller _rolesScroller;
|
||||
@@ -107,14 +106,14 @@ public static class RoleGuidePatches
|
||||
|
||||
var playerMenuGradient = instance.matchInfoPlayersMaskArea.transform.parent.GetAllChildren()
|
||||
.First(x => x.name.Contains("BG_Gradient"));
|
||||
var settingsenuGradient = instance.matchInfoSettingsMaskArea.transform.parent.GetAllChildren()
|
||||
var settingsMenuGradient = instance.matchInfoSettingsMaskArea.transform.parent.GetAllChildren()
|
||||
.First(x => x.name.Contains("BG_Gradient"));
|
||||
var roleMenuGradient = instance.MatchInfoRoleMaskArea.transform.parent.GetAllChildren()
|
||||
.First(x => x.name.Contains("BG_Gradient"));
|
||||
playerMenuGradient
|
||||
.GetComponent<SpriteRenderer>()
|
||||
.maskInteraction =
|
||||
settingsenuGradient.GetComponent<SpriteRenderer>()
|
||||
settingsMenuGradient.GetComponent<SpriteRenderer>()
|
||||
.maskInteraction =
|
||||
roleMenuGradient.GetComponent<SpriteRenderer>()
|
||||
.maskInteraction = SpriteMaskInteraction.VisibleInsideMask;
|
||||
@@ -190,10 +189,9 @@ public static class RoleGuidePatches
|
||||
_currentWikiPage = null!;
|
||||
_loadingSpinner = null;
|
||||
ResetSettingsState();
|
||||
SearchIconButton = null!;
|
||||
SearchSortingOrderButton = null!;
|
||||
SearchSortingGroupButton = null!;
|
||||
SearchSortingFilterButton = null!;
|
||||
_searchSortingOrderButton = null!;
|
||||
_searchSortingGroupButton = null!;
|
||||
_searchSortingFilterButton = null!;
|
||||
_searchIconIdle = null!;
|
||||
_searchIconHover = null!;
|
||||
_searchSortingOrderIdle = null!;
|
||||
@@ -417,9 +415,9 @@ public static class RoleGuidePatches
|
||||
HudManager.Instance.SettingsButton,
|
||||
searchComponentContainer.transform);
|
||||
sortingOrderButton.gameObject.SetActive(true);
|
||||
SearchSortingOrderButton = sortingOrderButton.GetComponent<PassiveButton>();
|
||||
_searchSortingOrderButton = sortingOrderButton.GetComponent<PassiveButton>();
|
||||
SetupSearchButton(
|
||||
SearchSortingOrderButton,
|
||||
_searchSortingOrderButton,
|
||||
"SearchSortingOrderButton",
|
||||
SwitchMethod,
|
||||
GetSortMethodSprite(_sortMethod, false),
|
||||
@@ -432,9 +430,9 @@ public static class RoleGuidePatches
|
||||
sortingOrderButton,
|
||||
searchComponentContainer.transform);
|
||||
sortingGroupButton.gameObject.SetActive(true);
|
||||
SearchSortingGroupButton = sortingGroupButton.GetComponent<PassiveButton>();
|
||||
_searchSortingGroupButton = sortingGroupButton.GetComponent<PassiveButton>();
|
||||
SetupSearchButton(
|
||||
SearchSortingGroupButton,
|
||||
_searchSortingGroupButton,
|
||||
"SearchSortingGroupButton",
|
||||
SwitchGrouping,
|
||||
GetSortGroupSprite(_sortGrouping, false),
|
||||
@@ -447,9 +445,9 @@ public static class RoleGuidePatches
|
||||
sortingOrderButton,
|
||||
searchComponentContainer.transform);
|
||||
sortingFilterButton.gameObject.SetActive(true);
|
||||
SearchSortingFilterButton = sortingFilterButton.GetComponent<PassiveButton>();
|
||||
_searchSortingFilterButton = sortingFilterButton.GetComponent<PassiveButton>();
|
||||
SetupSearchButton(
|
||||
SearchSortingFilterButton,
|
||||
_searchSortingFilterButton,
|
||||
"SearchSortingFilterButton",
|
||||
SwitchFilter,
|
||||
GetSortFilterSprite(_sortFilter, false),
|
||||
@@ -510,9 +508,8 @@ public static class RoleGuidePatches
|
||||
sortingOrderButton,
|
||||
sortingOrderButton.transform.parent);
|
||||
searchIconButton.gameObject.SetActive(true);
|
||||
SearchIconButton = searchIconButton.GetComponent<PassiveButton>();
|
||||
SetupSearchButton(
|
||||
SearchIconButton,
|
||||
searchIconButton.GetComponent<PassiveButton>(),
|
||||
"SearchIconButton",
|
||||
ClearSearchText,
|
||||
MiraAssets.SearchIconIdleSprite,
|
||||
@@ -677,17 +674,17 @@ public static class RoleGuidePatches
|
||||
orderSortingTmp.horizontalAlignment = HorizontalAlignmentOptions.Center;
|
||||
orderSortingTmp.transform.localPosition = new Vector3(-0.65f, 0.4f, 0);
|
||||
|
||||
GroupSortingTmp = Object.Instantiate(
|
||||
groupSortingTmp = Object.Instantiate(
|
||||
orderSortingTmp,
|
||||
sortingGroupButton.transform);
|
||||
GroupSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.GroupingLabel");
|
||||
GroupSortingTmp.transform.localPosition = new Vector3(-0.65f, 0.4f, 0);
|
||||
groupSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.GroupingLabel");
|
||||
groupSortingTmp.transform.localPosition = new Vector3(-0.65f, 0.4f, 0);
|
||||
|
||||
FilterSortingTmp = Object.Instantiate(
|
||||
filterSortingTmp = Object.Instantiate(
|
||||
orderSortingTmp,
|
||||
sortingFilterButton.transform);
|
||||
FilterSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.FilterLabel");
|
||||
FilterSortingTmp.transform.localPosition = new Vector3(-0.65f, 0.4f, 0);
|
||||
filterSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.FilterLabel");
|
||||
filterSortingTmp.transform.localPosition = new Vector3(-0.65f, 0.4f, 0);
|
||||
|
||||
playerButton.transform.localPosition = new Vector3(-3.6f, 0.656f, -0.2f);
|
||||
settingButton.transform.localPosition = new Vector3(-3.6f, 0.056f, -0.2f);
|
||||
@@ -1140,10 +1137,9 @@ public static class RoleGuidePatches
|
||||
.ThenByDescending(p =>
|
||||
p.Title.Contains(searchText, StringComparison.OrdinalIgnoreCase) ||
|
||||
p.Category.Contains(searchText, StringComparison.OrdinalIgnoreCase));
|
||||
return (_sortMethod is SortingMethod.Alphabetical
|
||||
return [.. _sortMethod is SortingMethod.Alphabetical
|
||||
? sorted.ThenBy(p => p.GetSortKey(_sortGrouping))
|
||||
: sorted.ThenByDescending(p => p.GetSortKey(_sortGrouping)))
|
||||
.ToList();
|
||||
: sorted.ThenByDescending(p => p.GetSortKey(_sortGrouping))];
|
||||
}
|
||||
|
||||
private static bool MatchesSearch(DetailedPanel entry, string searchText)
|
||||
@@ -2084,7 +2080,6 @@ public static class RoleGuidePatches
|
||||
|
||||
_settingsScroller.gameObject.SetActive(true);
|
||||
_settingsPageObject = Helpers.CreateAdvancedSettingsPage(
|
||||
guide,
|
||||
_settingsScroller,
|
||||
rows,
|
||||
columns,
|
||||
@@ -2155,38 +2150,38 @@ public static class RoleGuidePatches
|
||||
/// <param name="paginationVisible">False while searching, since search results are a single page.</param>
|
||||
private static void RepurposeSortButtons(bool paginationVisible)
|
||||
{
|
||||
if (!SearchSortingFilterButton || !SearchSortingGroupButton || !SearchSortingOrderButton)
|
||||
if (!_searchSortingFilterButton || !_searchSortingGroupButton || !_searchSortingOrderButton)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!_sortButtonsRepurposed)
|
||||
{
|
||||
_savedFilterLabel = FilterSortingTmp.text;
|
||||
_savedGroupLabel = GroupSortingTmp.text;
|
||||
_savedFilterLabel = filterSortingTmp.text;
|
||||
_savedGroupLabel = groupSortingTmp.text;
|
||||
_savedFilterIconScale = _searchSortingFilterIdle.transform.localScale;
|
||||
_savedGroupIconScale = _searchSortingGroupIdle.transform.localScale;
|
||||
_savedFilterLabelPosition = FilterSortingTmp.transform.localPosition;
|
||||
_savedGroupLabelPosition = GroupSortingTmp.transform.localPosition;
|
||||
_savedFilterLabelPosition = filterSortingTmp.transform.localPosition;
|
||||
_savedGroupLabelPosition = groupSortingTmp.transform.localPosition;
|
||||
|
||||
SetPaginationSprites(_searchSortingFilterIdle, _searchSortingFilterHover, true);
|
||||
SetPaginationSprites(_searchSortingGroupIdle, _searchSortingGroupHover, false);
|
||||
FilterSortingTmp.transform.localPosition = new Vector3(
|
||||
filterSortingTmp.transform.localPosition = new Vector3(
|
||||
-1.25f,
|
||||
0f,
|
||||
_savedFilterLabelPosition.z);
|
||||
GroupSortingTmp.transform.localPosition = new Vector3(
|
||||
groupSortingTmp.transform.localPosition = new Vector3(
|
||||
0f,
|
||||
0f,
|
||||
_savedGroupLabelPosition.z);
|
||||
FilterSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.PrevPage", "Prev");
|
||||
GroupSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.NextPage", "Next");
|
||||
filterSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.PrevPage", "Prev");
|
||||
groupSortingTmp.text = MiraLocaleManager.Get("MiraApi.Wiki.NextPage", "Next");
|
||||
_sortButtonsRepurposed = true;
|
||||
}
|
||||
|
||||
SearchSortingOrderButton.gameObject.SetActive(false);
|
||||
SearchSortingFilterButton.gameObject.SetActive(paginationVisible);
|
||||
SearchSortingGroupButton.gameObject.SetActive(paginationVisible);
|
||||
_searchSortingOrderButton.gameObject.SetActive(false);
|
||||
_searchSortingFilterButton.gameObject.SetActive(paginationVisible);
|
||||
_searchSortingGroupButton.gameObject.SetActive(paginationVisible);
|
||||
}
|
||||
|
||||
private static void SetPaginationSprites(SpriteRenderer idle, SpriteRenderer hover, bool isLeft)
|
||||
@@ -2212,7 +2207,7 @@ public static class RoleGuidePatches
|
||||
}
|
||||
|
||||
_sortButtonsRepurposed = false;
|
||||
if (!SearchSortingFilterButton || !SearchSortingGroupButton || !SearchSortingOrderButton)
|
||||
if (!_searchSortingFilterButton || !_searchSortingGroupButton || !_searchSortingOrderButton)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -2227,13 +2222,13 @@ public static class RoleGuidePatches
|
||||
_searchSortingFilterHover.transform.localScale = _savedFilterIconScale;
|
||||
_searchSortingGroupIdle.transform.localScale =
|
||||
_searchSortingGroupHover.transform.localScale = _savedGroupIconScale;
|
||||
FilterSortingTmp.text = _savedFilterLabel;
|
||||
GroupSortingTmp.text = _savedGroupLabel;
|
||||
FilterSortingTmp.transform.localPosition = _savedFilterLabelPosition;
|
||||
GroupSortingTmp.transform.localPosition = _savedGroupLabelPosition;
|
||||
SearchSortingOrderButton.gameObject.SetActive(true);
|
||||
SearchSortingFilterButton.gameObject.SetActive(true);
|
||||
SearchSortingGroupButton.gameObject.SetActive(true);
|
||||
filterSortingTmp.text = _savedFilterLabel;
|
||||
groupSortingTmp.text = _savedGroupLabel;
|
||||
filterSortingTmp.transform.localPosition = _savedFilterLabelPosition;
|
||||
groupSortingTmp.transform.localPosition = _savedGroupLabelPosition;
|
||||
_searchSortingOrderButton.gameObject.SetActive(true);
|
||||
_searchSortingFilterButton.gameObject.SetActive(true);
|
||||
_searchSortingGroupButton.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2255,4 +2250,4 @@ internal enum SortingFilter
|
||||
EnabledOnly,
|
||||
DisabledOnly,
|
||||
AllRoles,
|
||||
}
|
||||
}
|
||||
@@ -141,13 +141,12 @@ internal static class GuideOptionPages
|
||||
}
|
||||
}
|
||||
|
||||
return pages
|
||||
return [.. pages
|
||||
.OrderBy(page => page.MenuOrder)
|
||||
.ThenBy(page => page.GroupPriority)
|
||||
.ThenBy(page => page.Order)
|
||||
.ThenBy(page => page.Group.GroupName, StringComparer.OrdinalIgnoreCase)
|
||||
.ThenBy(page => page.ModAbbreviation, StringComparer.OrdinalIgnoreCase)
|
||||
.ToList();
|
||||
.ThenBy(page => page.ModAbbreviation, StringComparer.OrdinalIgnoreCase)];
|
||||
}
|
||||
|
||||
private static int GetMenuOrder(MenuCategory menu)
|
||||
@@ -173,7 +172,7 @@ internal static class GuideOptionPages
|
||||
var pageList = pages.ToList();
|
||||
var normalizedQuery = NormalizeSearchText(query);
|
||||
var matchingModPages = normalizedQuery.Length < 3
|
||||
? Array.Empty<GuideOptionPage>()
|
||||
? []
|
||||
: pageList
|
||||
.Where(page => page.ModSearchTerms.Any(term =>
|
||||
NormalizeSearchText(term).Contains(normalizedQuery, StringComparison.Ordinal)))
|
||||
@@ -181,16 +180,15 @@ internal static class GuideOptionPages
|
||||
|
||||
if (matchingModPages.Length > 0)
|
||||
{
|
||||
return matchingModPages.SelectMany(page => page.Entries).ToList();
|
||||
return [.. matchingModPages.SelectMany(page => page.Entries)];
|
||||
}
|
||||
|
||||
return pageList
|
||||
return [.. pageList
|
||||
.SelectMany(page => page.Entries
|
||||
.Select(entry => (Entry: entry, Rank: Rank(entry, query, cmp)))
|
||||
.Where(result => result.Rank < int.MaxValue)
|
||||
.OrderBy(result => result.Rank)
|
||||
.Select(result => result.Entry))
|
||||
.ToList();
|
||||
.Select(result => result.Entry))];
|
||||
}
|
||||
|
||||
private static string[] GetModSearchTerms(MiraPluginInfo plugin, AbstractOptionGroup group)
|
||||
@@ -211,7 +209,7 @@ internal static class GuideOptionPages
|
||||
AddNamespace(terms, option.GetType());
|
||||
}
|
||||
|
||||
return terms.Where(term => !string.IsNullOrWhiteSpace(term)).ToArray();
|
||||
return [.. terms.Where(term => !string.IsNullOrWhiteSpace(term))];
|
||||
}
|
||||
|
||||
private static void AddNamespace(HashSet<string> terms, Type type)
|
||||
@@ -224,7 +222,7 @@ internal static class GuideOptionPages
|
||||
|
||||
private static string NormalizeSearchText(string value)
|
||||
{
|
||||
return new string(value.Where(char.IsLetterOrDigit).Select(char.ToLowerInvariant).ToArray());
|
||||
return new string([.. value.Where(char.IsLetterOrDigit).Select(char.ToLowerInvariant)]);
|
||||
}
|
||||
|
||||
private static int Rank(GuideOptionEntry entry, string query, StringComparison cmp)
|
||||
@@ -336,9 +334,9 @@ internal static class GuideOptionPages
|
||||
return TrailingZeroRegex.Replace(number.Data.GetValueString(number.Value), string.Empty);
|
||||
|
||||
default:
|
||||
return option.Data.Type == global::OptionTypes.Checkbox
|
||||
return option.Data.Type == OptionTypes.Checkbox
|
||||
? formatBool(Math.Abs(option.GetFloatData() - 1f) < 0.0001f)
|
||||
: option.Data.GetValueString(option.GetFloatData());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -914,25 +914,21 @@ public static class Helpers
|
||||
/// <summary>
|
||||
/// Creates a page of vanilla settings rows inside a roles-style scroller.
|
||||
/// </summary>
|
||||
/// <param name="guide">The guide object.</param>
|
||||
/// <param name="parent">The <see cref="Scroller"/> the page is parented to.</param>
|
||||
/// <param name="settings">The rows to show: key is the label, value is the displayed value.</param>
|
||||
/// <returns>The <see cref="GameObject"/> that holds all the rows. Destroy it to remove the page.</returns>
|
||||
public static GameObject CreateAdvancedSettingsPage(
|
||||
MatchInfoGuide guide,
|
||||
Scroller parent,
|
||||
IReadOnlyList<KeyValuePair<string, string>> settings)
|
||||
{
|
||||
return CreateAdvancedSettingsPage(
|
||||
guide,
|
||||
parent,
|
||||
settings.Select(setting => new AdvancedSettingsRow(setting.Key, setting.Value, null)).ToList(),
|
||||
[.. settings.Select(setting => new AdvancedSettingsRow(setting.Key, setting.Value, null))],
|
||||
2,
|
||||
false);
|
||||
}
|
||||
|
||||
internal static GameObject CreateAdvancedSettingsPage(
|
||||
MatchInfoGuide guide,
|
||||
Scroller parent,
|
||||
List<AdvancedSettingsRow> settings,
|
||||
int columns = 2,
|
||||
@@ -997,7 +993,7 @@ public static class Helpers
|
||||
bounds.Encapsulate(next);
|
||||
return bounds;
|
||||
});
|
||||
var rowScale = (columnWidth / prefabBounds.size.x) * 1.22f;
|
||||
var rowScale = columnWidth / prefabBounds.size.x * 1.22f;
|
||||
var rowHeight = prefabBounds.size.y * rowScale;
|
||||
var rowPitch = 0.45f * rowScale;
|
||||
var groupedSettings = groupsAsColumns
|
||||
@@ -1009,7 +1005,7 @@ public static class Helpers
|
||||
groupsAsColumns = groupedSettings.Count > 1;
|
||||
if (groupsAsColumns)
|
||||
{
|
||||
rowScale = (columnWidth / prefabBounds.size.x) * (columns > 2 ? 1.15f : 1f);
|
||||
rowScale = columnWidth / prefabBounds.size.x * (columns > 2 ? 1.15f : 1f);
|
||||
rowHeight = prefabBounds.size.y * rowScale;
|
||||
rowPitch = 0.45f * rowScale;
|
||||
}
|
||||
@@ -1321,4 +1317,4 @@ public static class Helpers
|
||||
panel.roleCount.fontMaterial.SetFloat(panel.STENCIL_NAME, 50f);
|
||||
panel.roleIcon.transform.localScale = new Vector3(3.5f, 3.5f, 1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user