From 3b290ee9a2b9afed8b01e6977d233c3c628879a0 Mon Sep 17 00:00:00 2001 From: Fabi <192151969+fabske0@users.noreply.github.com> Date: Sat, 23 Aug 2025 17:05:48 +0200 Subject: [PATCH] [UI/UX][Bug] Prevent switch to discard mode while transferring item (#6358) --- src/ui/party-ui-handler.ts | 3 +- test/ui/item-manage-button.test.ts | 47 +++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 9ad56476441..de10571f44c 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1021,7 +1021,8 @@ export class PartyUiHandler extends MessageUiHandler { } // Toggle item transfer mode to discard items or vice versa - if (this.cursor === 7) { + // Prevent changing mode, when currently transfering an item + if (this.cursor === 7 && !this.transferMode) { switch (this.partyUiMode) { case PartyUiMode.DISCARD: this.partyUiMode = PartyUiMode.MODIFIER_TRANSFER; diff --git a/test/ui/item-manage-button.test.ts b/test/ui/item-manage-button.test.ts index a7ea76918a5..f31c5e8e7e5 100644 --- a/test/ui/item-manage-button.test.ts +++ b/test/ui/item-manage-button.test.ts @@ -6,7 +6,7 @@ import { UiMode } from "#enums/ui-mode"; import type { Pokemon } from "#field/pokemon"; import { GameManager } from "#test/test-utils/game-manager"; import type { ModifierSelectUiHandler } from "#ui/modifier-select-ui-handler"; -import type { PartyUiHandler } from "#ui/party-ui-handler"; +import { type PartyUiHandler, PartyUiMode } from "#ui/party-ui-handler"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -169,4 +169,49 @@ describe("UI - Transfer Items", () => { expect(pokemon.getHeldItems().map(h => h.stackCount)).toEqual([2, 2]); } }); + + it("should not allow changing to discard mode when transfering items", async () => { + let handler: PartyUiHandler | undefined; + + await new Promise(resolve => { + game.onNextPrompt("SelectModifierPhase", UiMode.MODIFIER_SELECT, async () => { + await new Promise(r => setTimeout(r, 100)); + const modifierHandler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + + modifierHandler.processInput(Button.DOWN); + modifierHandler.setCursor(1); + modifierHandler.processInput(Button.ACTION); + }); + + game.onNextPrompt("SelectModifierPhase", UiMode.PARTY, async () => { + await new Promise(r => setTimeout(r, 100)); + handler = game.scene.ui.getHandler() as PartyUiHandler; + + handler.setCursor(0); + handler.processInput(Button.ACTION); + + await new Promise(r => setTimeout(r, 100)); + handler.processInput(Button.ACTION); + + resolve(); + }); + }); + + expect(handler).toBeDefined(); + if (handler) { + const partyMode = handler["partyUiMode"]; + expect(partyMode).toBe(PartyUiMode.MODIFIER_TRANSFER); + + handler.setCursor(7); + handler.processInput(Button.ACTION); + // Should not change mode to discard + expect(handler["partyUiMode"]).toBe(PartyUiMode.MODIFIER_TRANSFER); + + handler.processInput(Button.CANCEL); + handler.setCursor(7); + handler.processInput(Button.ACTION); + // Should change mode to discard + expect(handler["partyUiMode"]).toBe(PartyUiMode.DISCARD); + } + }); });