|
|
@ -0,0 +1,43 @@ |
|
|
|
import { fabric } from "fabric"; |
|
|
|
import TileSet from "./tileset"; |
|
|
|
|
|
|
|
const image = new fabric.Image(); |
|
|
|
|
|
|
|
export default class TileMap { |
|
|
|
/** |
|
|
|
* @param {TileSet} tileset |
|
|
|
* @param {{chunkSiz:number}} opts |
|
|
|
*/ |
|
|
|
constructor(tileset, opts = {}) { |
|
|
|
this.tileset = tileset; |
|
|
|
|
|
|
|
this.opts = { |
|
|
|
chunkSize: 8, |
|
|
|
...opts, |
|
|
|
} |
|
|
|
|
|
|
|
this.chunks = []; |
|
|
|
} |
|
|
|
|
|
|
|
getChunk(x, y) { |
|
|
|
const cs = this.opts.chunkSize; |
|
|
|
const cx = x > 0 ? Math.floor(x / cs) : Math.ceil(x / cs); |
|
|
|
const cy = y > 0 ? Math.floor(y / cs) : Math.ceil(y / cs); |
|
|
|
|
|
|
|
let chunk = this.chunks.find(c => c.x === cx && c.y === cy); |
|
|
|
if (chunk == null) { |
|
|
|
chunk = new Chunk(x, y, cs); |
|
|
|
this.chunks.push(chunk); |
|
|
|
} |
|
|
|
|
|
|
|
return chunk; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
class Chunk { |
|
|
|
constructor(x, y, size) { |
|
|
|
this.x = x; |
|
|
|
this.y = y; |
|
|
|
this.size = size; |
|
|
|
} |
|
|
|
} |