canvas2d-wrapper 1.13.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canvas2d-wrapper.d.ts +6 -2
- package/dist/index.js +59 -14
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +59 -14
- package/dist/index.modern.js.map +1 -1
- package/package.json +5 -5
package/canvas2d-wrapper.d.ts
CHANGED
@@ -101,7 +101,8 @@ declare module "canvas2d-wrapper" {
|
|
101
101
|
src: string,
|
102
102
|
zIndex?: number,
|
103
103
|
draggable?: boolean,
|
104
|
-
hasCollisions?: boolean
|
104
|
+
hasCollisions?: boolean,
|
105
|
+
rotation?: number,
|
105
106
|
});
|
106
107
|
|
107
108
|
crop(sx: number, swidth: number, sheight: number);
|
@@ -109,6 +110,7 @@ declare module "canvas2d-wrapper" {
|
|
109
110
|
src: string;
|
110
111
|
width: number;
|
111
112
|
height: number;
|
113
|
+
rotation?: number;
|
112
114
|
}
|
113
115
|
|
114
116
|
export class Circle extends ColoredCanvasObject {
|
@@ -170,11 +172,13 @@ declare module "canvas2d-wrapper" {
|
|
170
172
|
stroke?: string,
|
171
173
|
zIndex?: number,
|
172
174
|
draggable?: boolean,
|
173
|
-
hasCollisions?: boolean
|
175
|
+
hasCollisions?: boolean,
|
176
|
+
rotation?: number,
|
174
177
|
});
|
175
178
|
|
176
179
|
width: number;
|
177
180
|
height: number;
|
181
|
+
rotation?: number;
|
178
182
|
}
|
179
183
|
|
180
184
|
// Functions
|
package/dist/index.js
CHANGED
@@ -117,10 +117,18 @@ function inPoly(element, x, y, mouseX, mouseY, localTileSize) {
|
|
117
117
|
return counter;
|
118
118
|
}
|
119
119
|
|
120
|
-
function inRect(element, x, y, left, top, localTileSize) {
|
120
|
+
function inRect(element, x, y, left, top, localTileSize, rotation) {
|
121
121
|
var width = element.width * localTileSize;
|
122
122
|
var height = element.height * localTileSize;
|
123
|
-
|
123
|
+
var rotatedLeft = left;
|
124
|
+
var rotatedTop = top;
|
125
|
+
if (rotation) {
|
126
|
+
var centerX = x + width / 2;
|
127
|
+
var centerY = y + height / 2;
|
128
|
+
rotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation);
|
129
|
+
rotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation);
|
130
|
+
}
|
131
|
+
return x <= rotatedLeft && rotatedLeft <= x + width && y <= rotatedTop && rotatedTop <= y + height;
|
124
132
|
}
|
125
133
|
|
126
134
|
function onLinePath(element, left, top, localTileSize) {
|
@@ -174,7 +182,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
174
182
|
switch (element.constructorName) {
|
175
183
|
case 'Rect':
|
176
184
|
case 'CanvasImage':
|
177
|
-
if (inRect(element, x, y, left, top, localTileSize)) {
|
185
|
+
if (inRect(element, x, y, left, top, localTileSize, element.rotation)) {
|
178
186
|
validElements.push({
|
179
187
|
id: element.id,
|
180
188
|
element: element,
|
@@ -248,7 +256,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
248
256
|
}
|
249
257
|
return 0;
|
250
258
|
});
|
251
|
-
return validElements[
|
259
|
+
return validElements[0];
|
252
260
|
}
|
253
261
|
|
254
262
|
function computeEventPositions(props, event, tileSize) {
|
@@ -460,11 +468,13 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
460
468
|
src = _ref.src,
|
461
469
|
zIndex = _ref.zIndex,
|
462
470
|
draggable = _ref.draggable,
|
463
|
-
hasCollisions = _ref.hasCollisions
|
471
|
+
hasCollisions = _ref.hasCollisions,
|
472
|
+
rotation = _ref.rotation;
|
464
473
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
465
474
|
_this.width = width;
|
466
475
|
_this.height = height;
|
467
476
|
_this.src = src;
|
477
|
+
_this.rotation = rotation;
|
468
478
|
return _this;
|
469
479
|
}
|
470
480
|
_inheritsLoose(CanvasImage, _CanvasObject);
|
@@ -587,10 +597,12 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
587
597
|
stroke = _ref.stroke,
|
588
598
|
zIndex = _ref.zIndex,
|
589
599
|
draggable = _ref.draggable,
|
590
|
-
hasCollisions = _ref.hasCollisions
|
600
|
+
hasCollisions = _ref.hasCollisions,
|
601
|
+
rotation = _ref.rotation;
|
591
602
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
592
603
|
_this.width = width;
|
593
604
|
_this.height = height;
|
605
|
+
_this.rotation = rotation;
|
594
606
|
return _this;
|
595
607
|
}
|
596
608
|
_inheritsLoose(Rect, _ColoredCanvasObject);
|
@@ -620,10 +632,26 @@ function renderImage(context, element, left, top, localTileSize) {
|
|
620
632
|
__canvas2dWrapper__.imgCache[element.src] = new Image();
|
621
633
|
__canvas2dWrapper__.imgCache[element.src].src = element.src;
|
622
634
|
}
|
623
|
-
|
624
|
-
|
635
|
+
var positionX = left + element.x * localTileSize;
|
636
|
+
var positionY = top + element.y * localTileSize;
|
637
|
+
var width = element.width * localTileSize;
|
638
|
+
var height = element.height * localTileSize;
|
639
|
+
if (element.rotation) {
|
640
|
+
context.save();
|
641
|
+
context.translate(positionX + width / 2, positionY + height / 2);
|
642
|
+
context.rotate(element.rotation);
|
643
|
+
if (!element.sx) {
|
644
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], -width / 2, -height / 2, width, height);
|
645
|
+
} else {
|
646
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, -element.swidth / 2, -element.sheight / 2, width, height);
|
647
|
+
}
|
648
|
+
context.restore();
|
625
649
|
} else {
|
626
|
-
|
650
|
+
if (!element.sx) {
|
651
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], positionX, positionY, width, height);
|
652
|
+
} else {
|
653
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, positionX, positionY, width, height);
|
654
|
+
}
|
627
655
|
}
|
628
656
|
}
|
629
657
|
|
@@ -691,11 +719,28 @@ function renderPolygon(context, element, left, top, localTileSize) {
|
|
691
719
|
}
|
692
720
|
|
693
721
|
function renderRect(context, element, left, top, localTileSize) {
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
722
|
+
var positionX = left + element.x * localTileSize;
|
723
|
+
var positionY = top + element.y * localTileSize;
|
724
|
+
var width = element.width * localTileSize;
|
725
|
+
var height = element.height * localTileSize;
|
726
|
+
if (element.rotation) {
|
727
|
+
context.save();
|
728
|
+
context.translate(positionX + width / 2, positionY + height / 2);
|
729
|
+
context.rotate(element.rotation);
|
730
|
+
if (element.fill) {
|
731
|
+
context.fillRect(-width / 2, -width / 2, width, height);
|
732
|
+
}
|
733
|
+
if (element.stroke) {
|
734
|
+
context.strokeRect(-width / 2, -width / 2, width, height);
|
735
|
+
}
|
736
|
+
context.restore();
|
737
|
+
} else {
|
738
|
+
if (element.fill) {
|
739
|
+
context.fillRect(positionX, positionY, width, height);
|
740
|
+
}
|
741
|
+
if (element.stroke) {
|
742
|
+
context.strokeRect(positionX, positionY, width, height);
|
743
|
+
}
|
699
744
|
}
|
700
745
|
}
|
701
746
|
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[validElements.length - 1];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize, rotation) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tlet rotatedLeft = left;\n\tlet rotatedTop = top;\n\tif (rotation) {\n\t\tconst centerX = x + width / 2;\n\t\tconst centerY = y + height / 2;\n\n\t\trotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation)\n\t\trotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation)\n\t}\n\n\treturn (x <= rotatedLeft && rotatedLeft <= (x + width) && y <= rotatedTop && rotatedTop <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize, element.rotation)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[0];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t\tthis.rotation = rotation;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.rotation = rotation;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif (!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\t-width / 2,\n\t\t\t\t-height / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\t-element.swidth / 2,\n\t\t\t\t-element.sheight / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","rotation","width","height","rotatedLeft","rotatedTop","centerX","centerY","Math","cos","sin","onLinePath","lineWidth","from","to","diffX","diffY","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","positionX","positionY","save","translate","rotate","drawImage","restore","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
|
package/dist/index.modern.js
CHANGED
@@ -114,10 +114,18 @@ function inPoly(element, x, y, mouseX, mouseY, localTileSize) {
|
|
114
114
|
return counter;
|
115
115
|
}
|
116
116
|
|
117
|
-
function inRect(element, x, y, left, top, localTileSize) {
|
117
|
+
function inRect(element, x, y, left, top, localTileSize, rotation) {
|
118
118
|
var width = element.width * localTileSize;
|
119
119
|
var height = element.height * localTileSize;
|
120
|
-
|
120
|
+
var rotatedLeft = left;
|
121
|
+
var rotatedTop = top;
|
122
|
+
if (rotation) {
|
123
|
+
var centerX = x + width / 2;
|
124
|
+
var centerY = y + height / 2;
|
125
|
+
rotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation);
|
126
|
+
rotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation);
|
127
|
+
}
|
128
|
+
return x <= rotatedLeft && rotatedLeft <= x + width && y <= rotatedTop && rotatedTop <= y + height;
|
121
129
|
}
|
122
130
|
|
123
131
|
function onLinePath(element, left, top, localTileSize) {
|
@@ -171,7 +179,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
171
179
|
switch (element.constructorName) {
|
172
180
|
case 'Rect':
|
173
181
|
case 'CanvasImage':
|
174
|
-
if (inRect(element, x, y, left, top, localTileSize)) {
|
182
|
+
if (inRect(element, x, y, left, top, localTileSize, element.rotation)) {
|
175
183
|
validElements.push({
|
176
184
|
id: element.id,
|
177
185
|
element: element,
|
@@ -245,7 +253,7 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
245
253
|
}
|
246
254
|
return 0;
|
247
255
|
});
|
248
|
-
return validElements[
|
256
|
+
return validElements[0];
|
249
257
|
}
|
250
258
|
|
251
259
|
function computeEventPositions(props, event, tileSize) {
|
@@ -457,11 +465,13 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
457
465
|
src = _ref.src,
|
458
466
|
zIndex = _ref.zIndex,
|
459
467
|
draggable = _ref.draggable,
|
460
|
-
hasCollisions = _ref.hasCollisions
|
468
|
+
hasCollisions = _ref.hasCollisions,
|
469
|
+
rotation = _ref.rotation;
|
461
470
|
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
462
471
|
_this.width = width;
|
463
472
|
_this.height = height;
|
464
473
|
_this.src = src;
|
474
|
+
_this.rotation = rotation;
|
465
475
|
return _this;
|
466
476
|
}
|
467
477
|
_inheritsLoose(CanvasImage, _CanvasObject);
|
@@ -584,10 +594,12 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
584
594
|
stroke = _ref.stroke,
|
585
595
|
zIndex = _ref.zIndex,
|
586
596
|
draggable = _ref.draggable,
|
587
|
-
hasCollisions = _ref.hasCollisions
|
597
|
+
hasCollisions = _ref.hasCollisions,
|
598
|
+
rotation = _ref.rotation;
|
588
599
|
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
589
600
|
_this.width = width;
|
590
601
|
_this.height = height;
|
602
|
+
_this.rotation = rotation;
|
591
603
|
return _this;
|
592
604
|
}
|
593
605
|
_inheritsLoose(Rect, _ColoredCanvasObject);
|
@@ -617,10 +629,26 @@ function renderImage(context, element, left, top, localTileSize) {
|
|
617
629
|
__canvas2dWrapper__.imgCache[element.src] = new Image();
|
618
630
|
__canvas2dWrapper__.imgCache[element.src].src = element.src;
|
619
631
|
}
|
620
|
-
|
621
|
-
|
632
|
+
var positionX = left + element.x * localTileSize;
|
633
|
+
var positionY = top + element.y * localTileSize;
|
634
|
+
var width = element.width * localTileSize;
|
635
|
+
var height = element.height * localTileSize;
|
636
|
+
if (element.rotation) {
|
637
|
+
context.save();
|
638
|
+
context.translate(positionX + width / 2, positionY + height / 2);
|
639
|
+
context.rotate(element.rotation);
|
640
|
+
if (!element.sx) {
|
641
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], -width / 2, -height / 2, width, height);
|
642
|
+
} else {
|
643
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, -element.swidth / 2, -element.sheight / 2, width, height);
|
644
|
+
}
|
645
|
+
context.restore();
|
622
646
|
} else {
|
623
|
-
|
647
|
+
if (!element.sx) {
|
648
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], positionX, positionY, width, height);
|
649
|
+
} else {
|
650
|
+
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, positionX, positionY, width, height);
|
651
|
+
}
|
624
652
|
}
|
625
653
|
}
|
626
654
|
|
@@ -688,11 +716,28 @@ function renderPolygon(context, element, left, top, localTileSize) {
|
|
688
716
|
}
|
689
717
|
|
690
718
|
function renderRect(context, element, left, top, localTileSize) {
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
719
|
+
var positionX = left + element.x * localTileSize;
|
720
|
+
var positionY = top + element.y * localTileSize;
|
721
|
+
var width = element.width * localTileSize;
|
722
|
+
var height = element.height * localTileSize;
|
723
|
+
if (element.rotation) {
|
724
|
+
context.save();
|
725
|
+
context.translate(positionX + width / 2, positionY + height / 2);
|
726
|
+
context.rotate(element.rotation);
|
727
|
+
if (element.fill) {
|
728
|
+
context.fillRect(-width / 2, -width / 2, width, height);
|
729
|
+
}
|
730
|
+
if (element.stroke) {
|
731
|
+
context.strokeRect(-width / 2, -width / 2, width, height);
|
732
|
+
}
|
733
|
+
context.restore();
|
734
|
+
} else {
|
735
|
+
if (element.fill) {
|
736
|
+
context.fillRect(positionX, positionY, width, height);
|
737
|
+
}
|
738
|
+
if (element.stroke) {
|
739
|
+
context.strokeRect(positionX, positionY, width, height);
|
740
|
+
}
|
696
741
|
}
|
697
742
|
}
|
698
743
|
|
package/dist/index.modern.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[validElements.length - 1];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize, rotation) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tlet rotatedLeft = left;\n\tlet rotatedTop = top;\n\tif (rotation) {\n\t\tconst centerX = x + width / 2;\n\t\tconst centerY = y + height / 2;\n\n\t\trotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation)\n\t\trotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation)\n\t}\n\n\treturn (x <= rotatedLeft && rotatedLeft <= (x + width) && y <= rotatedTop && rotatedTop <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize, element.rotation)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[0];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t\tthis.rotation = rotation;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.rotation = rotation;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif (!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\t-width / 2,\n\t\t\t\t-height / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\t-element.swidth / 2,\n\t\t\t\t-element.sheight / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","rotation","width","height","rotatedLeft","rotatedTop","centerX","centerY","Math","cos","sin","onLinePath","lineWidth","from","to","diffX","diffY","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","positionX","positionY","save","translate","rotate","drawImage","restore","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "canvas2d-wrapper",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.14.0",
|
4
4
|
"description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
|
5
5
|
"author": "Elanis",
|
6
6
|
"license": "MIT",
|
@@ -28,20 +28,20 @@
|
|
28
28
|
},
|
29
29
|
"devDependencies": {
|
30
30
|
"@eslint/eslintrc": "^3.3.1",
|
31
|
-
"@eslint/js": "^9.
|
31
|
+
"@eslint/js": "^9.36.0",
|
32
32
|
"@testing-library/jest-dom": "^6.8.0",
|
33
33
|
"@testing-library/react": "^16.3.0",
|
34
34
|
"@testing-library/user-event": "^14.6.1",
|
35
35
|
"canvas": "^3.2.0",
|
36
36
|
"cross-env": "^10.0.0",
|
37
|
-
"eslint": "^9.
|
37
|
+
"eslint": "^9.36.0",
|
38
38
|
"gh-pages": "^6.3.0",
|
39
|
-
"globals": "^16.
|
39
|
+
"globals": "^16.4.0",
|
40
40
|
"microbundle-crl": "^0.13.11",
|
41
41
|
"npm-run-all": "^4.1.5",
|
42
42
|
"postcss-flexbugs-fixes": "^5.0.2",
|
43
43
|
"postcss-normalize": "^13.0.1",
|
44
|
-
"postcss-preset-env": "^10.
|
44
|
+
"postcss-preset-env": "^10.4.0",
|
45
45
|
"react": "^19.1.1",
|
46
46
|
"react-dom": "^19.1.1",
|
47
47
|
"react-scripts": "^5.0.1"
|