diff --git a/stardew-access/Patches/CarpenterMenuPach.cs b/stardew-access/Patches/CarpenterMenuPach.cs index 3745452..856d817 100644 --- a/stardew-access/Patches/CarpenterMenuPach.cs +++ b/stardew-access/Patches/CarpenterMenuPach.cs @@ -29,138 +29,27 @@ namespace stardew_access.Patches isMoving = false; isConstructing = false; - #region The blueprint menu - BluePrint currentBluprint = __instance.CurrentBlueprint; - if (currentBluprint == null) + BluePrint currentBlueprint = __instance.CurrentBlueprint; + if (currentBlueprint == null) return; int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); - string ingredients = ""; - string name = currentBluprint.displayName; - string upgradeName = currentBluprint.nameOfBuildingToUpgrade; - string description = currentBluprint.description; - string price = $"{___price}g"; - string blueprintInfo; - int width = currentBluprint.tilesWidth; - int height = currentBluprint.tilesHeight; - - #region Get ingredients - for (int i = 0; i < ___ingredients.Count; i++) - { - string itemName = ___ingredients[i].DisplayName; - int itemStack = ___ingredients[i].Stack; - string itemQuality = ""; - - int qualityValue = ((StardewValley.Object)___ingredients[i]).Quality; - if (qualityValue == 1) - { - itemQuality = "Silver quality"; - } - else if (qualityValue == 2 || qualityValue == 3) - { - itemQuality = "Gold quality"; - } - else if (qualityValue >= 4) - { - itemQuality = "Iridium quality"; - } - - ingredients = $"{ingredients}, {itemStack} {itemName} {itemQuality}"; - } - #endregion - - blueprintInfo = $"{name}, Price: {price}, Ingredients: {ingredients}, Dimensions: {width} width and {height} height, Description: {description}"; + string blueprintInfo = getCurrentBlueprintInfo(currentBlueprint, ___price, ___ingredients); if (isPrimaryInfoKeyPressed && !isSayingBlueprintInfo) { - SayBlueprintInfo(blueprintInfo); + SpeakAndWait(blueprintInfo); } else if (prevBlueprintInfo != blueprintInfo) { prevBlueprintInfo = blueprintInfo; - SayBlueprintInfo(blueprintInfo); + SpeakAndWait(blueprintInfo); } else { - if (__instance.backButton != null && __instance.backButton.containsPoint(x, y)) - { - string toSpeak = "Previous Blueprint"; - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.forwardButton != null && __instance.forwardButton.containsPoint(x, y)) - { - string toSpeak = "Next Blueprint"; - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.demolishButton != null && __instance.demolishButton.containsPoint(x, y)) - { - string toSpeak = $"Demolish Building" + (__instance.CanDemolishThis(___blueprints[___currentBlueprintIndex]) ? "" : ", cannot demolish building"); - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.okButton != null && __instance.okButton.containsPoint(x, y)) - { - string toSpeak = "Construct Building" + (___blueprints[___currentBlueprintIndex].doesFarmerHaveEnoughResourcesToBuild() ? "" : ", cannot cunstrut building, not enough resources to build."); - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.moveButton != null && __instance.moveButton.containsPoint(x, y)) - { - string toSpeak = "Move Building"; - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.paintButton != null && __instance.paintButton.containsPoint(x, y)) - { - string toSpeak = "Paint Building"; - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } - - if (__instance.cancelButton != null && __instance.cancelButton.containsPoint(x, y)) - { - string toSpeak = "Cancel Button"; - if (carpenterMenuQuery != toSpeak) - { - carpenterMenuQuery = toSpeak; - MainClass.ScreenReader.Say(toSpeak, true); - } - return; - } + narrateHoveredButton(__instance, ___blueprints, ___currentBlueprintIndex, x, y); } - #endregion } else { @@ -182,14 +71,93 @@ namespace stardew_access.Patches } } - private static async void SayBlueprintInfo(string info) + private static string getCurrentBlueprintInfo(BluePrint currentBlueprint, int ___price, List ___ingredients) + { + string ingredients = ""; + string name = currentBlueprint.displayName; + string upgradeName = currentBlueprint.nameOfBuildingToUpgrade; + string description = currentBlueprint.description; + string price = $"{___price}g"; + int width = currentBlueprint.tilesWidth; + int height = currentBlueprint.tilesHeight; + + #region Get ingredients + for (int i = 0; i < ___ingredients.Count; i++) + { + string itemName = ___ingredients[i].DisplayName; + int itemStack = ___ingredients[i].Stack; + string itemQuality = ""; + + int qualityValue = ((StardewValley.Object)___ingredients[i]).Quality; + if (qualityValue == 1) + { + itemQuality = "Silver quality"; + } + else if (qualityValue == 2 || qualityValue == 3) + { + itemQuality = "Gold quality"; + } + else if (qualityValue >= 4) + { + itemQuality = "Iridium quality"; + } + + ingredients = $"{ingredients}, {itemStack} {itemName} {itemQuality}"; + } + #endregion + + return $"{name}, Price: {price}, Ingredients: {ingredients}, Dimensions: {width} width and {height} height, Description: {description}"; + } + + private static async void SpeakAndWait(string toSpeak) { isSayingBlueprintInfo = true; - MainClass.ScreenReader.Say(info, true); + MainClass.ScreenReader.Say(toSpeak, true); await Task.Delay(300); isSayingBlueprintInfo = false; } + private static void narrateHoveredButton(CarpenterMenu __instance, List ___blueprints, int ___currentBlueprintIndex, int x, int y) + { + string toSpeak = ""; + if (__instance.backButton != null && __instance.backButton.containsPoint(x, y)) + { + toSpeak = "Previous Blueprint"; + } + else if (__instance.forwardButton != null && __instance.forwardButton.containsPoint(x, y)) + { + toSpeak = "Next Blueprint"; + } + else if (__instance.demolishButton != null && __instance.demolishButton.containsPoint(x, y)) + { + toSpeak = $"Demolish Building" + (__instance.CanDemolishThis(___blueprints[___currentBlueprintIndex]) ? "" : ", cannot demolish building"); + } + else if (__instance.okButton != null && __instance.okButton.containsPoint(x, y)) + { + toSpeak = "Construct Building" + (___blueprints[___currentBlueprintIndex].doesFarmerHaveEnoughResourcesToBuild() ? "" : ", cannot cunstrut building, not enough resources to build."); + } + else if (__instance.moveButton != null && __instance.moveButton.containsPoint(x, y)) + { + toSpeak = "Move Building"; + } + else if (__instance.paintButton != null && __instance.paintButton.containsPoint(x, y)) + { + toSpeak = "Paint Building"; + } + else if (__instance.cancelButton != null && __instance.cancelButton.containsPoint(x, y)) + { + toSpeak = "Cancel Button"; + } + else + { + return; + } + if (carpenterMenuQuery != toSpeak) + { + carpenterMenuQuery = toSpeak; + MainClass.ScreenReader.Say(toSpeak, true); + } + } } }