@spearwolf/twopoint5d
Version:
a library to create 2.5d realtime graphics and pixelart with three.js
77 lines • 2.25 kB
JavaScript
import { TextureCoords } from './TextureCoords.js';
const isNamedTextureAtlasArgs = (args) => typeof args[0] === 'string' || typeof args[0] === 'symbol';
const rand = (max) => (Math.random() * max) | 0;
export class TextureAtlas {
#frames = [];
#frameNames = new Map();
add(...args) {
const id = this.#frames.length;
if (isNamedTextureAtlasArgs(args)) {
this.#frameNames.set(args[0], id);
this.#frames.push({ coords: args[1], data: args[2] });
}
else {
this.#frames.push({ coords: args[0], data: args[1] });
}
return id;
}
get size() {
return this.#frames.length;
}
get(id) {
return this.#frames[id];
}
frameId(name) {
return this.#frameNames.get(name);
}
frame(name) {
return this.#frames[this.#frameNames.get(name)];
}
frameNames(match) {
const frameNames = Array.from(this.#frameNames.keys());
if (match != null) {
const regex = typeof match === 'string' ? new RegExp(match) : match;
return frameNames.filter((name) => typeof name === 'string' && regex.test(name));
}
return frameNames;
}
randomFrameId() {
return rand(this.#frames.length);
}
randomFrame() {
return this.#frames[this.randomFrameId()];
}
randomFrameName() {
const randomIdx = rand(this.#frameNames.size);
let idx = 0;
for (const name of this.#frameNames.keys()) {
if (idx === randomIdx) {
return name;
}
++idx;
}
return;
}
randomFrameIds(count) {
const frameIds = [];
for (let i = 0; i < count; i++) {
frameIds.push(this.randomFrameId());
}
return frameIds;
}
randomFrames(count) {
const frames = [];
for (let i = 0; i < count; i++) {
frames.push(this.randomFrame());
}
return frames;
}
randomFrameNames(count) {
const names = [];
for (let i = 0; i < count; i++) {
names.push(this.randomFrameName());
}
return names;
}
}
//# sourceMappingURL=TextureAtlas.js.map