UNPKG

@spearwolf/twopoint5d

Version:

Create 2.5D realtime graphics and pixelart with WebGL and three.js

47 lines 1.72 kB
export class TileSpritesFactory { constructor(tileSprites, tileSet, tileDataProvider) { this.tileSprites = tileSprites; this.tileSprites.update(); this.tileSet = tileSet; this.tileDataProvider = tileDataProvider; } addToNode(node) { node.add(this.tileSprites); } removeFromNode(node) { node.remove(this.tileSprites); } freeTileSprite(sprite) { this.tileSprites.geometry?.instancedPool.freeVO(sprite); } createTile(tileCoords) { const tileDataId = this.tileDataProvider.getTileIdAt(tileCoords.x, tileCoords.y); if (tileDataId === 0) return; const sprite = this.createTileSprite(); if (sprite == null) return; sprite.setQuadSize([tileCoords.view.width, tileCoords.view.height]); sprite.setInstancePosition([tileCoords.view.left, 0, tileCoords.view.top]); const frameId = this.tileSet.frameId(tileDataId); const texCoords = this.tileSet.atlas.get(frameId).coords; sprite.setTexCoords([texCoords.s, texCoords.t, texCoords.u, texCoords.v]); return sprite; } updateTile(tile, tileCoords) { tile.setInstancePosition([tileCoords.view.left, 0, tileCoords.view.top]); } createTileSprite() { return this.tileSprites.geometry?.instancedPool.createVO(); } destroyTile(tile) { this.tileSprites.geometry?.instancedPool.freeVO(tile); } update() { if (this.tileSprites.geometry) { this.tileSprites.geometry.touch('quadSize', 'texCoords', 'instancePosition'); this.tileSprites.update(); } } } //# sourceMappingURL=TileSpritesFactory.js.map