@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
60 lines • 3.7 kB
JavaScript
export class OctreeCache {
constructor() {
this.cache = new Map();
}
set(x, y, z, level, item) {
this.cache.set(this.makeKey(x, y, z, level), item);
}
get(x, y, z, level) {
return this.cache.get(this.makeKey(x, y, z, level));
}
remove(x, y, z, level) {
this.cache.delete(this.makeKey(x, y, z, level));
}
clear() {
this.cache.clear();
}
makeKey(x, y, z, level) {
return `${level}/${x}/${y}/${z}`;
}
}
// At some point w will nee to benchmark another solution to
// find the fastest octree cache.
// private readonly cache: T[][][][] = []
// set(x: number, y: number, z: number, level: number, item: T) {
// const { cache } = this
// const arrLevel = cache[level]
// if (arrLevel === undefined) {
// const arrX: T[][][] = []
// const arrY: T[][] = []
// const arrZ: T[] = []
// arrZ[z] = item
// arrY[y] = arrZ
// arrX[x] = arrY
// cache[level] = arrX
// } else {
// const arrX: T[][][] | undefined = arrLevel[x]
// if (arrX === undefined) {
// const arrY: T[][] = []
// const arrZ: T[] = []
// arrZ[z] = item
// arrY[y] = arrZ
// arrLevel[x] = arrY
// } else {
// const arrY: T[][]|undefined = arrX[y]
// }
// }
// }
// get(x: number, y: number, z: number, level: number): T | undefined {
// const arrLevel = this.cache[level]
// if (arrLevel === undefined) return undefined
// const arrX = arrLevel[x]
// if (arrX === undefined) return undefined
// const arrY = arrX[y]
// if (arrY === undefined) return undefined
// return arrY[z]
// }
// clear() {
// this.cache.splice(0)
// }
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGFpbnRlci9sb2QvY2FjaGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDcUIsVUFBSyxHQUFHLElBQUksR0FBRyxFQUFhLENBQUE7SUFxQmpELENBQUM7SUFuQkcsR0FBRyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLEtBQWEsRUFBRSxJQUFPO1FBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDdEQsQ0FBQztJQUVELEdBQUcsQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhO1FBQzlDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYTtRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDbkQsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3RCLENBQUM7SUFFTyxPQUFPLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsS0FBYTtRQUMxRCxPQUFPLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUE7SUFDcEMsQ0FBQztDQUNKO0FBRUQsNERBQTREO0FBQzVELGlDQUFpQztBQUVqQyx5Q0FBeUM7QUFFekMsaUVBQWlFO0FBQ2pFLDZCQUE2QjtBQUM3QixvQ0FBb0M7QUFDcEMsb0NBQW9DO0FBQ3BDLG1DQUFtQztBQUNuQyxpQ0FBaUM7QUFDakMsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDhCQUE4QjtBQUM5QixlQUFlO0FBQ2Ysd0RBQXdEO0FBQ3hELG9DQUFvQztBQUNwQyxxQ0FBcUM7QUFDckMsbUNBQW1DO0FBQ25DLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLG1CQUFtQjtBQUNuQixvREFBb0Q7QUFDcEQsWUFBWTtBQUNaLFFBQVE7QUFDUixJQUFJO0FBRUosdUVBQXVFO0FBQ3ZFLHlDQUF5QztBQUN6QyxtREFBbUQ7QUFFbkQsK0JBQStCO0FBQy9CLCtDQUErQztBQUUvQywyQkFBMkI7QUFDM0IsK0NBQStDO0FBRS9DLHFCQUFxQjtBQUNyQixJQUFJO0FBRUosWUFBWTtBQUNaLDJCQUEyQjtBQUMzQixJQUFJIn0=