From e951317ddd8d5a0c93f1ff2e7e876b976f3f4a92 Mon Sep 17 00:00:00 2001 From: Pabloader Date: Sun, 3 May 2026 15:39:12 +0000 Subject: [PATCH] Improve text rendering system --- src/common/rpg/components/sprite.ts | 4 ++++ src/common/rpg/systems/render/text.ts | 11 ++++++++--- src/common/rpg/utils/resources.ts | 3 +++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/common/rpg/components/sprite.ts b/src/common/rpg/components/sprite.ts index 1fa1ad5..4434d5c 100644 --- a/src/common/rpg/components/sprite.ts +++ b/src/common/rpg/components/sprite.ts @@ -27,6 +27,10 @@ export class Sprite extends Component<{ } } } + + get image(): string { + return this.state.frames[this.state.currentFrame]; + } } @component export class Hidden extends Component<{}> { diff --git a/src/common/rpg/systems/render/text.ts b/src/common/rpg/systems/render/text.ts index b6c9efa..3f8911f 100644 --- a/src/common/rpg/systems/render/text.ts +++ b/src/common/rpg/systems/render/text.ts @@ -16,11 +16,16 @@ export class TextDisplaySystem extends System { const sprites = Array.from(world.query(Sprite, Position)).sort((a, b) => a[2].state.z - b[2].state.z); for (const [e, sprite, pos] of sprites) { if (e.has(Hidden)) continue; - const { frames, currentFrame } = sprite.state; + const image = sprite.image; const { x, y } = pos.state; - const data = Resources.get(TextRegion, frames[currentFrame]) ?? new TextRegion(frames[currentFrame]); - this.display.setRegion(x, y, data); + const data = + Resources.get(TextRegion, image) + ?? Resources.get(String, image) + ?? image; + + const region = data instanceof TextRegion ? data : new TextRegion(data); + this.display.setRegion(x, y, region); } } } \ No newline at end of file diff --git a/src/common/rpg/utils/resources.ts b/src/common/rpg/utils/resources.ts index 7017d9b..c5d3de8 100644 --- a/src/common/rpg/utils/resources.ts +++ b/src/common/rpg/utils/resources.ts @@ -4,6 +4,9 @@ export namespace Resources { const resources = new Map>(); export function get(id: string): T | undefined; + export function get(ctor: StringConstructor, id: string): string | undefined; + export function get(ctor: NumberConstructor, id: string): number | undefined; + export function get(ctor: BooleanConstructor, id: string): boolean | undefined; export function get(ctor: Class, id: string): T | undefined; export function get(ctorOrId: Class | string, id?: string): T | undefined { const ctor = typeof ctorOrId === 'string' ? undefined : ctorOrId;