From a7fcd45dc8fdac8a3cf774c95efd7f298683f657 Mon Sep 17 00:00:00 2001 From: Mohammad Shoaib <shoaib.khan20@outlook.com> Date: Fri, 4 Feb 2022 14:54:12 +0530 Subject: [PATCH] Animal purchasing menu is now accessible --- stardew-access/ModEntry.cs | 3 -- .../Patches/BuildingNAnimalMenuPatches.cs | 54 +++++++++++++++---- stardew-access/Patches/MenuPatches.cs | 3 ++ ...eenReaderInterface.cs => IScreenReader.cs} | 3 +- stardew-access/manifest.json | 2 +- stardew-access/stardew-access.csproj | 1 - stardew-access/stardew-access.csproj.bak | 17 ------ 7 files changed, 50 insertions(+), 33 deletions(-) rename stardew-access/ScreenReader/{ScreenReaderInterface.cs => IScreenReader.cs} (95%) delete mode 100644 stardew-access/stardew-access.csproj.bak diff --git a/stardew-access/ModEntry.cs b/stardew-access/ModEntry.cs index 3be2ec3..7d09eb8 100644 --- a/stardew-access/ModEntry.cs +++ b/stardew-access/ModEntry.cs @@ -4,11 +4,8 @@ using StardewModdingAPI.Events; using StardewValley; using HarmonyLib; using stardew_access.Patches; -using AutoHotkey.Interop; -using System.Runtime.InteropServices; using stardew_access.ScreenReader; using Microsoft.Xna.Framework; -using StardewValley.Buildings; namespace stardew_access { diff --git a/stardew-access/Patches/BuildingNAnimalMenuPatches.cs b/stardew-access/Patches/BuildingNAnimalMenuPatches.cs index da8c0d5..0545344 100644 --- a/stardew-access/Patches/BuildingNAnimalMenuPatches.cs +++ b/stardew-access/Patches/BuildingNAnimalMenuPatches.cs @@ -17,27 +17,60 @@ namespace stardew_access.Patches internal static bool isSayingBlueprintInfo = false; internal static string prevBlueprintInfo = ""; internal static bool isOnFarm = false, isUpgrading = false, isDemolishing = false, isPainting = false, isConstructing = false, isMoving = false, isMagicalConstruction = false; + internal static bool firstTimeInNamingMenu = true; internal static PurchaseAnimalsMenu? purchaseAnimalsMenu; - internal static void PurchaseAnimalsMenuPatch(PurchaseAnimalsMenu __instance, - bool ___onFarm, - bool ___namingAnimal, - FarmAnimal ___animalBeingPurchased, - Building ___newAnimalHome, - TextBox ___textBox, - TextBoxEvent ___e, - int ___priceOfAnimal) + + internal static void PurchaseAnimalsMenuPatch(PurchaseAnimalsMenu __instance, bool ___onFarm, bool ___namingAnimal, TextBox ___textBox) { try { + int x = Game1.getMouseX(), y = Game1.getMouseY(); // Mouse x and y position purchaseAnimalsMenu = __instance; isOnFarm = ___onFarm; if (___onFarm && ___namingAnimal) { + string toSpeak = ""; + if (__instance.okButton != null && __instance.okButton.containsPoint(x, y)) + { + toSpeak = "Cancel Button"; + } + else if (__instance.doneNamingButton != null && __instance.doneNamingButton.containsPoint(x, y)) + { + toSpeak = "OK Button"; + } + else if (__instance.randomButton != null && __instance.randomButton.containsPoint(x, y)) + { + toSpeak = "Random Name Button"; + } + else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y)) + { + toSpeak = "Name Text Box"; + string? value = ___textBox.Text; + if (value != "" && value != null && value != "null") + toSpeak = $"{toSpeak}, Value: {value}"; + } + + if (purchaseAnimalMenuQuery != toSpeak) + { + purchaseAnimalMenuQuery = toSpeak; + + if (firstTimeInNamingMenu) + { + toSpeak = $"Enter the name of animal in the name text box. {toSpeak}"; + firstTimeInNamingMenu = false; + } + + MainClass.ScreenReader.Say(toSpeak, true); + } + } + else if (___onFarm && !___namingAnimal) + { + firstTimeInNamingMenu = true; } - else if (___onFarm && !___namingAnimal) { } else if (!___onFarm && !___namingAnimal) { + firstTimeInNamingMenu = true; if (__instance.hovered != null) { string toSpeak = ""; @@ -377,6 +410,7 @@ namespace stardew_access.Patches public static string? Contstruct(Vector2 position) { string? response = null; + // This code is taken from the game's code (CarpenterMenu.cs::874) Game1.player.team.buildLock.RequestLock(delegate { if (isOnFarm && Game1.locationRequest == null) @@ -427,6 +461,7 @@ namespace stardew_access.Patches public static string? Paint(Building? toPaint) { string? response = null; + // This code is taken from the game's code (CarpenterMenu.cs::793) Farm farm_location = Game1.getFarm(); if (toPaint != null) { @@ -465,6 +500,7 @@ namespace stardew_access.Patches public static string? Move(Building? buildingToMove, Vector2 position) { string? response = null; + // This code is taken from the game's code (CarpenterMenu.cs::829) if (buildingToMove != null) { string? name = buildingToMove.nameOfIndoorsWithoutUnique; diff --git a/stardew-access/Patches/MenuPatches.cs b/stardew-access/Patches/MenuPatches.cs index 7c2998c..f204cf3 100644 --- a/stardew-access/Patches/MenuPatches.cs +++ b/stardew-access/Patches/MenuPatches.cs @@ -360,11 +360,14 @@ namespace stardew_access.Patches BuildingNAnimalMenuPatches.isPainting = false; BuildingNAnimalMenuPatches.isMoving = false; BuildingNAnimalMenuPatches.isConstructing = false; + BuildingNAnimalMenuPatches.carpenterMenu = null; } if (__instance is PurchaseAnimalsMenu) { BuildingNAnimalMenuPatches.purchaseAnimalMenuQuery = ""; + BuildingNAnimalMenuPatches.firstTimeInNamingMenu = true; + BuildingNAnimalMenuPatches.purchaseAnimalsMenu = null; } GameMenuPatches.hoveredItemQueryKey = ""; diff --git a/stardew-access/ScreenReader/ScreenReaderInterface.cs b/stardew-access/ScreenReader/IScreenReader.cs similarity index 95% rename from stardew-access/ScreenReader/ScreenReaderInterface.cs rename to stardew-access/ScreenReader/IScreenReader.cs index 3b356cf..177a2ca 100644 --- a/stardew-access/ScreenReader/ScreenReaderInterface.cs +++ b/stardew-access/ScreenReader/IScreenReader.cs @@ -2,7 +2,6 @@ namespace stardew_access.ScreenReader { public interface IScreenReader { - public string PrevTextTile { get; @@ -12,7 +11,7 @@ namespace stardew_access.ScreenReader /// <summary>Initializes the screen reader.</summary> public void InitializeScreenReader(); - // <summary>Closes the screen reader, this is important, call this function when closing the game.</summary> + /// <summary>Closes the screen reader, this is important, call this function when closing the game.</summary> public void CloseScreenReader(); /// <summary>Speaks the text via the loaded screen reader (if any).</summary> diff --git a/stardew-access/manifest.json b/stardew-access/manifest.json index fb7e7be..8eada81 100644 --- a/stardew-access/manifest.json +++ b/stardew-access/manifest.json @@ -1,7 +1,7 @@ { "Name": "Stardew Access", "Author": "Mohammad Shoaib", - "Version": "1.0.21-beta", + "Version": "1.0.22-beta", "Description": "An accessibility mod with screen reader support!", "UniqueID": "shoaib.stardewaccess", "EntryDll": "stardew-access.dll", diff --git a/stardew-access/stardew-access.csproj b/stardew-access/stardew-access.csproj index 78532e0..b723494 100644 --- a/stardew-access/stardew-access.csproj +++ b/stardew-access/stardew-access.csproj @@ -12,7 +12,6 @@ <ItemGroup> <PackageReference Include="AccessibleOutput" Version="1.0.0" /> - <PackageReference Include="AutoHotkey.Interop" Version="1.0.0.1" /> <PackageReference Include="Lib.Harmony" Version="2.2.0" /> <PackageReference Include="Pathoschild.Stardew.ModBuildConfig" Version="4.0.0" /> </ItemGroup> diff --git a/stardew-access/stardew-access.csproj.bak b/stardew-access/stardew-access.csproj.bak deleted file mode 100644 index 08a75f1..0000000 --- a/stardew-access/stardew-access.csproj.bak +++ /dev/null @@ -1,17 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - - <PropertyGroup> - <TargetFramework>net452</TargetFramework> - <RootNamespace>stardew_access</RootNamespace> - <ImplicitUsings>enable</ImplicitUsings> - <Nullable>enable</Nullable> - <LangVersion>preview</LangVersion> - <summary>MainClass.ModEntry</summary> - </PropertyGroup> - - <ItemGroup> - <PackageReference Include="AccessibleOutput" Version="1.0.0" /> - <PackageReference Include="Pathoschild.Stardew.ModBuildConfig" Version="4.0.0" /> - </ItemGroup> - -</Project>