You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.9 KiB

2 years ago
class MiniMap{
constructor(htmlHolder, htmlCanvas, isMinimap){
let w = $(htmlHolder).width();
let h = $(htmlHolder).height();
this.dim = {x: w, y: h};
this.p = p.createGraphics(w, h);
this.p.parent(htmlHolder.get(0));
this.isMinimap = isMinimap;
$(htmlCanvas).show();
}
get mouseX(){
return p.winMouseX - $("#minimap > canvas").offset().left;
}
get mouseY(){
return p.winMouseY - $("#minimap > canvas").offset().top;
}
draw(image, dim, vp){
this.p.clear();
this.p.image(image, 0, 0, this.dim.x, this.dim.y, 0, 0, dim.x, dim.y);
if (this.isMinimap){
let x = p.map(vp.x, 0, vp.maxX, 0, this.dim.x);
let y = p.map(vp.y, 0, vp.maxY, 0, this.dim.y);
let w = p.map(p.width * vp.zoom, 0, vp.maxX, 0, this.dim.x);
let h = p.map(p.height * vp.zoom, 0, vp.maxY, 0, this.dim.y);
let r = (w + h) / 2 * 0.02;
this.p.noFill();
this.p.rect(x, y, w, h, r);
}
}
onMouseDown(){
if (this.mouseX > 0 && this.mouseX < this.p.width &&
this.mouseY > 0 && this.mouseY < this.p.height){
this.isDrawing = true;
this.moveViewport();
}
}
onMouseUp(){
this.isDrawing = false;
}
onMouseDragged(){
if (this.isDrawing)
this.moveViewport();
}
moveViewport(){
if (!this.isMinimap)
return;
let vp = drawer.viewport;
let mapX = this.mouseX - p.map(p.width * vp.zoom / 2, 0, drawer.dim.x, 0, this.dim.x);
let mapY = this.mouseY - p.map(p.height * vp.zoom / 2, 0, drawer.dim.y, 0, this.dim.y);
let x = p.map(mapX, 0, this.dim.x, 0, vp.maxX);
let y = p.map(mapY, 0, this.dim.y, 0, vp.maxY);
drawer.viewport.x = x;
drawer.viewport.y = y;
}
}