mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-22 15:29:27 +02:00
Refactor and create adjustText function
This commit is contained in:
parent
f57245d26f
commit
2bb22e2272
@ -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());
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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<string>|"all";
|
||||
ignoreLanguages?: Array<string>;
|
||||
};
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user