diff --git a/MiraAPI/Patches/RoleGuidePatches.cs b/MiraAPI/Patches/RoleGuidePatches.cs index 0990064..a2a7b86 100644 --- a/MiraAPI/Patches/RoleGuidePatches.cs +++ b/MiraAPI/Patches/RoleGuidePatches.cs @@ -35,15 +35,21 @@ public static class RoleGuidePatches __instance.matchInfoSettingsMaskArea.size = __instance.MatchInfoRoleMaskArea.size = new Vector2(-6, 1.8f); - __instance.matchInfoPlayersMaskArea.transform.parent.GetAllChildren().First(x => x.name.Contains("BG_Gradient")) + var playerMenuGradient = __instance.matchInfoPlayersMaskArea.transform.parent.GetAllChildren() + .First(x => x.name.Contains("BG_Gradient")); + var settingsenuGradient = __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() .maskInteraction = - __instance.matchInfoSettingsMaskArea.transform.parent.GetAllChildren() - .First(x => x.name.Contains("BG_Gradient")).GetComponent() + settingsenuGradient.GetComponent() .maskInteraction = - __instance.MatchInfoRoleMaskArea.transform.parent.GetAllChildren() - .First(x => x.name.Contains("BG_Gradient")).GetComponent() + roleMenuGradient.GetComponent() .maskInteraction = SpriteMaskInteraction.VisibleInsideMask; + roleMenuGradient.transform.localScale = new Vector3(0.5297f, 0.1565f, 1); + roleMenuGradient.transform.localPosition = new Vector3(0, -0.62f, -5); var wikiTab = Object.Instantiate(__instance.settingsTabs[2], __instance.settingsTabs[2].transform.parent); advancedWikiTab = wikiTab.GetComponent(); } @@ -124,25 +130,87 @@ public static class RoleGuidePatches __instance.matchInfoSettingsMaskArea.size = __instance.MatchInfoRoleMaskArea.size = new Vector2(-6, 1.8f); - __instance.matchInfoPlayersMaskArea.transform.parent.GetAllChildren().First(x => x.name.Contains("BG_Gradient")) + var playerMenuGradient = __instance.matchInfoPlayersMaskArea.transform.parent.GetAllChildren() + .First(x => x.name.Contains("BG_Gradient")); + var settingsenuGradient = __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() .maskInteraction = - __instance.matchInfoSettingsMaskArea.transform.parent.GetAllChildren() - .First(x => x.name.Contains("BG_Gradient")).GetComponent() + settingsenuGradient.GetComponent() .maskInteraction = - __instance.MatchInfoRoleMaskArea.transform.parent.GetAllChildren() - .First(x => x.name.Contains("BG_Gradient")).GetComponent() + roleMenuGradient.GetComponent() .maskInteraction = SpriteMaskInteraction.VisibleInsideMask; + roleMenuGradient.transform.localScale = new Vector3(0.5297f, 0.1565f, 1); + roleMenuGradient.transform.localPosition = new Vector3(0, -0.62f, -5); __instance.MatchInfoRoleMaskArea.material.SetInt(PlayerMaterial.MaskLayer, 50); __instance.matchInfoSettingsMaskArea.material.SetInt(PlayerMaterial.MaskLayer, 50); + var wikiTab = Object.Instantiate(__instance.settingsTabs[2], __instance.settingsTabs[2].transform.parent); wikiTab.transform.FindChild("MaskArea")?.transform.localPosition = new Vector3(-0.0184f, 0.15f, -0.1f); + wikiTab.transform.GetAllChildren() + .First(x => x.name.Contains("BG_Gradient")).transform.localPosition = new Vector3(0, -0.62f, -5); advancedWikiTab = wikiTab.GetComponent(); + DisplayNormalRoleSettings(__instance, true); + + var searchBox = Object.Instantiate(__instance.TabButtons[2].gameObject, __instance.TabButtons[2].transform.parent); + var searchButton = searchBox.GetComponent(); + var tmpText = searchButton.transform.GetChild(0).GetComponent(); + tmpText.GetComponent().Destroy(); + tmpText.transform.localPosition = new Vector3(-1.33f, 0.0343f, -0.2f); + tmpText.color = new Color(0, 0.9656f, 0.8679f, 1); + tmpText.text = string.Empty; + tmpText.color = new Color(0, 0.9656f, 0.8679f, 0.5f); + var inactive = searchButton.inactiveSprites; + var selected = searchButton.selectedSprites; + var highlight = searchButton.activeSprites; + var disabledSprite = searchButton.disabledSprites; + disabledSprite.GetComponent().size = new Vector2(3, 0.6f); + searchButton.Destroy(); + inactive.gameObject.SetActive(false); + selected.gameObject.SetActive(false); + highlight.gameObject.SetActive(false); + disabledSprite.gameObject.SetActive(true); + var button = searchBox.AddComponent(); + button.OnUp = true; + searchBoxTmp = searchBox.AddComponent(); + searchBoxTmp.outputText = tmpText; + button.OnClick.AddListener( + (UnityAction)(() => + { + searchBoxTmp.GiveFocus(); + })); + button.OnMouseOver = new UnityEvent(); + button.OnMouseOut = new UnityEvent(); + button.OnClick = new Button.ButtonClickedEvent(); + searchBoxTmp.OnChange = new Button.ButtonClickedEvent(); + searchBoxTmp.OnChange.AddListener( + (UnityAction)(() => + { + var text = searchBoxTmp.outputText.text; + var newSorted = RolePanels + .OrderByDescending(child => + child.Value.Panel.name.Equals(text, StringComparison.OrdinalIgnoreCase)) + .ThenByDescending(child => child.Value.Panel.name.Contains( + text, + StringComparison.InvariantCultureIgnoreCase)) + .ThenBy(GetSortingOrder()); + + foreach (var pair in newSorted) + { + pair.Value.Panel.transform.SetAsLastSibling(); + } + + advancedWikiTab.ScrollToTop(); + })); } else { DisplayNormalRoleSettings(__instance, false); + searchBoxTmp.SetText(string.Empty); } } else if (__instance.HnSModeSettings.Count == 0) @@ -167,6 +235,7 @@ public static class RoleGuidePatches private static readonly Dictionary RolePanels = []; private static Scroller advancedWikiTab; + private static TextBoxTMP searchBoxTmp; private static GameObject currentAdvancedTabObject; private static TextMeshPro titleText; diff --git a/MiraAPI/Resources/WikiPlayersButtonHover.png b/MiraAPI/Resources/WikiPlayersButtonHover.png new file mode 100644 index 0000000..c4bd871 Binary files /dev/null and b/MiraAPI/Resources/WikiPlayersButtonHover.png differ diff --git a/MiraAPI/Resources/WikiPlayersButtonIdle.png b/MiraAPI/Resources/WikiPlayersButtonIdle.png new file mode 100644 index 0000000..6c991be Binary files /dev/null and b/MiraAPI/Resources/WikiPlayersButtonIdle.png differ diff --git a/MiraAPI/Resources/WikiPlayersButtonOpen.png b/MiraAPI/Resources/WikiPlayersButtonOpen.png new file mode 100644 index 0000000..6e6ccbf Binary files /dev/null and b/MiraAPI/Resources/WikiPlayersButtonOpen.png differ diff --git a/MiraAPI/Resources/WikiRolesButtonHover.png b/MiraAPI/Resources/WikiRolesButtonHover.png new file mode 100644 index 0000000..8bfb8d1 Binary files /dev/null and b/MiraAPI/Resources/WikiRolesButtonHover.png differ diff --git a/MiraAPI/Resources/WikiRolesButtonIdle.png b/MiraAPI/Resources/WikiRolesButtonIdle.png new file mode 100644 index 0000000..c75d077 Binary files /dev/null and b/MiraAPI/Resources/WikiRolesButtonIdle.png differ diff --git a/MiraAPI/Resources/WikiRolesButtonOpen.png b/MiraAPI/Resources/WikiRolesButtonOpen.png new file mode 100644 index 0000000..162bf07 Binary files /dev/null and b/MiraAPI/Resources/WikiRolesButtonOpen.png differ diff --git a/MiraAPI/Resources/WikiSettingsButtonHover.png b/MiraAPI/Resources/WikiSettingsButtonHover.png new file mode 100644 index 0000000..7813904 Binary files /dev/null and b/MiraAPI/Resources/WikiSettingsButtonHover.png differ diff --git a/MiraAPI/Resources/WikiSettingsButtonIdle.png b/MiraAPI/Resources/WikiSettingsButtonIdle.png new file mode 100644 index 0000000..fdf65df Binary files /dev/null and b/MiraAPI/Resources/WikiSettingsButtonIdle.png differ diff --git a/MiraAPI/Resources/WikiSettingsButtonOpen.png b/MiraAPI/Resources/WikiSettingsButtonOpen.png new file mode 100644 index 0000000..ec5bb14 Binary files /dev/null and b/MiraAPI/Resources/WikiSettingsButtonOpen.png differ diff --git a/MiraAPI/Utilities/Assets/MiraAssets.cs b/MiraAPI/Utilities/Assets/MiraAssets.cs index bec994a..0d17ed5 100644 --- a/MiraAPI/Utilities/Assets/MiraAssets.cs +++ b/MiraAPI/Utilities/Assets/MiraAssets.cs @@ -160,5 +160,50 @@ public static class MiraAssets /// public static LoadableResourceAsset ChatOpenSprite { get; } = new("MiraAPI.Resources.NormalChatOpen.png"); + /// + /// Gets the sprite used for players button while hovering. + /// + public static LoadableResourceAsset WikiPlayersButtonHoverSprite { get; } = new("MiraAPI.Resources.WikiPlayersButtonHover.png"); + + /// + /// Gets the sprite used for the players button while hovering. + /// + public static LoadableResourceAsset WikiPlayersButtonIdleSprite { get; } = new("MiraAPI.Resources.WikiPlayersButtonIdle.png"); + + /// + /// Gets the sprite used for the players button while hovering. + /// + public static LoadableResourceAsset WikiPlayersButtonOpenSprite { get; } = new("MiraAPI.Resources.WikiPlayersButtonOpen.png"); + + /// + /// Gets the sprite used for the settings button while hovering. + /// + public static LoadableResourceAsset WikiSettingsButtonHoverSprite { get; } = new("MiraAPI.Resources.WikiSettingsButtonHover.png"); + + /// + /// Gets the sprite used for the settings button while hovering. + /// + public static LoadableResourceAsset WikiSettingsButtonIdleSprite { get; } = new("MiraAPI.Resources.WikiSettingsButtonIdle.png"); + + /// + /// Gets the sprite used for the settings button while hovering. + /// + public static LoadableResourceAsset WikiSettingsButtonOpenSprite { get; } = new("MiraAPI.Resources.WikiSettingsButtonOpen.png"); + + /// + /// Gets the sprite used for the roles button while hovering. + /// + public static LoadableResourceAsset WikiRolesButtonHoverSprite { get; } = new("MiraAPI.Resources.WikiRolesButtonHover.png"); + + /// + /// Gets the sprite used for the roles button while hovering. + /// + public static LoadableResourceAsset WikiRolesButtonIdleSprite { get; } = new("MiraAPI.Resources.WikiRolesButtonIdle.png"); + + /// + /// Gets the sprite used for the roles button while hovering. + /// + public static LoadableResourceAsset WikiRolesButtonOpenSprite { get; } = new("MiraAPI.Resources.WikiRolesButtonOpen.png"); + internal static LoadableResourceAsset BlankSprite { get; } = new("MiraAPI.Resources.BlankSprite.png"); }