UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

60 lines 3.7 kB
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=