Refactor and create adjustText function

This commit is contained in:
Adrian 2024-08-17 11:31:24 -04:00
parent f57245d26f
commit 2bb22e2272
3 changed files with 64 additions and 37 deletions

View File

@ -66,30 +66,11 @@ export default class CommandUiHandler extends UiHandler {
messageHandler.bg.setVisible(true); messageHandler.bg.setVisible(true);
messageHandler.commandWindow.setVisible(true); messageHandler.commandWindow.setVisible(true);
messageHandler.movesWindowContainer.setVisible(false); 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; const messageMaxWidth = this.scene.game.canvas.width - messageHandler.commandWindow.getBounds().width - messageHandler.message.getBounds().x;
messageHandler.message.setWordWrapWidth(messageMaxWidth); messageHandler.message.setWordWrapWidth(messageMaxWidth);
const commandMessage = i18next.t("commandUiHandler:actionMessage", {pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon())}); const commandMessage = i18next.t("commandUiHandler:actionMessage", {pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon())});
const textWrapped = messageHandler.message.getWrappedText(commandMessage); messageHandler.adjustText(commandMessage,messageHandler.message,messageMaxWidth);
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.showText(commandMessage, 0); messageHandler.showText(commandMessage, 0);
this.setCursor(this.getCursor()); this.setCursor(this.getCursor());

View File

@ -143,7 +143,10 @@ export default class MenuUiHandler extends MessageUiHandler {
menuMessageText.setName("menu-message"); menuMessageText.setName("menu-message");
menuMessageText.setOrigin(0, 0); menuMessageText.setOrigin(0, 0);
menuMessageText.setWordWrapWidth(menuMessageBox.getBounds().width - this.menuBg.width * 0.04); menuMessageText.setWordWrapWidth(menuMessageBox.getBounds().width - this.menuBg.width * 0.04);
<<<<<<< HEAD
menuMessageText.setData("originalFont", menuMessageText.style.fontSize); menuMessageText.setData("originalFont", menuMessageText.style.fontSize);
=======
>>>>>>> 84bb19a8de2 (Refactor and create adjustText function)
this.menuMessageBoxContainer.add(menuMessageText); this.menuMessageBoxContainer.add(menuMessageText);
this.message = menuMessageText; this.message = menuMessageText;
@ -519,22 +522,10 @@ export default class MenuUiHandler extends MessageUiHandler {
this.menuMessageBoxContainer.setVisible(!!text); this.menuMessageBoxContainer.setVisible(!!text);
const messageText = this.message; const messageText = this.message;
const messageBox = this.messageBoxBg; const messageBox = this.messageBoxBg;
if (messageBox && messageText) { this.adjustText(text,messageText,messageBox.getBounds().width,{
const fontSizeToNumber = (fs:number|string):number=>(parseInt(fs.toString().replace("px",""))); padding: messageText.x / 2,
const fontSize = fontSizeToNumber(messageText.getData("originalFont")); ignoreTextBalance: "all"
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);
}
}
super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); super.showText(text, delay, callback, callbackDelay, prompt, promptDelay);
} }

View File

@ -2,6 +2,13 @@ import BattleScene from "../battle-scene";
import AwaitableUiHandler from "./awaitable-ui-handler"; import AwaitableUiHandler from "./awaitable-ui-handler";
import { Mode } from "./ui"; import { Mode } from "./ui";
import * as Utils from "../utils"; import * as Utils from "../utils";
import i18next from "i18next";
type argsAjustText = {
padding?:number;
ignoreTextBalance?:Array<string>|"all";
ignoreLanguages?: Array<string>;
};
export default abstract class MessageUiHandler extends AwaitableUiHandler { export default abstract class MessageUiHandler extends AwaitableUiHandler {
protected textTimer: Phaser.Time.TimerEvent | null; protected textTimer: Phaser.Time.TimerEvent | null;
@ -194,4 +201,52 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler {
clear() { clear() {
super.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);
}
}
} }