@spearwolf/twopoint5d
Version:
Create 2.5D realtime graphics and pixelart with WebGL and three.js
109 lines • 3.11 kB
JavaScript
import { Group } from 'three/webgpu';
import { Map2DTileStreamer } from './Map2DTileStreamer.js';
export class Map2D extends Group {
#renderers = new Set();
#tileStreamer;
#visibilitor;
get tileStreamer() {
return this.#tileStreamer;
}
set tileStreamer(streamer) {
if (this.#tileStreamer !== streamer) {
if (this.#renderers.size > 0) {
if (this.#tileStreamer) {
for (const renderer of this.#renderers) {
this.#tileStreamer.removeTileRenderer(renderer);
}
}
}
this.#tileStreamer = streamer;
if (this.#visibilitor) {
this.#tileStreamer.visibilitor = this.#visibilitor;
}
if (this.#tileStreamer) {
for (const renderer of this.#renderers) {
this.#tileStreamer.addTileRenderer(renderer);
}
}
}
}
get visibilitor() {
return this.#visibilitor;
}
set visibilitor(v) {
if (this.#visibilitor !== v) {
this.#visibilitor = v;
if (this.#tileStreamer != null) {
this.#tileStreamer.visibilitor = v;
}
}
}
get centerX() {
return this.#tileStreamer.centerX;
}
set centerX(x) {
this.#tileStreamer.centerX = x;
}
get centerY() {
return this.#tileStreamer.centerY;
}
set centerY(y) {
this.#tileStreamer.centerY = y;
}
get tileWidth() {
return this.#tileStreamer.tileWidth;
}
set tileWidth(width) {
this.#tileStreamer.tileWidth = width;
}
get tileHeight() {
return this.#tileStreamer.tileHeight;
}
set tileHeight(height) {
this.#tileStreamer.tileHeight = height;
}
get xOffset() {
return this.#tileStreamer.xOffset;
}
set xOffset(offset) {
this.#tileStreamer.xOffset = offset;
}
get yOffset() {
return this.#tileStreamer.yOffset;
}
set yOffset(offset) {
this.#tileStreamer.yOffset = offset;
}
constructor(tileStreamer = new Map2DTileStreamer()) {
super();
this.#tileStreamer = tileStreamer;
}
addTileRenderer(renderer) {
if (!this.#renderers.has(renderer)) {
this.#renderers.add(renderer);
this.#tileStreamer.addTileRenderer(renderer);
this.add(renderer.node);
}
}
removeTileRenderer(renderer) {
if (this.#renderers.has(renderer)) {
this.remove(renderer.node);
this.#tileStreamer.removeTileRenderer(renderer);
this.#renderers.delete(renderer);
}
}
update() {
this.updateMatrixWorld();
this.#tileStreamer.update(this);
}
clearTiles() {
this.#tileStreamer.clearTiles();
}
dispose() {
for (const renderer of this.#renderers) {
this.removeTileRenderer(renderer);
renderer.dispose();
}
}
}
//# sourceMappingURL=Map2D.js.map