Patched collections page's letter viewer menu
parent
9fe91faeee
commit
53f7e3ceb0
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue