@beetpx/beetpx
Version:
A TypeScript framework for pixel art browser games.
40 lines • 1.61 kB
JavaScript
import { BpxVector2d } from "../../misc/Vector2d";
import { $v_0_0 } from "../../shorthands";
import { assertUnreachable } from "../../utils/assertUnreachable";
import { DrawPixels } from "./DrawPixels";
import { DrawSprite } from "./DrawSprite";
export class DrawText {
#canvas;
#assets;
#sprite;
#pixels;
constructor(canvas, assets) {
this.#canvas = canvas;
this.#assets = assets;
this.#sprite = new DrawSprite(this.#canvas, {
disableRounding: true,
});
this.#pixels = new DrawPixels(this.#canvas, {
disableRounding: true,
});
}
draw(text, font, canvasXy, color, colorMarkers, scaleXy, pattern) {
canvasXy = canvasXy.round();
scaleXy = BpxVector2d.maxOf(scaleXy.floor(), $v_0_0);
for (const arrangedGlyph of font.arrangeGlyphsFor(text, color, colorMarkers)) {
if (arrangedGlyph.type === "line_break")
continue;
const xy = canvasXy.add(arrangedGlyph.leftTop.mul(scaleXy));
if (arrangedGlyph.type === "sprite") {
this.#sprite.draw(arrangedGlyph.sprite, this.#assets.getImageAsset(arrangedGlyph.sprite.imageUrl), xy, scaleXy, [false, false], arrangedGlyph.spriteColorMapping, pattern);
}
else if (arrangedGlyph.type === "pixels") {
this.#pixels.draw(arrangedGlyph.pixels, xy, arrangedGlyph.color, scaleXy, [false, false], pattern);
}
else {
assertUnreachable(arrangedGlyph);
}
}
}
}
//# sourceMappingURL=DrawText.js.map