From ce5e85c9b956185199f217f55e571cc0ac3a43a2 Mon Sep 17 00:00:00 2001 From: shoaib11120 Date: Fri, 21 Jan 2022 15:30:16 +0530 Subject: [PATCH] Added an api for the ScreenReader.cs --- stardew-access/CustomCommands.cs | 2 +- stardew-access/Features/Other.cs | 6 +- stardew-access/Features/ReadTile.cs | 18 +++--- stardew-access/ModEntry.cs | 18 ++++-- stardew-access/Patches/ChatManuPatches.cs | 4 +- stardew-access/Patches/DialoguePatches.cs | 14 ++--- stardew-access/Patches/GameMenuPatches.cs | 68 +++++++++++----------- stardew-access/Patches/MenuPatches.cs | 28 ++++----- stardew-access/Patches/QuestPatches.cs | 14 ++--- stardew-access/Patches/TitleMenuPatches.cs | 18 +++--- stardew-access/ScreenReader.cs | 43 +++++++++++--- 11 files changed, 133 insertions(+), 100 deletions(-) diff --git a/stardew-access/CustomCommands.cs b/stardew-access/CustomCommands.cs index b44f025..4e45782 100644 --- a/stardew-access/CustomCommands.cs +++ b/stardew-access/CustomCommands.cs @@ -107,7 +107,7 @@ namespace stardew_access helper.ConsoleCommands.Add("refsr", "Refresh screen reader", (string commmand, string[] args) => { - ScreenReader.initializeScreenReader(); + MainClass.screenReader.InitializeScreenReader(); MainClass.monitor.Log("Screen Reader refreshed!", LogLevel.Info); }); diff --git a/stardew-access/Features/Other.cs b/stardew-access/Features/Other.cs index 9a8eeda..f1b4ddb 100644 --- a/stardew-access/Features/Other.cs +++ b/stardew-access/Features/Other.cs @@ -23,7 +23,7 @@ namespace stardew_access.Game return; previousSlotItem = currentSlotItem; - ScreenReader.say($"{currentSlotItem.DisplayName} Selected", true); + MainClass.screenReader.Say($"{currentSlotItem.DisplayName} Selected", true); } // Narrates current location's name @@ -38,7 +38,7 @@ namespace stardew_access.Game return; previousLocation = currentLocation; - ScreenReader.say($"{currentLocation.Name} Entered",true); + MainClass.screenReader.Say($"{currentLocation.Name} Entered",true); } public static void SnapMouseToPlayer() @@ -89,7 +89,7 @@ namespace stardew_access.Game { MainClass.hudMessageQueryKey = searchQuery; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } } } diff --git a/stardew-access/Features/ReadTile.cs b/stardew-access/Features/ReadTile.cs index 848359f..276ea1d 100644 --- a/stardew-access/Features/ReadTile.cs +++ b/stardew-access/Features/ReadTile.cs @@ -33,7 +33,7 @@ namespace stardew_access.Game { if (!manuallyTriggered && prevTile != gt) { - ScreenReader.prevTextTile = " "; + MainClass.screenReader.prevTextTile = " "; } Dictionary> terrainFeature = Game1.currentLocation.terrainFeatures.FieldDict; @@ -45,7 +45,7 @@ namespace stardew_access.Game NPC npc = Game1.currentLocation.isCharacterAtTile(gt); toSpeak = npc.displayName; } - else if(getFarmAnimalAt(Game1.currentLocation, x, y) != null) + else if (getFarmAnimalAt(Game1.currentLocation, x, y) != null) { toSpeak = getFarmAnimalAt(Game1.currentLocation, x, y); } @@ -77,11 +77,11 @@ namespace stardew_access.Game { toSpeak = "Ladder"; } - else if(getBuildingAtTile(x, y) != null) + else if (getBuildingAtTile(x, y) != null) { toSpeak = getBuildingAtTile(x, y); } - else if(getJunimoBundleAt(x, y) != null) + else if (getJunimoBundleAt(x, y) != null) { toSpeak = getJunimoBundleAt(x, y); } @@ -89,17 +89,17 @@ namespace stardew_access.Game #region Narrate toSpeak if (toSpeak != " ") - if (manuallyTriggered) - ScreenReader.say(toSpeak, true); - else - ScreenReader.sayWithTileQuery(toSpeak, x, y, true); + if (manuallyTriggered) + MainClass.screenReader.Say(toSpeak, true); + else + MainClass.screenReader.SayWithTileQuery(toSpeak, x, y, true); #endregion #region Play colliding sound effect if (isCollidingAtTile(x, y) && prevTile != gt) { Game1.playSound("colliding"); - } + } #endregion prevTile = gt; diff --git a/stardew-access/ModEntry.cs b/stardew-access/ModEntry.cs index dee50d2..036ae26 100644 --- a/stardew-access/ModEntry.cs +++ b/stardew-access/ModEntry.cs @@ -22,6 +22,7 @@ namespace stardew_access AutoHotkeyEngine ahk; public static string hudMessageQueryKey = ""; public static Radar radarFeature; + public static ScreenReader screenReader; /********* ** Public methods @@ -50,7 +51,8 @@ namespace stardew_access monitor.Log($"Unable to initialize AutoHotKey:\n{e.Message}\n{e.StackTrace}", LogLevel.Error); } - ScreenReader.initializeScreenReader(); + screenReader = new ScreenReader(); + screenReader.InitializeScreenReader(); CustomSoundEffects.Initialize(helper); @@ -67,6 +69,12 @@ namespace stardew_access helper.Events.GameLoop.UpdateTicked += this.onUpdateTicked; } + /// Returns the Screen Reader class for other mods to use. + public override object GetApi() + { + return new ScreenReader(); + } + private void onUpdateTicked(object sender, UpdateTickedEventArgs e) { if (!Context.IsPlayerFree) @@ -104,28 +112,28 @@ namespace stardew_access if (Equals(e.Button, SButton.H)) { string toSpeak = $"Health is {CurrentPlayer.getHealth()} and Stamina is {CurrentPlayer.getStamina()}"; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } // Narrate Position if (Equals(e.Button, SButton.K)) { string toSpeak = $"X: {CurrentPlayer.getPositionX()} , Y: {CurrentPlayer.getPositionY()}"; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } // Narrate money at hand if (Equals(e.Button, SButton.R)) { string toSpeak = $"You have {CurrentPlayer.getMoney()}g"; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } // Narrate time and season if (Equals(e.Button, SButton.Q)) { string toSpeak = $"Time is {CurrentPlayer.getTimeOfDay()} and it is {CurrentPlayer.getDay()} {CurrentPlayer.getDate()} of {CurrentPlayer.getSeason()}"; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } // Manual read tile diff --git a/stardew-access/Patches/ChatManuPatches.cs b/stardew-access/Patches/ChatManuPatches.cs index 764709c..adec1ba 100644 --- a/stardew-access/Patches/ChatManuPatches.cs +++ b/stardew-access/Patches/ChatManuPatches.cs @@ -42,7 +42,7 @@ namespace stardew_access.Patches toSpeak += $"{message.message}, "; }); if (toSpeak != " ") - ScreenReader.sayWithChatChecker(toSpeak, false); + MainClass.screenReader.SayWithChatChecker(toSpeak, false); #endregion } } @@ -78,7 +78,7 @@ namespace stardew_access.Patches toSpeak += $"{message.message}, "; }); - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); isChatRunning = false; } } diff --git a/stardew-access/Patches/DialoguePatches.cs b/stardew-access/Patches/DialoguePatches.cs index be24f0a..dd33f85 100644 --- a/stardew-access/Patches/DialoguePatches.cs +++ b/stardew-access/Patches/DialoguePatches.cs @@ -49,9 +49,9 @@ namespace stardew_access.Patches if (toSpeak != " ") { if (hasResponses) - ScreenReader.sayWithChecker(toSpeak, false); + MainClass.screenReader.SayWithChecker(toSpeak, false); else - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } } else if (__instance.isQuestion) @@ -80,9 +80,9 @@ namespace stardew_access.Patches if (toSpeak != " ") { if (hasResponses) - ScreenReader.sayWithChecker(toSpeak, false); + MainClass.screenReader.SayWithChecker(toSpeak, false); else - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } } else if (Game1.activeClickableMenu is DialogueBox) @@ -91,7 +91,7 @@ namespace stardew_access.Patches if (currentDialogue != __instance.getCurrentString()) { currentDialogue = __instance.getCurrentString(); - ScreenReader.say(__instance.getCurrentString(), true); + MainClass.screenReader.Say(__instance.getCurrentString(), true); } } } @@ -261,9 +261,9 @@ namespace stardew_access.Patches if (toSpeak.ToString() != " ") { if (Context.IsPlayerFree) - ScreenReader.sayWithChecker(toSpeak.ToString(), true); // Normal Checker + MainClass.screenReader.SayWithChecker(toSpeak.ToString(), true); // Normal Checker else - ScreenReader.sayWithMenuChecker(toSpeak.ToString(), true); // Menu Checker + MainClass.screenReader.SayWithMenuChecker(toSpeak.ToString(), true); // Menu Checker } #endregion } diff --git a/stardew-access/Patches/GameMenuPatches.cs b/stardew-access/Patches/GameMenuPatches.cs index fe9031d..176afbb 100644 --- a/stardew-access/Patches/GameMenuPatches.cs +++ b/stardew-access/Patches/GameMenuPatches.cs @@ -47,7 +47,7 @@ namespace stardew_access.Patches { shopMenuQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); Game1.playSound("drop_item"); } return; @@ -59,7 +59,7 @@ namespace stardew_access.Patches { shopMenuQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -70,7 +70,7 @@ namespace stardew_access.Patches { shopMenuQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -117,7 +117,7 @@ namespace stardew_access.Patches { shopMenuQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } } #endregion @@ -146,7 +146,7 @@ namespace stardew_access.Patches if (gameMenuQueryKey != toSpeak) { gameMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -175,7 +175,7 @@ namespace stardew_access.Patches if (geodeMenuQueryKey != toSpeak) { geodeMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -188,7 +188,7 @@ namespace stardew_access.Patches if (geodeMenuQueryKey != toSpeak) { geodeMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -200,7 +200,7 @@ namespace stardew_access.Patches if (geodeMenuQueryKey != toSpeak) { geodeMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); Game1.playSound("drop_item"); } return; @@ -213,7 +213,7 @@ namespace stardew_access.Patches if (geodeMenuQueryKey != toSpeak) { geodeMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -225,7 +225,7 @@ namespace stardew_access.Patches if (geodeMenuQueryKey != toSpeak) { geodeMenuQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -270,7 +270,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; hoveredItemQueryKey = ""; gameMenuQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -282,7 +282,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -295,7 +295,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -308,7 +308,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -321,7 +321,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -335,7 +335,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -349,7 +349,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -362,7 +362,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); Game1.playSound("drop_item"); } return; @@ -404,7 +404,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -542,7 +542,7 @@ namespace stardew_access.Patches { craftingPageQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -554,7 +554,7 @@ namespace stardew_access.Patches { craftingPageQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -566,7 +566,7 @@ namespace stardew_access.Patches { craftingPageQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -578,7 +578,7 @@ namespace stardew_access.Patches { craftingPageQueryKey = toSpeak; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); Game1.playSound("drop_item"); } return; @@ -655,7 +655,7 @@ namespace stardew_access.Patches craftingPageQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -722,7 +722,7 @@ namespace stardew_access.Patches inventoryPageQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); Game1.playSound("drop_item"); } return; @@ -736,7 +736,7 @@ namespace stardew_access.Patches inventoryPageQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -749,7 +749,7 @@ namespace stardew_access.Patches inventoryPageQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -762,7 +762,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -776,7 +776,7 @@ namespace stardew_access.Patches itemGrabMenuQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -872,7 +872,7 @@ namespace stardew_access.Patches inventoryPageQueryKey = toSpeak; gameMenuQueryKey = ""; hoveredItemQueryKey = ""; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -935,7 +935,7 @@ namespace stardew_access.Patches { gameMenuQueryKey = ""; optionsPageQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -959,7 +959,7 @@ namespace stardew_access.Patches { gameMenuQueryKey = ""; exitPageQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -971,7 +971,7 @@ namespace stardew_access.Patches { gameMenuQueryKey = ""; exitPageQueryKey = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return; } @@ -1110,7 +1110,7 @@ namespace stardew_access.Patches if (hoveredItemQueryKey != $"{toSpeak}:{i}") { hoveredItemQueryKey = $"{toSpeak}:{i}"; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } return true; } diff --git a/stardew-access/Patches/MenuPatches.cs b/stardew-access/Patches/MenuPatches.cs index 946e1ce..ad0b66b 100644 --- a/stardew-access/Patches/MenuPatches.cs +++ b/stardew-access/Patches/MenuPatches.cs @@ -52,13 +52,13 @@ namespace stardew_access.Patches if(__instance.nextPageButton != null && __instance.nextPageButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker($"Next Page Button", true); + MainClass.screenReader.SayWithMenuChecker($"Next Page Button", true); return; } if (__instance.previousPageButton != null && __instance.previousPageButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker($"Previous Page Button", true); + MainClass.screenReader.SayWithMenuChecker($"Previous Page Button", true); return; } @@ -66,7 +66,7 @@ namespace stardew_access.Patches { if(__instance.languages[i].containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker($"{__instance.languageList[i]} Button", true); + MainClass.screenReader.SayWithMenuChecker($"{__instance.languageList[i]} Button", true); break; } } @@ -86,7 +86,7 @@ namespace stardew_access.Patches { if(___elevators[i].containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker($"{___elevators[i].name} level", true); + MainClass.screenReader.SayWithMenuChecker($"{___elevators[i].name} level", true); break; } } @@ -105,7 +105,7 @@ namespace stardew_access.Patches ___textBox.SelectMe(); string toSpeak = $"{title}"; - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } catch (Exception e) { @@ -119,13 +119,13 @@ namespace stardew_access.Patches { int x = Game1.getMousePosition(true).X, y = Game1.getMousePosition(true).Y; - ScreenReader.sayWithMenuChecker(___message, true); + MainClass.screenReader.SayWithMenuChecker(___message, true); if(__instance.okButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker("Ok Button", false); + MainClass.screenReader.SayWithMenuChecker("Ok Button", false); } else if (__instance.cancelButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker("Cancel Button", false); + MainClass.screenReader.SayWithMenuChecker("Cancel Button", false); } } catch (Exception e) @@ -187,10 +187,10 @@ namespace stardew_access.Patches } if (toSpeak != " ") - ScreenReader.sayWithMenuChecker(toSpeak, true); + MainClass.screenReader.SayWithMenuChecker(toSpeak, true); else if (__instance.isProfessionChooser && currentLevelUpTitle != $"{___title}. Select a new profession.") { - ScreenReader.sayWithMenuChecker($"{___title}. Select a new profession.", true); + MainClass.screenReader.SayWithMenuChecker($"{___title}. Select a new profession.", true); currentLevelUpTitle = $"{___title}. Select a new profession."; } } @@ -211,14 +211,14 @@ namespace stardew_access.Patches if (__instance.okButton.containsPoint(Game1.getMousePosition(true).X, Game1.getMousePosition(true).Y)) { toSpeak = $"{total}g in total. Press left mouse button to save."; - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } for (int i = 0; i < __instance.categories.Count; i++) { if (__instance.categories[i].containsPoint(Game1.getMousePosition(true).X, Game1.getMousePosition(true).Y)) { toSpeak = $"Money recieved from {__instance.getCategoryName(i)}: {___categoryTotals[i]}g."; - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } } } @@ -265,7 +265,7 @@ namespace stardew_access.Patches toSpeak += "\t\n Left click to accept quest."; __instance.acceptQuestButton.snapMouseCursorToCenter(); } - ScreenReader.say(toSpeak, false); + MainClass.screenReader.Say(toSpeak, false); } #endregion @@ -278,7 +278,7 @@ namespace stardew_access.Patches string label = c.label; if (c.containsPoint(Game1.getMousePosition().X, Game1.getMousePosition().Y)) - ScreenReader.sayWithChecker($"Grab: {name} \t\n {label}", false); + MainClass.screenReader.SayWithChecker($"Grab: {name} \t\n {label}", false); } } #endregion diff --git a/stardew-access/Patches/QuestPatches.cs b/stardew-access/Patches/QuestPatches.cs index 16b8ae3..cd956ea 100644 --- a/stardew-access/Patches/QuestPatches.cs +++ b/stardew-access/Patches/QuestPatches.cs @@ -23,7 +23,7 @@ namespace stardew_access.Patches toSpeak = $"Left Quest:\n\t{toSpeak}\n\tPress left click to accept this quest."; - ScreenReader.sayWithMenuChecker(toSpeak, true); + MainClass.screenReader.SayWithMenuChecker(toSpeak, true); return; } @@ -33,7 +33,7 @@ namespace stardew_access.Patches toSpeak = $"Right Quest:\n\t{toSpeak}\n\tPress left click to accept this quest."; - ScreenReader.sayWithMenuChecker(toSpeak, true); + MainClass.screenReader.SayWithMenuChecker(toSpeak, true); return; } } @@ -99,7 +99,7 @@ namespace stardew_access.Patches if (Game1.dayOfMonth == i + 1) toSpeak += $", Current"; - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } } #endregion @@ -114,7 +114,7 @@ namespace stardew_access.Patches if (currentDailyQuestText != toSpeak) { currentDailyQuestText = toSpeak; - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } } else @@ -134,7 +134,7 @@ namespace stardew_access.Patches __instance.acceptQuestButton.snapMouseCursorToCenter(); } - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } } #endregion @@ -171,7 +171,7 @@ namespace stardew_access.Patches toSpeak += ___pages[___currentPage][i].ShouldDisplayAsComplete() ? " completed!" : ""; if (__instance.questLogButtons[i].containsPoint(Game1.getOldMouseX(), Game1.getOldMouseY())) { - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } } } @@ -229,7 +229,7 @@ namespace stardew_access.Patches if (snapMouseToRewardBox) __instance.rewardBox.snapMouseCursorToCenter(); - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); #endregion } } diff --git a/stardew-access/Patches/TitleMenuPatches.cs b/stardew-access/Patches/TitleMenuPatches.cs index d0508ff..dad8fb7 100644 --- a/stardew-access/Patches/TitleMenuPatches.cs +++ b/stardew-access/Patches/TitleMenuPatches.cs @@ -45,7 +45,7 @@ namespace stardew_access.Patches #endregion if (toSpeak != " ") - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } catch (Exception e) { @@ -95,11 +95,11 @@ namespace stardew_access.Patches if (TitleMenu.subMenu != null && __instance.backButton.containsPoint(Game1.getMousePosition(true).X, Game1.getMousePosition(true).Y)) { string text = "Back Button"; - ScreenReader.sayWithChecker(text, true); + MainClass.screenReader.SayWithChecker(text, true); } if (TitleMenu.subMenu == null && toSpeak != "") - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); } catch (Exception e) { @@ -119,7 +119,7 @@ namespace stardew_access.Patches #region Farms if (___menu.deleteButtons.Count > 0 && ___menu.deleteButtons[i].containsPoint(x, y)) { - ScreenReader.sayWithChecker($"Delete {__instance.Farmer.farmName} Farm", true); + MainClass.screenReader.SayWithChecker($"Delete {__instance.Farmer.farmName} Farm", true); return; } @@ -128,14 +128,14 @@ namespace stardew_access.Patches // Used diff. functions to narrate to prevent it from speaking the message again on selecting another button. string message = "Really delete farm?"; - ScreenReader.sayWithChecker(message, true); + MainClass.screenReader.SayWithChecker(message, true); if (___menu.okDeleteButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker("Ok Button", false); + MainClass.screenReader.SayWithMenuChecker("Ok Button", false); } else if (___menu.cancelDeleteButton.containsPoint(x, y)) { - ScreenReader.sayWithMenuChecker("Cancel Button", false); + MainClass.screenReader.SayWithMenuChecker("Cancel Button", false); } return; } @@ -150,7 +150,7 @@ namespace stardew_access.Patches string toSpeak = $"{farmName} Farm Selected, \t\n Farmer:{farmerName}, \t\nMoney:{money}, \t\nHours Played:{hoursPlayed}, \t\nDate:{dateStringForSaveGame}"; - ScreenReader.sayWithChecker(toSpeak, true); + MainClass.screenReader.SayWithChecker(toSpeak, true); #endregion } } @@ -640,7 +640,7 @@ namespace stardew_access.Patches if(toSpeak!=" ") { - ScreenReader.say(toSpeak, true); + MainClass.screenReader.Say(toSpeak, true); } await Task.Delay(200); diff --git a/stardew-access/ScreenReader.cs b/stardew-access/ScreenReader.cs index a526ff2..76e04ba 100644 --- a/stardew-access/ScreenReader.cs +++ b/stardew-access/ScreenReader.cs @@ -3,12 +3,13 @@ using StardewModdingAPI; namespace stardew_access { - internal class ScreenReader + public class ScreenReader { - public static IAccessibleOutput? screenReader = null; - internal static string prevText = "", prevTextTile = " ", prevChatText = "", prevMenuText = ""; + public IAccessibleOutput? screenReader = null; + public string prevText = "", prevTextTile = " ", prevChatText = "", prevMenuText = ""; - public static void initializeScreenReader() + /// Initializes the screen reader. + public void InitializeScreenReader() { NvdaOutput? nvdaOutput = null; JawsOutput? jawsOutput = null; @@ -45,7 +46,10 @@ namespace stardew_access MainClass.monitor.Log($"Unable to load any screen reader!", LogLevel.Error); } - public static void say(string text, bool interrupt) + /// Speaks the text via the loaded screen reader (if any). + /// The text to be narrated. + /// Whether to skip the currently speaking text or not. + public void Say(string text, bool interrupt) { if (screenReader == null) return; @@ -53,7 +57,11 @@ namespace stardew_access screenReader.Speak(text, interrupt); } - public static void sayWithChecker(string text, bool interrupt) + /// Speaks the text via the loaded screen reader (if any). + ///
Skips the text narration if the previously narrated text was the same as the one provided.
+ /// The text to be narrated. + /// Whether to skip the currently speaking text or not. + public void SayWithChecker(string text, bool interrupt) { if (screenReader == null) return; @@ -65,7 +73,12 @@ namespace stardew_access } } - public static void sayWithMenuChecker(string text, bool interrupt) + /// Speaks the text via the loaded screen reader (if any). + ///
Skips the text narration if the previously narrated text was the same as the one provided. + ///

Use this when narrating hovered component in menus to avoid interference.
+ /// The text to be narrated. + /// Whether to skip the currently speaking text or not. + public void SayWithMenuChecker(string text, bool interrupt) { if (screenReader == null) return; @@ -77,7 +90,12 @@ namespace stardew_access } } - public static void sayWithChatChecker(string text, bool interrupt) + /// Speaks the text via the loaded screen reader (if any). + ///
Skips the text narration if the previously narrated text was the same as the one provided. + ///

Use this when narrating chat messages to avoid interference.
+ /// The text to be narrated. + /// Whether to skip the currently speaking text or not. + public void SayWithChatChecker(string text, bool interrupt) { if (screenReader == null) return; @@ -89,7 +107,14 @@ namespace stardew_access } } - public static void sayWithTileQuery(string text, int x, int y, bool interrupt) + /// Speaks the text via the loaded screen reader (if any). + ///
Skips the text narration if the previously narrated text was the same as the one provided. + ///

Use this when narrating texts based on tile position to avoid interference.
+ /// The text to be narrated. + /// The X location of tile. + /// The Y location of tile. + /// Whether to skip the currently speaking text or not. + public void SayWithTileQuery(string text, int x, int y, bool interrupt) { if (screenReader == null) return;