From 2bb22e2272b3c32f36a95086560fbebf5bcbb48d Mon Sep 17 00:00:00 2001 From: Adrian Date: Sat, 17 Aug 2024 11:31:24 -0400 Subject: [PATCH] Refactor and create adjustText function --- src/ui/command-ui-handler.ts | 23 ++------------- src/ui/menu-ui-handler.ts | 23 +++++---------- src/ui/message-ui-handler.ts | 55 ++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 37 deletions(-) diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 920ec791429..3378be5d024 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -66,30 +66,11 @@ export default class CommandUiHandler extends UiHandler { messageHandler.bg.setVisible(true); messageHandler.commandWindow.setVisible(true); messageHandler.movesWindowContainer.setVisible(false); - const currentLanguage = i18next.resolvedLanguage!; - const ignoreBalanceText = []; + const messageMaxWidth = this.scene.game.canvas.width - messageHandler.commandWindow.getBounds().width - messageHandler.message.getBounds().x; messageHandler.message.setWordWrapWidth(messageMaxWidth); const commandMessage = i18next.t("commandUiHandler:actionMessage", {pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon())}); - const textWrapped = messageHandler.message.getWrappedText(commandMessage); - const fontSizeToNumber = (fs:number|string):number=>(parseInt(fs.toString().replace("px",""))); - const fontSize = fontSizeToNumber(messageHandler.message.getData("originalFontSize") ?? messageHandler.message.style.fontSize); - messageHandler.message.setFontSize(fontSize); - messageHandler.message.setData("originalFontSize",messageHandler.message.getData("originalFontSize") ?? fontSize); - - // Text Balance - if (!ignoreBalanceText.some(localKey=>localKey===currentLanguage) && textWrapped[1] && textWrapped.length <= messageHandler.message.style.maxLines && textWrapped[0].replace(" ","").length * 0.25 > textWrapped[1].replace(" ","").length) { - messageHandler.message.setWordWrapWidth((this.scene.game.canvas.width - messageHandler.commandWindow.getBounds().width - messageHandler.message.parentContainer.getBounds().x) * 0.65); - } - - // Ajust Text - if (messageHandler.message.getWrappedText(commandMessage).length > messageHandler.message.style.maxLines) { - let fontDecrement = fontSize; - while (messageHandler.message.getWrappedText(commandMessage).length > messageHandler.message.style.maxLines) { - fontDecrement -= 1; - messageHandler.message.setFontSize(fontDecrement); - } - } + messageHandler.adjustText(commandMessage,messageHandler.message,messageMaxWidth); messageHandler.showText(commandMessage, 0); this.setCursor(this.getCursor()); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 155b3cbef74..134eee59c4b 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -143,7 +143,10 @@ export default class MenuUiHandler extends MessageUiHandler { menuMessageText.setName("menu-message"); menuMessageText.setOrigin(0, 0); menuMessageText.setWordWrapWidth(menuMessageBox.getBounds().width - this.menuBg.width * 0.04); +<<<<<<< HEAD menuMessageText.setData("originalFont", menuMessageText.style.fontSize); +======= +>>>>>>> 84bb19a8de2 (Refactor and create adjustText function) this.menuMessageBoxContainer.add(menuMessageText); this.message = menuMessageText; @@ -519,22 +522,10 @@ export default class MenuUiHandler extends MessageUiHandler { this.menuMessageBoxContainer.setVisible(!!text); const messageText = this.message; const messageBox = this.messageBoxBg; - if (messageBox && messageText) { - const fontSizeToNumber = (fs:number|string):number=>(parseInt(fs.toString().replace("px",""))); - const fontSize = fontSizeToNumber(messageText.getData("originalFont")); - const textSize = Phaser.GameObjects.GetTextSize(messageText,messageText.style.getTextMetrics(),messageText.getWrappedText(text)); - messageText.setFontSize(fontSize); - const padding = messageText.x / 2; - - if (messageText.getWrappedText(text).length > messageText.style.maxLines || (textSize.width + padding * 17) > messageBox.getBounds().width) { - let fontDecrement = fontSize; - while (messageText.getWrappedText(text).length > messageText.style.maxLines || (Phaser.GameObjects.GetTextSize(messageText,messageText.style.getTextMetrics(),messageText.getWrappedText(text)).width + padding * 17) > messageBox.getBounds().width) { - fontDecrement -= 1; - messageText.setFontSize(fontDecrement); - } - messageText.setFontSize(fontDecrement - padding); - } - } + this.adjustText(text,messageText,messageBox.getBounds().width,{ + padding: messageText.x / 2, + ignoreTextBalance: "all" + }); super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); } diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index a78887e1581..5c43b328756 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -2,6 +2,13 @@ import BattleScene from "../battle-scene"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; +import i18next from "i18next"; + +type argsAjustText = { + padding?:number; + ignoreTextBalance?:Array|"all"; + ignoreLanguages?: Array; +}; export default abstract class MessageUiHandler extends AwaitableUiHandler { protected textTimer: Phaser.Time.TimerEvent | null; @@ -194,4 +201,52 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { clear() { super.clear(); } + + /** + * @param text + * @param textObject + * @param maxWidth + * @param opts options additional + @argument ignoreLanguages ignore adjust for some language. + @argument ignoreBalanceText ignore Text Balance for some languages or for all. + @argument padding default 0. + */ + adjustText(text:string,textObject:Phaser.GameObjects.Text,maxWidth:number,opts:argsAjustText={}): void { + const currentLanguage = i18next.resolvedLanguage!; + if (opts.ignoreLanguages && opts.ignoreLanguages[0] && !opts.ignoreLanguages.some(localKey=>localKey === currentLanguage)) { + return; + } + + const fontSizeToNumber = (FS:number|string):number=>{ + return parseInt(FS.toString().replace("px","")); + }; + const fontSize = fontSizeToNumber(textObject.getData("originalFontSize") ?? fontSizeToNumber(textObject.style.fontSize)); + textObject.setData("originalFontSize", textObject.getData("originalFontSize") ?? fontSize); + textObject.setFontSize(fontSize); + const textWrapped = textObject.getWrappedText(text); + const balanceText = typeof opts.ignoreTextBalance === "string" ? opts.ignoreTextBalance === "all" : (opts.ignoreTextBalance && opts.ignoreTextBalance[0] && opts.ignoreTextBalance.some(localKey=> localKey === currentLanguage)); + + // Text Balance + if (!balanceText && textWrapped[1] && textWrapped.length <= textObject.style.maxLines && textWrapped[0].replace(" ","").length * 0.25 > textWrapped[1].replace(" ","").length) { + textObject.setWordWrapWidth(maxWidth * 0.65); + } + + const padding = opts.padding ?? 0; + const textSize = Phaser.GameObjects.GetTextSize(textObject,textObject.style.getTextMetrics(),textObject.getWrappedText(text)); + + // If is very near to border add "padding", not need if border container appareance is nice + const textWidth = (textSize.width + padding * 17); + + // Text ajust + if (textWrapped.length > textObject.style.maxLines || textWidth > maxWidth) { + let fontDecrement = fontSizeToNumber(textObject.style.fontSize); + while (textObject.getWrappedText(text).length > textObject.style.maxLines || (Phaser.GameObjects.GetTextSize(textObject,textObject.style.getTextMetrics(),textObject.getWrappedText(text)).width + padding * 17) > maxWidth) { + fontDecrement -= 1; + textObject.setFontSize(fontDecrement); + } + textObject.setFontSize(fontDecrement - padding); + } else { + textObject.setFontSize(fontSize); + } + } }