@spearwolf/twopoint5d
Version:
a library to create 2.5d realtime graphics and pixelart with three.js
115 lines • 3.37 kB
JavaScript
import { Group } from 'three';
import { Map2DLayer } from './Map2DLayer.js';
export class Map2DLayer3D extends Group {
#renderers = new Set();
#map2dLayer;
#visibilitor;
get map2dLayer() {
return this.#map2dLayer;
}
set map2dLayer(map2dLayer) {
if (this.#map2dLayer !== map2dLayer) {
if (this.#renderers.size > 0) {
if (this.#map2dLayer) {
for (const renderer of this.#renderers) {
this.#map2dLayer.removeTileRenderer(renderer);
}
}
}
this.#map2dLayer = map2dLayer;
if (this.#visibilitor) {
this.#map2dLayer.visibilitor = this.#visibilitor;
}
if (this.#map2dLayer) {
for (const renderer of this.#renderers) {
this.#map2dLayer.addTileRenderer(renderer);
}
}
}
}
get visibilitor() {
return this.#visibilitor;
}
set visibilitor(v) {
if (this.#visibilitor !== v) {
this.#visibilitor?.removeFromScene(this);
this.#visibilitor = v;
this.#visibilitor?.addToScene(this);
if (this.#map2dLayer != null) {
this.#map2dLayer.visibilitor = v;
}
}
}
get centerX() {
return this.#map2dLayer.centerX;
}
set centerX(x) {
this.#map2dLayer.centerX = x;
}
get centerY() {
return this.#map2dLayer.centerY;
}
set centerY(y) {
this.#map2dLayer.centerY = y;
}
get tileWidth() {
return this.#map2dLayer.tileWidth;
}
set tileWidth(width) {
this.#map2dLayer.tileWidth = width;
}
get tileHeight() {
return this.#map2dLayer.tileHeight;
}
set tileHeight(height) {
this.#map2dLayer.tileHeight = height;
}
get xOffset() {
return this.#map2dLayer.xOffset;
}
set xOffset(offset) {
this.#map2dLayer.xOffset = offset;
}
get yOffset() {
return this.#map2dLayer.yOffset;
}
set yOffset(offset) {
this.#map2dLayer.yOffset = offset;
}
constructor(map2dLayer = new Map2DLayer()) {
super();
this.#map2dLayer = map2dLayer;
}
addTileRenderer(renderer) {
if (!this.#renderers.has(renderer)) {
this.#renderers.add(renderer);
this.#map2dLayer.addTileRenderer(renderer);
console.log('Map2DLayer3D.addTileRenderer', { map2dLayer: this.#map2dLayer, renderer, Map2DLayer3D: this });
}
}
removeTileRenderer(renderer) {
if (this.#renderers.has(renderer)) {
this.#renderers.delete(renderer);
this.#map2dLayer.removeTileRenderer(renderer);
console.log('Map2DLayer3D.removeTileRenderer', {
map2dLayer: this.#map2dLayer,
renderer,
Map2DLayer3D: this,
});
}
}
update() {
this.updateMatrixWorld();
this.#map2dLayer.update(this);
}
resetTiles() {
this.#map2dLayer.resetTiles();
}
dispose() {
for (const renderer of this.#renderers) {
this.removeTileRenderer(renderer);
renderer.dispose();
}
}
}
//# sourceMappingURL=Map2DLayer3D.js.map