Adding custom hovered item narration instead of hovered item
parent
b3657c080f
commit
eabb8ae499
|
@ -114,8 +114,8 @@ namespace stardew_access
|
||||||
);
|
);
|
||||||
|
|
||||||
harmony.Patch(
|
harmony.Patch(
|
||||||
original: AccessTools.Method(typeof(InventoryMenu), nameof(InventoryMenu.draw), new Type[] { typeof(SpriteBatch) }),
|
original: AccessTools.Method(typeof(InventoryPage), nameof(InventoryPage.draw), new Type[] { typeof(SpriteBatch) }),
|
||||||
postfix: new HarmonyMethod(typeof(GameMenuPatches), nameof(GameMenuPatches.InventoryMenuPatch))
|
postfix: new HarmonyMethod(typeof(GameMenuPatches), nameof(GameMenuPatches.InventoryPagePatch))
|
||||||
);
|
);
|
||||||
|
|
||||||
harmony.Patch(
|
harmony.Patch(
|
||||||
|
|
|
@ -112,7 +112,7 @@ namespace stardew_access.Patches
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Fix for delete button hover text not narrating
|
#region Skip narrating hover text for certain menus
|
||||||
if (Game1.activeClickableMenu is TitleMenuPatches && !((Game1.activeClickableMenu as TitleMenu).GetChildMenu() is CharacterCustomization))
|
if (Game1.activeClickableMenu is TitleMenuPatches && !((Game1.activeClickableMenu as TitleMenu).GetChildMenu() is CharacterCustomization))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -125,6 +125,16 @@ namespace stardew_access.Patches
|
||||||
if (Game1.activeClickableMenu is GeodeMenu)
|
if (Game1.activeClickableMenu is GeodeMenu)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (Game1.activeClickableMenu is GameMenu && (Game1.activeClickableMenu as GameMenu).GetCurrentPage() is InventoryPage)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Game1.activeClickableMenu is GameMenu && (Game1.activeClickableMenu as GameMenu).GetCurrentPage() is CraftingPage)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (Game1.activeClickableMenu is ItemGrabMenu)
|
||||||
|
return;
|
||||||
|
#endregion
|
||||||
|
|
||||||
StringBuilder toSpeak = new StringBuilder(" ");
|
StringBuilder toSpeak = new StringBuilder(" ");
|
||||||
|
|
||||||
#region Add item count before title
|
#region Add item count before title
|
||||||
|
|
|
@ -78,48 +78,11 @@ namespace stardew_access.Patches
|
||||||
ScreenReader.say(toSpeak, true);
|
ScreenReader.say(toSpeak, true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Narrate hovered item
|
#region Narrate hovered item
|
||||||
for (int i = 0; i < __instance.inventory.inventory.Count; i++)
|
narrateHoveredItemInInventory(__instance.inventory.inventory, __instance.inventory.actualInventory, x, y);
|
||||||
{
|
|
||||||
if (__instance.inventory.inventory[i].containsPoint(x, y))
|
|
||||||
{
|
|
||||||
string toSpeak = "";
|
|
||||||
if ((i + 1) <= __instance.inventory.actualInventory.Count)
|
|
||||||
{
|
|
||||||
if (__instance.inventory.actualInventory[i] != null)
|
|
||||||
{
|
|
||||||
string name = __instance.inventory.actualInventory[i].DisplayName;
|
|
||||||
int stack = __instance.inventory.actualInventory[i].Stack;
|
|
||||||
|
|
||||||
if (stack > 1)
|
|
||||||
toSpeak = $"{stack} {name}";
|
|
||||||
else
|
|
||||||
toSpeak = $"{name}";
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// For empty slot
|
|
||||||
toSpeak = "Empty Slot";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// For empty slot
|
|
||||||
toSpeak = "Empty Slot";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (geodeMenuQueryKey != $"{toSpeak}:{i}")
|
|
||||||
{
|
|
||||||
geodeMenuQueryKey = $"{toSpeak}:{i}";
|
|
||||||
ScreenReader.say(toSpeak, true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -133,7 +96,18 @@ namespace stardew_access.Patches
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int x = Game1.getMousePosition(true).X, y = Game1.getMousePosition(true).Y; // Mouse x and y position
|
int x = Game1.getMousePosition(true).X, y = Game1.getMousePosition(true).Y; // Mouse x and y position
|
||||||
|
bool isIPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.I);
|
||||||
|
bool isLeftShiftPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.LeftShift);
|
||||||
|
|
||||||
|
if(isLeftShiftPressed && isIPressed && __instance.inventory != null)
|
||||||
|
{
|
||||||
|
__instance.inventory.inventory[0].snapMouseCursorToCenter();
|
||||||
|
}else if(!isLeftShiftPressed && isIPressed && __instance.ItemsToGrabMenu != null)
|
||||||
|
{
|
||||||
|
__instance.ItemsToGrabMenu.inventory[0].snapMouseCursorToCenter();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Narrate buttons in the menu
|
||||||
if (__instance.okButton != null && __instance.okButton.containsPoint(x, y))
|
if (__instance.okButton != null && __instance.okButton.containsPoint(x, y))
|
||||||
{
|
{
|
||||||
ScreenReader.sayWithMenuChecker("Ok Button", true);
|
ScreenReader.sayWithMenuChecker("Ok Button", true);
|
||||||
|
@ -150,7 +124,9 @@ namespace stardew_access.Patches
|
||||||
ScreenReader.sayWithMenuChecker("Drop Item", true);
|
ScreenReader.sayWithMenuChecker("Drop Item", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Narrate the last shipped item if in the shipping bin
|
||||||
if (__instance.shippingBin && Game1.getFarm().lastItemShipped != null && __instance.lastShippedHolder.containsPoint(x, y))
|
if (__instance.shippingBin && Game1.getFarm().lastItemShipped != null && __instance.lastShippedHolder.containsPoint(x, y))
|
||||||
{
|
{
|
||||||
Item lastShippedItem = Game1.getFarm().lastItemShipped;
|
Item lastShippedItem = Game1.getFarm().lastItemShipped;
|
||||||
|
@ -161,7 +137,17 @@ namespace stardew_access.Patches
|
||||||
|
|
||||||
ScreenReader.sayWithMenuChecker(toSpeak, true);
|
ScreenReader.sayWithMenuChecker(toSpeak, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Narrate hovered item
|
||||||
|
if(narrateHoveredItemInInventory(__instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(narrateHoveredItemInInventory(__instance.ItemsToGrabMenu.inventory, __instance.ItemsToGrabMenu.actualInventory, x, y, true))
|
||||||
|
return;
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -205,17 +191,21 @@ namespace stardew_access.Patches
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void InventoryMenuPatch(InventoryMenu __instance)
|
internal static void InventoryPagePatch(InventoryPage __instance)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int x = Game1.getMousePosition(true).X, y = Game1.getMousePosition(true).Y; // Mouse x and y position
|
int x = Game1.getMousePosition(true).X, y = Game1.getMousePosition(true).Y; // Mouse x and y position
|
||||||
|
|
||||||
if (__instance.dropItemInvisibleButton != null && __instance.dropItemInvisibleButton.containsPoint(x, y))
|
if (__instance.inventory.dropItemInvisibleButton != null && __instance.inventory.dropItemInvisibleButton.containsPoint(x, y))
|
||||||
{
|
{
|
||||||
ScreenReader.sayWithMenuChecker("Drop Item", true);
|
ScreenReader.sayWithMenuChecker("Drop Item", true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Narrate hovered item
|
||||||
|
narrateHoveredItemInInventory(__instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true);
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -292,5 +282,71 @@ namespace stardew_access.Patches
|
||||||
MainClass.monitor.Log($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}", LogLevel.Error);
|
MainClass.monitor.Log($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}", LogLevel.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static bool narrateHoveredItemInInventory(List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y, bool isInInventoryPage = false)
|
||||||
|
{
|
||||||
|
#region Narrate hovered item
|
||||||
|
for (int i = 0; i < inventory.Count; i++)
|
||||||
|
{
|
||||||
|
if (inventory[i].containsPoint(x, y))
|
||||||
|
{
|
||||||
|
string toSpeak = "";
|
||||||
|
if ((i + 1) <= actualInventory.Count)
|
||||||
|
{
|
||||||
|
if (actualInventory[i] != null)
|
||||||
|
{
|
||||||
|
string name = actualInventory[i].DisplayName;
|
||||||
|
int stack = actualInventory[i].Stack;
|
||||||
|
string quality = "";
|
||||||
|
|
||||||
|
#region Add quality of item
|
||||||
|
if (actualInventory[i] is StardewValley.Object && (actualInventory[i] as StardewValley.Object).quality > 0)
|
||||||
|
{
|
||||||
|
int qualityIndex = (actualInventory[i] as StardewValley.Object).quality;
|
||||||
|
if (qualityIndex == 1)
|
||||||
|
{
|
||||||
|
quality = "Silver quality";
|
||||||
|
}
|
||||||
|
else if (qualityIndex == 2 || qualityIndex == 3)
|
||||||
|
{
|
||||||
|
quality = "Gold quality";
|
||||||
|
}
|
||||||
|
else if (qualityIndex >= 4)
|
||||||
|
{
|
||||||
|
quality = "Iridium quality";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
if (stack > 1)
|
||||||
|
toSpeak = $"{stack} {name} {quality}";
|
||||||
|
else
|
||||||
|
toSpeak = $"{name} {quality}";
|
||||||
|
|
||||||
|
MainClass.monitor.Log(actualInventory[i].getHoverBoxText(actualInventory[i]), LogLevel.Debug);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// For empty slot
|
||||||
|
toSpeak = "Empty Slot";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// For empty slot
|
||||||
|
toSpeak = "Empty Slot";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (geodeMenuQueryKey != $"{toSpeak}:{i}")
|
||||||
|
{
|
||||||
|
geodeMenuQueryKey = $"{toSpeak}:{i}";
|
||||||
|
ScreenReader.say(toSpeak, true);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue