diff --git a/client/renderer/text.ts b/client/renderer/text.ts index a16255a..f902aa3 100644 --- a/client/renderer/text.ts +++ b/client/renderer/text.ts @@ -11,8 +11,12 @@ export function init_font() { font_fnt = parse_fnt(AssetManager.instance.get("bworld:m6x11_fnt")); } +// bmfont's text format. glyphs in the image have transparent padding around them, which their offsets don't count, so +// it's taken off here or text is drawn padding * scale pixels right of and below where it's measured function parse_fnt(text: string): FntFont { const lines = text.split(/\r?\n/); + // up, right, down, left + let padding = [0, 0, 0, 0]; const font: FntFont = { line_height: 0, @@ -34,6 +38,10 @@ function parse_fnt(text: string): FntFont { data[k] = v?.replace(/"/g, ""); } + if (type === "info" && data.padding) { + padding = data.padding.split(",").map(Number); + } + if (type === "common") { font.line_height = Number(data.lineHeight); } @@ -49,8 +57,8 @@ function parse_fnt(text: string): FntFont { y: Number(data.y), width: Number(data.width), height: Number(data.height), - xoffset: Number(data.xoffset), - yoffset: Number(data.yoffset), + xoffset: Number(data.xoffset) - padding[3], + yoffset: Number(data.yoffset) - padding[0], xadvance: Number(data.xadvance), page: Number(data.page), };