canvas2d-wrapper 1.11.0 → 1.12.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 +10 -2
- package/dist/index.js +73 -13
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +73 -13
- package/dist/index.modern.js.map +1 -1
- package/package.json +1 -1
package/canvas2d-wrapper.d.ts
CHANGED
@@ -56,7 +56,8 @@ declare module "canvas2d-wrapper" {
|
|
56
56
|
x: number,
|
57
57
|
y: number,
|
58
58
|
zIndex?: number,
|
59
|
-
draggable?: boolean
|
59
|
+
draggable?: boolean,
|
60
|
+
hasCollisions?: boolean
|
60
61
|
);
|
61
62
|
|
62
63
|
get constructorName(): string;
|
@@ -69,6 +70,7 @@ declare module "canvas2d-wrapper" {
|
|
69
70
|
x: number;
|
70
71
|
y: number;
|
71
72
|
draggable: boolean | undefined;
|
73
|
+
hasCollisions: boolean | undefined;
|
72
74
|
}
|
73
75
|
|
74
76
|
export class ColoredCanvasObject extends CanvasObject {
|
@@ -81,7 +83,8 @@ declare module "canvas2d-wrapper" {
|
|
81
83
|
fill?: string,
|
82
84
|
stroke?: string,
|
83
85
|
zIndex?: number,
|
84
|
-
draggable?: boolean
|
86
|
+
draggable?: boolean,
|
87
|
+
hasCollisions?: boolean
|
85
88
|
);
|
86
89
|
|
87
90
|
fill: string | undefined;
|
@@ -98,6 +101,7 @@ declare module "canvas2d-wrapper" {
|
|
98
101
|
src: string,
|
99
102
|
zIndex?: number,
|
100
103
|
draggable?: boolean,
|
104
|
+
hasCollisions?: boolean
|
101
105
|
});
|
102
106
|
|
103
107
|
crop(sx: number, swidth: number, sheight: number);
|
@@ -117,6 +121,7 @@ declare module "canvas2d-wrapper" {
|
|
117
121
|
stroke?: string,
|
118
122
|
zIndex?: number,
|
119
123
|
draggable?: boolean,
|
124
|
+
hasCollisions?: boolean
|
120
125
|
});
|
121
126
|
|
122
127
|
radius: number;
|
@@ -131,6 +136,7 @@ declare module "canvas2d-wrapper" {
|
|
131
136
|
zIndex?: number,
|
132
137
|
smoothCorners?: boolean,
|
133
138
|
smoothCornersRadius?: number,
|
139
|
+
hasCollisions?: boolean
|
134
140
|
});
|
135
141
|
|
136
142
|
points: Position2D[];
|
@@ -147,6 +153,7 @@ declare module "canvas2d-wrapper" {
|
|
147
153
|
stroke?: string,
|
148
154
|
zIndex?: number,
|
149
155
|
draggable?: boolean,
|
156
|
+
hasCollisions?: boolean
|
150
157
|
});
|
151
158
|
|
152
159
|
points: Position2D[];
|
@@ -163,6 +170,7 @@ declare module "canvas2d-wrapper" {
|
|
163
170
|
stroke?: string,
|
164
171
|
zIndex?: number,
|
165
172
|
draggable?: boolean,
|
173
|
+
hasCollisions?: boolean
|
166
174
|
});
|
167
175
|
|
168
176
|
width: number;
|
package/dist/index.js
CHANGED
@@ -123,11 +123,52 @@ function inRect(element, x, y, left, top, localTileSize) {
|
|
123
123
|
return x <= left && left <= x + width && y <= top && top <= y + height;
|
124
124
|
}
|
125
125
|
|
126
|
+
function onLinePath(element, left, top, localTileSize) {
|
127
|
+
var radius = element.lineWidth;
|
128
|
+
if (inCircle({
|
129
|
+
radius: radius
|
130
|
+
}, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
|
131
|
+
return true;
|
132
|
+
}
|
133
|
+
if (inCircle({
|
134
|
+
radius: radius
|
135
|
+
}, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
|
136
|
+
return true;
|
137
|
+
}
|
138
|
+
for (var i = 1; i < element.points.length; i++) {
|
139
|
+
var from = {
|
140
|
+
x: element.points[i - 1].x * localTileSize,
|
141
|
+
y: element.points[i - 1].y * localTileSize
|
142
|
+
};
|
143
|
+
var to = {
|
144
|
+
x: element.points[i].x * localTileSize,
|
145
|
+
y: element.points[i].y * localTileSize
|
146
|
+
};
|
147
|
+
var diffX = from.x - to.x;
|
148
|
+
var diffY = from.y - to.y;
|
149
|
+
var length = Math.sqrt(diffX * diffX + diffY * diffY);
|
150
|
+
var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
|
151
|
+
var point = {
|
152
|
+
x: from.x + dot * (to.x - from.x),
|
153
|
+
y: from.y + dot * (to.y - from.y)
|
154
|
+
};
|
155
|
+
if (inCircle({
|
156
|
+
radius: radius
|
157
|
+
}, point.x, point.y, left, top, localTileSize)) {
|
158
|
+
return true;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
return false;
|
162
|
+
}
|
163
|
+
|
126
164
|
function collideElement(e, elements, left, top, tileSize, zoom) {
|
127
165
|
var localTileSize = calcTileSize(tileSize, zoom);
|
128
166
|
var validElements = [];
|
129
167
|
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
130
168
|
var element = _step.value;
|
169
|
+
if (!element.hasCollisions) {
|
170
|
+
continue;
|
171
|
+
}
|
131
172
|
var x = element.x * localTileSize;
|
132
173
|
var y = element.y * localTileSize;
|
133
174
|
switch (element.constructorName) {
|
@@ -171,6 +212,19 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
171
212
|
});
|
172
213
|
}
|
173
214
|
break;
|
215
|
+
case 'LinePath':
|
216
|
+
if (onLinePath(element, left, top, localTileSize)) {
|
217
|
+
validElements.push({
|
218
|
+
id: element.id,
|
219
|
+
element: element,
|
220
|
+
originalEvent: e,
|
221
|
+
posOnMap: {
|
222
|
+
x: element.x,
|
223
|
+
y: element.y
|
224
|
+
}
|
225
|
+
});
|
226
|
+
}
|
227
|
+
break;
|
174
228
|
}
|
175
229
|
}
|
176
230
|
if (validElements.length === 0) {
|
@@ -359,12 +413,13 @@ function sortElements(elements) {
|
|
359
413
|
}
|
360
414
|
|
361
415
|
var CanvasObject = /*#__PURE__*/function () {
|
362
|
-
function CanvasObject(id, x, y, zIndex, draggable) {
|
416
|
+
function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
|
363
417
|
this.id = id;
|
364
418
|
this.x = x;
|
365
419
|
this.y = y;
|
366
420
|
this['z-index'] = zIndex;
|
367
421
|
this.draggable = draggable;
|
422
|
+
this.hasCollisions = hasCollisions;
|
368
423
|
}
|
369
424
|
return _createClass(CanvasObject, [{
|
370
425
|
key: "zIndex",
|
@@ -392,8 +447,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
392
447
|
height = _ref.height,
|
393
448
|
src = _ref.src,
|
394
449
|
zIndex = _ref.zIndex,
|
395
|
-
draggable = _ref.draggable
|
396
|
-
|
450
|
+
draggable = _ref.draggable,
|
451
|
+
hasCollisions = _ref.hasCollisions;
|
452
|
+
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
397
453
|
_this.width = width;
|
398
454
|
_this.height = height;
|
399
455
|
_this.src = src;
|
@@ -416,9 +472,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
416
472
|
}(CanvasObject);
|
417
473
|
|
418
474
|
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
419
|
-
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
|
475
|
+
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
|
420
476
|
var _this;
|
421
|
-
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
477
|
+
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
422
478
|
_this.fill = fill;
|
423
479
|
_this.stroke = stroke;
|
424
480
|
return _this;
|
@@ -442,8 +498,9 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
442
498
|
fill = _ref.fill,
|
443
499
|
stroke = _ref.stroke,
|
444
500
|
zIndex = _ref.zIndex,
|
445
|
-
draggable = _ref.draggable
|
446
|
-
|
501
|
+
draggable = _ref.draggable,
|
502
|
+
hasCollisions = _ref.hasCollisions;
|
503
|
+
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
447
504
|
_this.radius = radius;
|
448
505
|
return _this;
|
449
506
|
}
|
@@ -465,8 +522,9 @@ var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
465
522
|
stroke = _ref.stroke,
|
466
523
|
zIndex = _ref.zIndex,
|
467
524
|
smoothCorners = _ref.smoothCorners,
|
468
|
-
smoothCornersRadius = _ref.smoothCornersRadius
|
469
|
-
|
525
|
+
smoothCornersRadius = _ref.smoothCornersRadius,
|
526
|
+
hasCollisions = _ref.hasCollisions;
|
527
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
|
470
528
|
_this.points = points;
|
471
529
|
_this.lineWidth = lineWidth;
|
472
530
|
_this.smoothCorners = smoothCorners;
|
@@ -490,8 +548,9 @@ var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
490
548
|
fill = _ref.fill,
|
491
549
|
stroke = _ref.stroke,
|
492
550
|
zIndex = _ref.zIndex,
|
493
|
-
draggable = _ref.draggable
|
494
|
-
|
551
|
+
draggable = _ref.draggable,
|
552
|
+
hasCollisions = _ref.hasCollisions;
|
553
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
495
554
|
_this.points = points;
|
496
555
|
return _this;
|
497
556
|
}
|
@@ -515,8 +574,9 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
515
574
|
fill = _ref.fill,
|
516
575
|
stroke = _ref.stroke,
|
517
576
|
zIndex = _ref.zIndex,
|
518
|
-
draggable = _ref.draggable
|
519
|
-
|
577
|
+
draggable = _ref.draggable,
|
578
|
+
hasCollisions = _ref.hasCollisions;
|
579
|
+
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
520
580
|
_this.width = width;
|
521
581
|
_this.height = height;
|
522
582
|
return _this;
|
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/collideElement.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 calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\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\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\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) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\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) {\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}\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 */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\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) {\n\t\tsuper(id, x, y, zIndex, draggable);\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 */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\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';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\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 */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\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 */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\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) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\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","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","Math","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","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","lineWidth","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/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\";\r\n\r\nexport default function onLinePath(element, left, top, localTileSize) {\r\n\tconst radius = element.lineWidth;\r\n\r\n\t// Starting point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[0].x * localTileSize,\r\n\t\telement.points[0].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Ending point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[element.points.length - 1].x * localTileSize,\r\n\t\telement.points[element.points.length - 1].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\t// Line collision\r\n\tfor (let i = 1; i < element.points.length; i++) {\r\n\t\tconst from = {\r\n\t\t\tx: element.points[i - 1].x * localTileSize,\r\n\t\t\ty: element.points[i - 1].y * localTileSize\r\n\t\t};\r\n\r\n\t\tconst to = {\r\n\t\t\tx: element.points[i].x * localTileSize,\r\n\t\t\ty: element.points[i].y * localTileSize\r\n\t\t};\r\n\r\n\t\t// Line length\r\n\t\tconst diffX = from.x - to.x;\r\n\t\tconst diffY = from.y - to.y;\r\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\r\n\r\n\t\t// Dot product of the line and Circle\r\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\r\n\t\t\r\n\t\t// Closest point on the line\r\n\t\tconst point = {\r\n\t\t\tx: from.x + (dot * (to.x - from.x)),\r\n\t\t\ty: from.y + (dot * (to.y - from.y)),\r\n\t\t};\r\n\r\n\t\tif (inCircle(\r\n\t\t\t{ radius }, \r\n\t\t\tpoint.x,\r\n\t\t\tpoint.y,\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\tlocalTileSize\r\n\t\t)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Curves collision\r\n\t// TODO, since not needed for now\r\n\r\n\treturn false;\r\n}\r\n","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\nimport onLinePath from './onLinePath';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (!element.hasCollisions) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'LinePath': \r\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\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\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\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) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\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';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\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) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\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","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","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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"}
|
package/dist/index.modern.js
CHANGED
@@ -120,11 +120,52 @@ function inRect(element, x, y, left, top, localTileSize) {
|
|
120
120
|
return x <= left && left <= x + width && y <= top && top <= y + height;
|
121
121
|
}
|
122
122
|
|
123
|
+
function onLinePath(element, left, top, localTileSize) {
|
124
|
+
var radius = element.lineWidth;
|
125
|
+
if (inCircle({
|
126
|
+
radius: radius
|
127
|
+
}, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
|
128
|
+
return true;
|
129
|
+
}
|
130
|
+
if (inCircle({
|
131
|
+
radius: radius
|
132
|
+
}, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
|
133
|
+
return true;
|
134
|
+
}
|
135
|
+
for (var i = 1; i < element.points.length; i++) {
|
136
|
+
var from = {
|
137
|
+
x: element.points[i - 1].x * localTileSize,
|
138
|
+
y: element.points[i - 1].y * localTileSize
|
139
|
+
};
|
140
|
+
var to = {
|
141
|
+
x: element.points[i].x * localTileSize,
|
142
|
+
y: element.points[i].y * localTileSize
|
143
|
+
};
|
144
|
+
var diffX = from.x - to.x;
|
145
|
+
var diffY = from.y - to.y;
|
146
|
+
var length = Math.sqrt(diffX * diffX + diffY * diffY);
|
147
|
+
var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
|
148
|
+
var point = {
|
149
|
+
x: from.x + dot * (to.x - from.x),
|
150
|
+
y: from.y + dot * (to.y - from.y)
|
151
|
+
};
|
152
|
+
if (inCircle({
|
153
|
+
radius: radius
|
154
|
+
}, point.x, point.y, left, top, localTileSize)) {
|
155
|
+
return true;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
return false;
|
159
|
+
}
|
160
|
+
|
123
161
|
function collideElement(e, elements, left, top, tileSize, zoom) {
|
124
162
|
var localTileSize = calcTileSize(tileSize, zoom);
|
125
163
|
var validElements = [];
|
126
164
|
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
127
165
|
var element = _step.value;
|
166
|
+
if (!element.hasCollisions) {
|
167
|
+
continue;
|
168
|
+
}
|
128
169
|
var x = element.x * localTileSize;
|
129
170
|
var y = element.y * localTileSize;
|
130
171
|
switch (element.constructorName) {
|
@@ -168,6 +209,19 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
168
209
|
});
|
169
210
|
}
|
170
211
|
break;
|
212
|
+
case 'LinePath':
|
213
|
+
if (onLinePath(element, left, top, localTileSize)) {
|
214
|
+
validElements.push({
|
215
|
+
id: element.id,
|
216
|
+
element: element,
|
217
|
+
originalEvent: e,
|
218
|
+
posOnMap: {
|
219
|
+
x: element.x,
|
220
|
+
y: element.y
|
221
|
+
}
|
222
|
+
});
|
223
|
+
}
|
224
|
+
break;
|
171
225
|
}
|
172
226
|
}
|
173
227
|
if (validElements.length === 0) {
|
@@ -356,12 +410,13 @@ function sortElements(elements) {
|
|
356
410
|
}
|
357
411
|
|
358
412
|
var CanvasObject = /*#__PURE__*/function () {
|
359
|
-
function CanvasObject(id, x, y, zIndex, draggable) {
|
413
|
+
function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
|
360
414
|
this.id = id;
|
361
415
|
this.x = x;
|
362
416
|
this.y = y;
|
363
417
|
this['z-index'] = zIndex;
|
364
418
|
this.draggable = draggable;
|
419
|
+
this.hasCollisions = hasCollisions;
|
365
420
|
}
|
366
421
|
return _createClass(CanvasObject, [{
|
367
422
|
key: "zIndex",
|
@@ -389,8 +444,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
389
444
|
height = _ref.height,
|
390
445
|
src = _ref.src,
|
391
446
|
zIndex = _ref.zIndex,
|
392
|
-
draggable = _ref.draggable
|
393
|
-
|
447
|
+
draggable = _ref.draggable,
|
448
|
+
hasCollisions = _ref.hasCollisions;
|
449
|
+
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
394
450
|
_this.width = width;
|
395
451
|
_this.height = height;
|
396
452
|
_this.src = src;
|
@@ -413,9 +469,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
|
413
469
|
}(CanvasObject);
|
414
470
|
|
415
471
|
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
416
|
-
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
|
472
|
+
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
|
417
473
|
var _this;
|
418
|
-
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
474
|
+
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
419
475
|
_this.fill = fill;
|
420
476
|
_this.stroke = stroke;
|
421
477
|
return _this;
|
@@ -439,8 +495,9 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
439
495
|
fill = _ref.fill,
|
440
496
|
stroke = _ref.stroke,
|
441
497
|
zIndex = _ref.zIndex,
|
442
|
-
draggable = _ref.draggable
|
443
|
-
|
498
|
+
draggable = _ref.draggable,
|
499
|
+
hasCollisions = _ref.hasCollisions;
|
500
|
+
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
444
501
|
_this.radius = radius;
|
445
502
|
return _this;
|
446
503
|
}
|
@@ -462,8 +519,9 @@ var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
462
519
|
stroke = _ref.stroke,
|
463
520
|
zIndex = _ref.zIndex,
|
464
521
|
smoothCorners = _ref.smoothCorners,
|
465
|
-
smoothCornersRadius = _ref.smoothCornersRadius
|
466
|
-
|
522
|
+
smoothCornersRadius = _ref.smoothCornersRadius,
|
523
|
+
hasCollisions = _ref.hasCollisions;
|
524
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
|
467
525
|
_this.points = points;
|
468
526
|
_this.lineWidth = lineWidth;
|
469
527
|
_this.smoothCorners = smoothCorners;
|
@@ -487,8 +545,9 @@ var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
487
545
|
fill = _ref.fill,
|
488
546
|
stroke = _ref.stroke,
|
489
547
|
zIndex = _ref.zIndex,
|
490
|
-
draggable = _ref.draggable
|
491
|
-
|
548
|
+
draggable = _ref.draggable,
|
549
|
+
hasCollisions = _ref.hasCollisions;
|
550
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
492
551
|
_this.points = points;
|
493
552
|
return _this;
|
494
553
|
}
|
@@ -512,8 +571,9 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
512
571
|
fill = _ref.fill,
|
513
572
|
stroke = _ref.stroke,
|
514
573
|
zIndex = _ref.zIndex,
|
515
|
-
draggable = _ref.draggable
|
516
|
-
|
574
|
+
draggable = _ref.draggable,
|
575
|
+
hasCollisions = _ref.hasCollisions;
|
576
|
+
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
517
577
|
_this.width = width;
|
518
578
|
_this.height = height;
|
519
579
|
return _this;
|
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/collideElement.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 calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\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\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\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) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\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) {\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}\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 */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\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) {\n\t\tsuper(id, x, y, zIndex, draggable);\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 */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\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';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\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 */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\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 */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\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) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\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","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","Math","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","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","lineWidth","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/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\";\r\n\r\nexport default function onLinePath(element, left, top, localTileSize) {\r\n\tconst radius = element.lineWidth;\r\n\r\n\t// Starting point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[0].x * localTileSize,\r\n\t\telement.points[0].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Ending point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[element.points.length - 1].x * localTileSize,\r\n\t\telement.points[element.points.length - 1].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\t// Line collision\r\n\tfor (let i = 1; i < element.points.length; i++) {\r\n\t\tconst from = {\r\n\t\t\tx: element.points[i - 1].x * localTileSize,\r\n\t\t\ty: element.points[i - 1].y * localTileSize\r\n\t\t};\r\n\r\n\t\tconst to = {\r\n\t\t\tx: element.points[i].x * localTileSize,\r\n\t\t\ty: element.points[i].y * localTileSize\r\n\t\t};\r\n\r\n\t\t// Line length\r\n\t\tconst diffX = from.x - to.x;\r\n\t\tconst diffY = from.y - to.y;\r\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\r\n\r\n\t\t// Dot product of the line and Circle\r\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\r\n\t\t\r\n\t\t// Closest point on the line\r\n\t\tconst point = {\r\n\t\t\tx: from.x + (dot * (to.x - from.x)),\r\n\t\t\ty: from.y + (dot * (to.y - from.y)),\r\n\t\t};\r\n\r\n\t\tif (inCircle(\r\n\t\t\t{ radius }, \r\n\t\t\tpoint.x,\r\n\t\t\tpoint.y,\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\tlocalTileSize\r\n\t\t)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Curves collision\r\n\t// TODO, since not needed for now\r\n\r\n\treturn false;\r\n}\r\n","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\nimport onLinePath from './onLinePath';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (!element.hasCollisions) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'LinePath': \r\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\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\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\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) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\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';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\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) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\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';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\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","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","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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"}
|