import {extend} from './utils.js'; export default class Cartographer { constructor(settings) { [ 'getOriginX', 'getOriginY', 'getScale', 'move', 'zoom' ].map(method => this[method] = this[method].bind(this)); this.pointyTop = settings.pointyTop; // in pixels this.originX = 0; this.originY = 0; // in pixels this.scale = 25; this.scaleMin = 10; this.scaleMax = 250; // in cells this.width = 0; this.height = 0; extend(this, settings); this.originX = parseInt(this.originX); this.originY = parseInt(this.originY); this.width = parseInt(this.width); this.height = parseInt(this.height); } getOriginX() {return this.originX;} getOriginY() {return this.originY;} getScale() {return this.scale;} move(event) { if (event.deltaX) { this.originX = Math.floor((this.originX*1000) + (event.deltaX*1000)) / 1000; } if (event.deltaY) { this.originY = Math.floor((this.originY*1000) + (event.deltaY*1000)) / 1000; } } zoom(event) { let scaleOrig = this.scale; let scaleTemp = parseInt((scaleOrig + (event.deltaY / -10)) * 1000) / 1000; // make sure 'scale' doesn't get too small nor too big if (scaleTemp < this.scaleMin) scaleTemp = this.scaleMin; else if (scaleTemp > this.scaleMax) scaleTemp = this.scaleMax; if (scaleOrig != scaleTemp) { this.scale = scaleTemp; // zoom to the current mouse location this.move({ deltaX: (((event.offsetX - this.originX) / scaleOrig) * (scaleOrig - scaleTemp)), deltaY: (((event.offsetY - this.originY) / scaleOrig) * (scaleOrig - scaleTemp)) }); } } }