/* */ var Map = function(opt){ opt = defaults(opt, { type: "editor", el: document.querySelector("#map"), width: window.innerWidth, height: window.innerHeight, zoom: -2, zoom_min: -6.2, zoom_max: 0, }) var base = this base.el = opt.el base.$el = $(base.el) base.opt = opt if (! base.el) return base.dimensions = new vec2(opt.width, opt.height) base.center = new vec2(0,0) base.sides_for_center = function(){ var sides = base.dimensions.clone().div(2).div(base.zoom) return new Rect( base.center.a - sides.a, -base.center.b - sides.b, base.center.a + sides.a, -base.center.b + sides.b ) } base.sides_for_camera = function(){ var sides = base.dimensions.clone().div(2).div(base.zoom) return new Rect( scene.camera.x - sides.a, scene.camera.z - sides.b, scene.camera.x + sides.a, scene.camera.z + sides.b ) } base.set_zoom = function (n) { n = clamp(n, opt.zoom_min, opt.zoom_max) base.zoom_exponent = n base.zoom = pow(2, n) } base.set_zoom(opt.zoom) var canvas = base.canvas = document.createElement("canvas") canvas.width = base.dimensions.a canvas.height = base.dimensions.b base.el.appendChild(canvas) switch (opt.type) { case "ortho": base.draw = new Map.Draw (base, { ortho: true }) base.ui = new Map.UI.Ortho (base) base.sides = base.sides_for_center $(window).resize(base.resize) break case "editor": base.draw = new Map.Draw (base) base.ui = new Map.UI.Editor (base) base.sides = base.sides_for_center $(window).resize(base.resize) break case "minimap": base.draw = new Map.Draw (base, { center: scene.camera, minimap: true }) base.ui = new Map.UI.Minimap (base) base.sides = base.sides_for_camera break } base.resize = function(w, h){ canvas.width = base.dimensions.a = w || window.innerWidth canvas.height = base.dimensions.b = h || window.innerHeight // resize here - esp if 2d-hires } base.toggle = function(state){ return $(base.el).toggle(state).is(':visible') } } Map.prototype.update = function(){ this.draw && this.draw.animate() }