From 586607b2e38716de481b0adffd42e59286067529 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 14 Jan 2025 23:32:29 -0800 Subject: [PATCH] Add destroy function to ui handlers --- src/ui/settings/navigationMenu.ts | 7 +++++++ src/ui/ui-handler.ts | 5 +++++ src/ui/ui.ts | 11 +++++++++++ 3 files changed, 23 insertions(+) diff --git a/src/ui/settings/navigationMenu.ts b/src/ui/settings/navigationMenu.ts index eeb6da319ef..5fa53b7c270 100644 --- a/src/ui/settings/navigationMenu.ts +++ b/src/ui/settings/navigationMenu.ts @@ -89,6 +89,13 @@ export class NavigationManager { } } + /** + * Removes menus from the manager in preparation for reset + */ + public clearNavigationMenus() { + this.navigationMenus.length = 0; + } + } export default class NavigationMenu extends Phaser.GameObjects.Container { diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index 1f0155aef8b..89f8d9e65b6 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -62,4 +62,9 @@ export default abstract class UiHandler { clear() { this.active = false; } + /** + * To be implemented by individual handlers when necessary to free memory + * Called when {@linkcode BattleScene} is reset + */ + destroy(): void {} } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 6d44997f649..9e8c52b1d24 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -53,6 +53,7 @@ import TestDialogueUiHandler from "#app/ui/test-dialogue-ui-handler"; import AutoCompleteUiHandler from "./autocomplete-ui-handler"; import { Device } from "#enums/devices"; import MysteryEncounterUiHandler from "./mystery-encounter-ui-handler"; +import { NavigationManager } from "./settings/navigationMenu"; export enum Mode { MESSAGE, @@ -614,4 +615,14 @@ export default class UI extends Phaser.GameObjects.Container { return globalScene.inputMethod; } } + + /** + * Attempts to free memory held by UI handlers + * and clears menus from {@linkcode NavigationManager} to prepare for reset + */ + public freeUIData(): void { + this.handlers.forEach(h => h.destroy()); + this.handlers = []; + NavigationManager.getInstance().clearNavigationMenus(); + } }