diff --git a/MiraAPI/Patches/RoleGuidePatches.cs b/MiraAPI/Patches/RoleGuidePatches.cs index e1ae59c..c968932 100644 --- a/MiraAPI/Patches/RoleGuidePatches.cs +++ b/MiraAPI/Patches/RoleGuidePatches.cs @@ -183,7 +183,7 @@ public static class RoleGuidePatches StringNames.GameTaskBarMode, GameManager.Instance.LogicOptions.GetTaskBarMode().ToString()); var hoverColor = new Color32(255, 255, 255, 150); - foreach (RoleBehaviour roleBehaviour in RoleManager.Instance.AllRoles) + foreach (RoleBehaviour roleBehaviour in RoleManager.Instance.AllRoles.ToArray().OrderBy(x => x.GetRoleName())) { if (roleBehaviour.Role != RoleTypes.Crewmate && roleBehaviour.Role != RoleTypes.Impostor && roleBehaviour.Role is not RoleTypes.CrewmateGhost && @@ -196,6 +196,7 @@ public static class RoleGuidePatches collider.size = new Vector2(0.13f, 0.13f); collider.offset = new Vector2(0, 0); var passiveButton = panel.roleIcon.gameObject.AddComponent(); + passiveButton.ClickSound = HudManager.Instance.MapButton.ClickSound; passiveButton.OnMouseOver = new UnityEvent(); passiveButton.OnMouseOver.AddListener( (UnityAction)(() => @@ -320,15 +321,11 @@ public static class RoleGuidePatches if (role is ICustomRole custom) { CurrentAdvancedTabObject = custom.GetAdvancedWiki(instance, TitleText, AdvancedWikiTab); - CurrentAdvancedTabObject.transform.localPosition = new Vector3(0f, 0f, 0f); } else { AdvancedWikiTab.ScrollToTop(); - CurrentAdvancedTabObject = new GameObject($"{role.Role}"); - TitleText.text = role.GetRoleName() + $" ({TranslationController.Instance.GetString(role.TeamType is RoleTeamTypes.Crewmate ? StringNames.Crewmate : StringNames.Impostor)})"; - var desc = Object.Instantiate(instance.MatchInfoRolePanelPrefab.roleCount, CurrentAdvancedTabObject.transform); - desc.fontSizeMin = desc.fontSizeMax = desc.fontSize = 2f; + var titleTxt = role.GetRoleName() + $" ({TranslationController.Instance.GetString(role.TeamType is RoleTeamTypes.Crewmate ? StringNames.Crewmate : StringNames.Impostor)})"; var description = TranslationController.Instance.GetString(role.BlurbNameLong); if (description.Contains("STRMISS")) { @@ -339,14 +336,16 @@ public static class RoleGuidePatches } } - desc.text = description; - desc.rectTransform.sizeDelta = new Vector2(7.5f, 0.3f); - desc.alignment = TextAlignmentOptions.TopLeft; + CurrentAdvancedTabObject = Helpers.CreateAdvancedWikiTab( + instance, + role.Role.ToString(), + titleTxt, + description, + TitleText, + out var desc); CurrentAdvancedTabObject.transform.SetParent(AdvancedWikiTab.Inner.transform); - desc.transform.localPosition = new Vector3(0, 1.125f, 0); CurrentAdvancedTabObject.transform.localPosition = new Vector3(0f, 0f, 0f); - desc.ForceMeshUpdate(); - AdvancedWikiTab.SetYBoundsMax(Mathf.Clamp(desc.textBounds.size.y- 2, 0f, 999f)); + AdvancedWikiTab.SetYBoundsMax(Mathf.Clamp(desc.textBounds.size.y - 2, 0f, 999f)); } } [HarmonyPrefix] diff --git a/MiraAPI/Roles/ICustomRole.cs b/MiraAPI/Roles/ICustomRole.cs index d495298..6906ab5 100644 --- a/MiraAPI/Roles/ICustomRole.cs +++ b/MiraAPI/Roles/ICustomRole.cs @@ -6,6 +6,7 @@ using MiraAPI.GameOptions; using MiraAPI.Modifiers; using MiraAPI.PluginLoading; using MiraAPI.Translation; +using MiraAPI.Utilities; using TMPro; using UnityEngine; using Object = UnityEngine.Object; @@ -318,16 +319,15 @@ public interface ICustomRole : IOptionable public virtual GameObject GetAdvancedWiki(MatchInfoGuide guide, TextMeshPro titleText, Scroller parent) { parent.ScrollToTop(); - var obj = new GameObject(RoleNameLocale); - titleText.text = RoleName + $" ({RoleFactionTitle})"; - var desc = Object.Instantiate(guide.MatchInfoRolePanelPrefab.roleCount, obj.transform); - desc.fontSizeMin = desc.fontSizeMax = desc.fontSize = 2f; - desc.text = RoleWikiDescription; - desc.rectTransform.sizeDelta = new Vector2(7.5f, 0.3f); - desc.alignment = TextAlignmentOptions.TopLeft; + var obj = Helpers.CreateAdvancedWikiTab( + guide, + RoleNameLocale, + RoleName + $" ({RoleFactionTitle})", + RoleWikiDescription, + titleText, + out var desc); obj.transform.SetParent(parent.Inner.transform); - desc.transform.localPosition = new Vector3(0, 1.125f, 0); - desc.ForceMeshUpdate(); + obj.transform.localPosition = new Vector3(0f, 0f, 0f); parent.SetYBoundsMax(Mathf.Clamp(desc.textBounds.size.y - 2, 0f, 999f)); return obj; } diff --git a/MiraAPI/Utilities/Helpers.cs b/MiraAPI/Utilities/Helpers.cs index 5a70c2c..a983d53 100644 --- a/MiraAPI/Utilities/Helpers.cs +++ b/MiraAPI/Utilities/Helpers.cs @@ -594,4 +594,21 @@ public static class Helpers // This should be patchable by mods when a vanilla role is meant to be replaced by a custom role. return false; } + public static GameObject CreateAdvancedWikiTab(MatchInfoGuide guide, string objName, string title, string description, TextMeshPro titleTmp, out TextMeshPro descriptionTmp) + { + var obj = new GameObject(objName); + titleTmp.text = title; + descriptionTmp = Object.Instantiate(guide.MatchInfoRolePanelPrefab.roleCount, obj.transform); + descriptionTmp.fontSizeMin = descriptionTmp.fontSizeMax = descriptionTmp.fontSize = 2f; + var sourceTmp = HudManager.Instance.TaskPanel.taskText; + descriptionTmp.font = sourceTmp.font; + descriptionTmp.fontMaterial = sourceTmp.fontMaterial; + descriptionTmp.EnableStencilMasking(); + descriptionTmp.text = description; + descriptionTmp.rectTransform.sizeDelta = new Vector2(7.5f, 0.3f); + descriptionTmp.alignment = TextAlignmentOptions.TopLeft; + descriptionTmp.transform.localPosition = new Vector3(0, 1.125f, 0); + descriptionTmp.ForceMeshUpdate(); + return obj; + } }