Patched collections page's letter viewer menu
This commit is contained in:
		@@ -101,6 +101,11 @@ namespace stardew_access
 | 
				
			|||||||
                original: AccessTools.Method(typeof(JunimoNoteMenu), nameof(JunimoNoteMenu.draw), new Type[] { typeof(SpriteBatch) }),
 | 
					                original: AccessTools.Method(typeof(JunimoNoteMenu), nameof(JunimoNoteMenu.draw), new Type[] { typeof(SpriteBatch) }),
 | 
				
			||||||
                postfix: new HarmonyMethod(typeof(GameMenuPatches), nameof(GameMenuPatches.JunimoNoteMenuPatch))
 | 
					                postfix: new HarmonyMethod(typeof(GameMenuPatches), nameof(GameMenuPatches.JunimoNoteMenuPatch))
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            harmony.Patch(
 | 
				
			||||||
 | 
					                original: AccessTools.Method(typeof(CollectionsPage), nameof(CollectionsPage.draw), new Type[] { typeof(SpriteBatch) }),
 | 
				
			||||||
 | 
					                postfix: new HarmonyMethod(typeof(GameMenuPatches), nameof(GameMenuPatches.CollectionsPagePatch))
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
            #endregion
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #region Menu Patches
 | 
					            #region Menu Patches
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -330,65 +330,7 @@ namespace stardew_access.Patches
 | 
				
			|||||||
                if (!__instance.IsActive())
 | 
					                if (!__instance.IsActive())
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int x = Game1.getMousePosition().X, y = Game1.getMousePosition().Y;
 | 
					                NarrateLetterContent(__instance);
 | 
				
			||||||
                #region Texts in the letter
 | 
					 | 
				
			||||||
                string message = __instance.mailMessage[__instance.page];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                string toSpeak = $"{message}";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (__instance.ShouldShowInteractable())
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (__instance.moneyIncluded > 0)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        string moneyText = Game1.content.LoadString("Strings\\UI:LetterViewer_MoneyIncluded", __instance.moneyIncluded);
 | 
					 | 
				
			||||||
                        toSpeak += $"\t\n\t ,Included money: {moneyText}";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    else if (__instance.learnedRecipe != null && __instance.learnedRecipe.Length > 0)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        string recipeText = Game1.content.LoadString("Strings\\UI:LetterViewer_LearnedRecipe", __instance.cookingOrCrafting);
 | 
					 | 
				
			||||||
                        toSpeak += $"\t\n\t ,Learned Recipe: {recipeText}";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (currentLetterText != toSpeak)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    currentLetterText = toSpeak;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    // snap mouse to accept quest button
 | 
					 | 
				
			||||||
                    if (__instance.acceptQuestButton != null && __instance.questID != -1)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        toSpeak += "\t\n Left click to accept quest.";
 | 
					 | 
				
			||||||
                        __instance.acceptQuestButton.snapMouseCursorToCenter();
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    if (__instance.mailMessage.Count > 1)
 | 
					 | 
				
			||||||
                        toSpeak = $"Page {__instance.page + 1} of {__instance.mailMessage.Count}:\n\t{toSpeak}";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    MainClass.GetScreenReader().Say(toSpeak, false);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                #region Narrate items given in the mail
 | 
					 | 
				
			||||||
                if (__instance.ShouldShowInteractable())
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    foreach (ClickableComponent c in __instance.itemsToGrab)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        string name = c.name;
 | 
					 | 
				
			||||||
                        string label = c.label;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        if (c.containsPoint(x, y))
 | 
					 | 
				
			||||||
                            MainClass.GetScreenReader().SayWithChecker($"Grab: {name} \t\n {label}", false);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                #region Narrate buttons
 | 
					 | 
				
			||||||
                if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y))
 | 
					 | 
				
			||||||
                    MainClass.GetScreenReader().SayWithChecker($"Previous page button", false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y))
 | 
					 | 
				
			||||||
                    MainClass.GetScreenReader().SayWithChecker($"Next page button", false);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                #endregion
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -396,5 +338,68 @@ namespace stardew_access.Patches
 | 
				
			|||||||
                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
					                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal static void NarrateLetterContent(LetterViewerMenu __instance)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            int x = Game1.getMousePosition().X, y = Game1.getMousePosition().Y;
 | 
				
			||||||
 | 
					            #region Texts in the letter
 | 
				
			||||||
 | 
					            string message = __instance.mailMessage[__instance.page];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            string toSpeak = $"{message}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (__instance.ShouldShowInteractable())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (__instance.moneyIncluded > 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    string moneyText = Game1.content.LoadString("Strings\\UI:LetterViewer_MoneyIncluded", __instance.moneyIncluded);
 | 
				
			||||||
 | 
					                    toSpeak += $"\t\n\t ,Included money: {moneyText}";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                else if (__instance.learnedRecipe != null && __instance.learnedRecipe.Length > 0)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    string recipeText = Game1.content.LoadString("Strings\\UI:LetterViewer_LearnedRecipe", __instance.cookingOrCrafting);
 | 
				
			||||||
 | 
					                    toSpeak += $"\t\n\t ,Learned Recipe: {recipeText}";
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (currentLetterText != toSpeak)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                currentLetterText = toSpeak;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // snap mouse to accept quest button
 | 
				
			||||||
 | 
					                if (__instance.acceptQuestButton != null && __instance.questID != -1)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    toSpeak += "\t\n Left click to accept quest.";
 | 
				
			||||||
 | 
					                    __instance.acceptQuestButton.snapMouseCursorToCenter();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (__instance.mailMessage.Count > 1)
 | 
				
			||||||
 | 
					                    toSpeak = $"Page {__instance.page + 1} of {__instance.mailMessage.Count}:\n\t{toSpeak}";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                MainClass.GetScreenReader().Say(toSpeak, true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #region Narrate items given in the mail
 | 
				
			||||||
 | 
					            if (__instance.ShouldShowInteractable())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                foreach (ClickableComponent c in __instance.itemsToGrab)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    string name = c.name;
 | 
				
			||||||
 | 
					                    string label = c.label;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (c.containsPoint(x, y))
 | 
				
			||||||
 | 
					                        MainClass.GetScreenReader().SayWithChecker($"Grab: {name} \t\n {label}", false);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #region Narrate buttons
 | 
				
			||||||
 | 
					            if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y))
 | 
				
			||||||
 | 
					                MainClass.GetScreenReader().SayWithChecker($"Previous page button", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y))
 | 
				
			||||||
 | 
					                MainClass.GetScreenReader().SayWithChecker($"Next page button", false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@ using StardewValley.Objects;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace stardew_access.Patches
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    // Menus in the game menu i.e., the menu which opens when we press `e`
 | 
				
			||||||
    internal class GameMenuPatches
 | 
					    internal class GameMenuPatches
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        internal static string hoveredItemQueryKey = "";
 | 
					        internal static string hoveredItemQueryKey = "";
 | 
				
			||||||
@@ -19,11 +20,28 @@ namespace stardew_access.Patches
 | 
				
			|||||||
        internal static string socialPageQuery = "";
 | 
					        internal static string socialPageQuery = "";
 | 
				
			||||||
        internal static string profilePageQuery = "";
 | 
					        internal static string profilePageQuery = "";
 | 
				
			||||||
        internal static string junimoNoteMenuQuery = "";
 | 
					        internal static string junimoNoteMenuQuery = "";
 | 
				
			||||||
 | 
					        internal static string collectionsPageQuery = "";
 | 
				
			||||||
        internal static int currentSelectedCraftingRecipe = -1;
 | 
					        internal static int currentSelectedCraftingRecipe = -1;
 | 
				
			||||||
        internal static bool isSelectingRecipe = false;
 | 
					        internal static bool isSelectingRecipe = false;
 | 
				
			||||||
        internal static bool isUsingCustomButtons = false;
 | 
					        internal static bool isUsingCustomButtons = false;
 | 
				
			||||||
        internal static int currentIngredientListItem = -1, currentIngredientInputSlot = -1, currentInventorySlot = -1;
 | 
					        internal static int currentIngredientListItem = -1, currentIngredientInputSlot = -1, currentInventorySlot = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal static void CollectionsPagePatch(CollectionsPage __instance)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                int x = Game1.getMousePosition().X, y = Game1.getMousePosition().Y;
 | 
				
			||||||
 | 
					                if (__instance.letterviewerSubMenu != null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    DialoguePatches.NarrateLetterContent(__instance.letterviewerSubMenu);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (System.Exception e)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static void JunimoNoteMenuPatch(JunimoNoteMenu __instance, bool ___specificBundlePage, int ___whichArea, Bundle ___currentPageBundle)
 | 
					        internal static void JunimoNoteMenuPatch(JunimoNoteMenu __instance, bool ___specificBundlePage, int ___whichArea, Bundle ___currentPageBundle)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user