@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
142 lines • 10.7 kB
JavaScript
import { TgdEvent } from "./../../event/index.js";
import { ensureTgdVec4, tgdCanvasCreate, TgdPainterClear, TgdPainterFramebuffer, TgdPainterState, TgdVec4, } from "./../../index.js";
import { TgdTexture2D } from "./../../texture/index.js";
import { TgdPainterOverlay } from "../overlay/index.js";
import { TgdPainter } from "../painter.js";
import { PainterSprite } from "./sprite.js";
export class TgdPainterIcon extends TgdPainter {
constructor(context, options) {
super();
this.context = context;
this.eventPointerTap = new TgdEvent();
this.dirty = true;
this.overlayWidth = 16;
this.overlayheight = 16;
this.refresh = () => {
this.dirty = true;
this.context.paint();
};
this.handleOverlayResize = ({ width, height }) => {
this.overlayWidth = width;
this.overlayheight = height;
this.refresh();
};
this.name = options.name ?? "TgdPainterIcon";
const sprite = (this.sprite = new PainterSprite(context, options));
const texture = (this.texture = new TgdTexture2D(context).loadBitmap(tgdCanvasCreate(options.width ?? 1, options.height ?? 1)));
const clear = new TgdPainterClear(context, {
color: [0, 0, 0, 0],
depth: 1,
});
const framebuffer = (this.framebuffer = new TgdPainterFramebuffer(context, {
textureColor0: texture,
fixedSize: true,
children: [clear, sprite],
}));
const overlay = (this.overlay = new TgdPainterOverlay(context, {
...options,
texture: framebuffer.textureColor0,
}));
overlay.eventTap.addListener((evt) => this.eventPointerTap.dispatch(evt));
overlay.eventResize.addListener(this.handleOverlayResize);
this.state = new TgdPainterState(context, {
cull: "off",
blend: options.blend ?? "alpha",
depth: options.depth ?? "off",
children: [overlay],
});
this._color = ensureTgdVec4(options.color, new TgdVec4(1, 1, 1, 1));
this._index = options.index ?? 0;
}
get index() {
return this._index;
}
set index(index) {
if (this._index === index)
return;
this._index = index;
this.refresh();
}
get color() {
return this._color;
}
set color(value) {
const color = ensureTgdVec4(value);
if (this._color === color)
return;
this._color = color;
this.refresh();
}
get alignX() {
return this.overlay.alignX;
}
set alignX(alignX) {
this.overlay.alignX = alignX;
}
get alignY() {
return this.overlay.alignY;
}
set alignY(alignY) {
this.overlay.alignY = alignY;
}
get width() {
return this.overlay.width;
}
set width(width) {
this.overlay.width = width;
}
get height() {
return this.overlay.height;
}
set height(height) {
this.overlay.height = height;
}
get marginTop() {
return this.overlay.marginTop;
}
set marginTop(marginTop) {
this.overlay.marginTop = marginTop;
}
get marginRight() {
return this.overlay.marginRight;
}
set marginRight(marginRight) {
this.overlay.marginRight = marginRight;
}
get marginBottom() {
return this.overlay.marginBottom;
}
set marginBottom(marginBottom) {
this.overlay.marginBottom = marginBottom;
}
get marginLeft() {
return this.overlay.marginLeft;
}
set marginLeft(marginLeft) {
this.overlay.marginLeft = marginLeft;
}
get z() {
return this.overlay.z;
}
set z(z) {
this.overlay.z = z;
}
delete() {
this.texture.delete();
this.sprite.delete();
this.framebuffer.delete();
this.overlay.delete();
this.state.delete();
}
paint(time, delta) {
if (this.dirty) {
this.sprite.index = this._index;
const { overlayWidth, overlayheight } = this;
this.texture.resize(overlayWidth, overlayheight);
this.framebuffer.paint(time, delta);
this.dirty = false;
}
this.state.paint(time, delta);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wYWludGVyL2ljb24vaWNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3JDLE9BQU8sRUFFSCxhQUFhLEVBQ2IsZUFBZSxFQUdmLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZUFBZSxFQUNmLE9BQU8sR0FLVixNQUFNLFlBQVksQ0FBQTtBQUNuQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBaUMsTUFBTSxZQUFZLENBQUE7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBcUJ4QyxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVU7SUFjMUMsWUFDb0IsT0FBbUIsRUFDbkMsT0FBOEI7UUFFOUIsS0FBSyxFQUFFLENBQUE7UUFIUyxZQUFPLEdBQVAsT0FBTyxDQUFZO1FBZHZCLG9CQUFlLEdBQUcsSUFBSSxRQUFRLEVBQTJCLENBQUE7UUFTakUsVUFBSyxHQUFHLElBQUksQ0FBQTtRQUNaLGlCQUFZLEdBQUcsRUFBRSxDQUFBO1FBQ2pCLGtCQUFhLEdBQUcsRUFBRSxDQUFBO1FBNEkxQixZQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ1gsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUN4QixDQUFDLENBQUE7UUFFZ0Isd0JBQW1CLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQXFDLEVBQUUsRUFBRTtZQUM1RixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtZQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQTtZQUMzQixJ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