diff --git a/AGENTS.md b/AGENTS.md index 557b756..548ae9b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,7 @@ ## Input Requirements - Every game screen, menu, dialog, overlay, and gameplay interaction must be fully navigable by controller at all times. +- Any time a screen, menu, dialog, overlay, or gameplay interaction is added or changed, verify controller navigation still works for that surface before considering the work complete. - Controller navigation must not depend on touch, mouse, keyboard, or hidden developer-only shortcuts. - Focus state must always be visible and predictable when controller navigation is active. - Avoid interaction patterns that trap focus, lose focus, or require precise pointer input. diff --git a/IWantToHeal-Thor-v1.1.13.apk b/IWantToHeal-Thor-v1.1.13.apk new file mode 100644 index 0000000..5c5b5a1 Binary files /dev/null and b/IWantToHeal-Thor-v1.1.13.apk differ diff --git a/android/app/build.gradle b/android/app/build.gradle index 0c5d571..fb23655 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.warren.iwanttoheal" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 91 - versionName "1.1.12" + versionCode 92 + versionName "1.1.13" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { // Files and dirs to omit from the packaged assets dir, modified to accommodate modern web apps. diff --git a/src/components/PvpStadiumScreen.tsx b/src/components/PvpStadiumScreen.tsx index 80dd309..2dce8c5 100644 --- a/src/components/PvpStadiumScreen.tsx +++ b/src/components/PvpStadiumScreen.tsx @@ -944,24 +944,23 @@ export function PvpStadiumScreen({ const finishShop = useCallback(() => { if (shopReady || status !== 'shop') return - setShopReady(true) - submittedShopRef.current = true - setPlayerSide((current) => { - const next = { ...current, shopReady: true } - playerRef.current = next - return next - }) - if (liveMatchRef.current) { - submitPvpUpgradeChoice(liveMatchRef.current.id, { - encounterIndex: roundIndex, - buffId: 'stadium-shop', - debuffId: '', - purchases: playerRef.current.buffs, - shopReady: true, - }).catch(() => undefined) + const liveMatch = liveMatchRef.current + if (!liveMatch) { + startNextRound() return } - startNextRound() + setShopReady(true) + submittedShopRef.current = true + const readyPlayer = { ...playerRef.current, shopReady: true } + playerRef.current = readyPlayer + setPlayerSide(readyPlayer) + submitPvpUpgradeChoice(liveMatch.id, { + encounterIndex: roundIndex, + buffId: 'stadium-shop', + debuffId: '', + purchases: playerRef.current.buffs, + shopReady: true, + }).catch(() => undefined) }, [roundIndex, shopReady, startNextRound, status]) const { rematchRequested, rematchMessage, handleRematch } = usePvpLiveMatchSync({