canvas2d-wrapper 1.10.0 → 1.11.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/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2021-2022 Dysnomia
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2021-2025 Dysnomia
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -41,6 +41,10 @@ declare module "canvas2d-wrapper" {
41
41
  // Additional props
42
42
  id: string,
43
43
  className?: string,
44
+ showMinimap?: boolean,
45
+ minimapWidth?: number,
46
+ minimapHeight?: number,
47
+ minimapFilter?: (e: CanvasObject) => boolean,
44
48
  };
45
49
 
46
50
  export function Canvas2D(props: Canvas2DProps);
package/dist/index.js CHANGED
@@ -306,6 +306,33 @@ function mouseWheel(event, props, setProps, minZoom, maxZoom) {
306
306
  }));
307
307
  }
308
308
 
309
+ function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {
310
+ var elementsX = elements.map(function (e) {
311
+ if (Array.isArray(e.points)) {
312
+ return e.points.map(function (p) {
313
+ return p.x * tileSize;
314
+ });
315
+ }
316
+ return [e.x * tileSize];
317
+ }).flat();
318
+ var minX = Math.min.apply(Math, elementsX);
319
+ var maxX = Math.max.apply(Math, elementsX);
320
+ width = Math.max(2 * maxX, -2 * minX, width);
321
+ var elementsY = elements.map(function (e) {
322
+ if (Array.isArray(e.points)) {
323
+ return e.points.map(function (p) {
324
+ return p.y * tileSize;
325
+ });
326
+ }
327
+ return [e.y * tileSize];
328
+ }).flat();
329
+ var minY = Math.min.apply(Math, elementsY);
330
+ var maxY = Math.max.apply(Math, elementsY);
331
+ height = Math.max(2 * maxY, -2 * minY, height);
332
+ var ratio = Math.max(width / minimapWidth, height / minimapHeight);
333
+ return ratio;
334
+ }
335
+
309
336
  function sortElements(elements) {
310
337
  elements.sort(function (a, b) {
311
338
  if (a.zIndex !== b.zIndex) {
@@ -571,7 +598,7 @@ function renderLinePath(context, element, left, top, localTileSize) {
571
598
  context.lineTo(points[_i].x, points[_i].y);
572
599
  }
573
600
  }
574
- context.lineWidth = element.lineWidth;
601
+ context.lineWidth = element.lineWidth * localTileSize;
575
602
  context.stroke();
576
603
  context.lineWidth = defaultLineWidth;
577
604
  }
@@ -632,7 +659,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
632
659
  }
633
660
  }
634
661
 
635
- var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
662
+ var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop", "showMinimap", "minimapWidth", "minimapHeight", "minimapFilter"];
636
663
  var elements = {};
637
664
  function Canvas2D(_ref) {
638
665
  var width = _ref.width,
@@ -663,6 +690,16 @@ function Canvas2D(_ref) {
663
690
  deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
664
691
  _ref$deltaTop = _ref.deltaTop,
665
692
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
693
+ _ref$showMinimap = _ref.showMinimap,
694
+ showMinimap = _ref$showMinimap === void 0 ? false : _ref$showMinimap,
695
+ _ref$minimapWidth = _ref.minimapWidth,
696
+ minimapWidth = _ref$minimapWidth === void 0 ? 240 : _ref$minimapWidth,
697
+ _ref$minimapHeight = _ref.minimapHeight,
698
+ minimapHeight = _ref$minimapHeight === void 0 ? 120 : _ref$minimapHeight,
699
+ _ref$minimapFilter = _ref.minimapFilter,
700
+ minimapFilter = _ref$minimapFilter === void 0 ? function (e) {
701
+ return true;
702
+ } : _ref$minimapFilter,
666
703
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
667
704
  if (!elements[otherProps.id]) {
668
705
  elements[otherProps.id] = [];
@@ -679,15 +716,29 @@ function Canvas2D(_ref) {
679
716
  context.imageSmoothingEnabled = true;
680
717
  context.imageSmoothingQuality = smoothingQuality;
681
718
  }
682
- setState({
683
- boundingClientRect: canvas.getBoundingClientRect(),
684
- canvas: canvas,
685
- context: context,
686
- left: width / 2,
687
- top: height / 2,
688
- width: width,
689
- height: height,
690
- zoom: 1
719
+ setState(function (s) {
720
+ return _extends({}, s, {
721
+ boundingClientRect: canvas.getBoundingClientRect(),
722
+ canvas: canvas,
723
+ context: context,
724
+ left: width / 2,
725
+ top: height / 2,
726
+ width: width,
727
+ height: height,
728
+ zoom: 1
729
+ });
730
+ });
731
+ }
732
+ }, []);
733
+ var canvasMapRef = React.useCallback(function (minimapCanvas) {
734
+ if (minimapCanvas !== null) {
735
+ var minimapContext = minimapCanvas.getContext('2d');
736
+ setState(function (s) {
737
+ return _extends({}, s, {
738
+ boundingClientRect: minimapCanvas.getBoundingClientRect(),
739
+ minimapCanvas: minimapCanvas,
740
+ minimapContext: minimapContext
741
+ });
691
742
  });
692
743
  }
693
744
  }, []);
@@ -748,6 +799,17 @@ function Canvas2D(_ref) {
748
799
  if (state.context) {
749
800
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
750
801
  }
802
+ if (showMinimap && state.minimapContext) {
803
+ var filteredElementsList = sortedElements.filter(minimapFilter);
804
+ var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);
805
+ renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
806
+ left: minimapWidth / 2,
807
+ top: minimapHeight / 2,
808
+ deltaLeft: 0,
809
+ deltaTop: 0,
810
+ zoom: 1
811
+ });
812
+ }
751
813
  window.requestAnimationFrame(render);
752
814
  }
753
815
  window.requestAnimationFrame(render);
@@ -755,7 +817,7 @@ function Canvas2D(_ref) {
755
817
  shouldRender = false;
756
818
  };
757
819
  }, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
758
- return /*#__PURE__*/React__default.createElement("canvas", _extends({
820
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("canvas", _extends({
759
821
  ref: canvasRef,
760
822
  width: width,
761
823
  height: height,
@@ -763,7 +825,12 @@ function Canvas2D(_ref) {
763
825
  onWheel: onWheelFn,
764
826
  onClick: onClickFn,
765
827
  className: "canvas2d-wrapper"
766
- }, otherProps));
828
+ }, otherProps)), showMinimap && /*#__PURE__*/React__default.createElement("canvas", {
829
+ ref: canvasMapRef,
830
+ width: minimapWidth,
831
+ height: minimapHeight,
832
+ className: "canvas2d-wrapper-minimap"
833
+ }));
767
834
  }
768
835
 
769
836
  function preloadImages(images) {
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/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 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;\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 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\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({\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\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\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<canvas\r\n\t\t\tref={canvasRef}\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tonPointerMove={onMouseMove}\r\n\t\t\tonWheel={onWheelFn}\r\n\t\t\tonClick={onClickFn}\r\n\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t{...otherProps}\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","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","map","p","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","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","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/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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"}
@@ -303,6 +303,33 @@ function mouseWheel(event, props, setProps, minZoom, maxZoom) {
303
303
  }));
304
304
  }
305
305
 
306
+ function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {
307
+ var elementsX = elements.map(function (e) {
308
+ if (Array.isArray(e.points)) {
309
+ return e.points.map(function (p) {
310
+ return p.x * tileSize;
311
+ });
312
+ }
313
+ return [e.x * tileSize];
314
+ }).flat();
315
+ var minX = Math.min.apply(Math, elementsX);
316
+ var maxX = Math.max.apply(Math, elementsX);
317
+ width = Math.max(2 * maxX, -2 * minX, width);
318
+ var elementsY = elements.map(function (e) {
319
+ if (Array.isArray(e.points)) {
320
+ return e.points.map(function (p) {
321
+ return p.y * tileSize;
322
+ });
323
+ }
324
+ return [e.y * tileSize];
325
+ }).flat();
326
+ var minY = Math.min.apply(Math, elementsY);
327
+ var maxY = Math.max.apply(Math, elementsY);
328
+ height = Math.max(2 * maxY, -2 * minY, height);
329
+ var ratio = Math.max(width / minimapWidth, height / minimapHeight);
330
+ return ratio;
331
+ }
332
+
306
333
  function sortElements(elements) {
307
334
  elements.sort(function (a, b) {
308
335
  if (a.zIndex !== b.zIndex) {
@@ -568,7 +595,7 @@ function renderLinePath(context, element, left, top, localTileSize) {
568
595
  context.lineTo(points[_i].x, points[_i].y);
569
596
  }
570
597
  }
571
- context.lineWidth = element.lineWidth;
598
+ context.lineWidth = element.lineWidth * localTileSize;
572
599
  context.stroke();
573
600
  context.lineWidth = defaultLineWidth;
574
601
  }
@@ -629,7 +656,7 @@ function renderCanvas(context, width, height, elements, tileSize, state) {
629
656
  }
630
657
  }
631
658
 
632
- var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop"];
659
+ var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop", "showMinimap", "minimapWidth", "minimapHeight", "minimapFilter"];
633
660
  var elements = {};
634
661
  function Canvas2D(_ref) {
635
662
  var width = _ref.width,
@@ -660,6 +687,16 @@ function Canvas2D(_ref) {
660
687
  deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
661
688
  _ref$deltaTop = _ref.deltaTop,
662
689
  deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
690
+ _ref$showMinimap = _ref.showMinimap,
691
+ showMinimap = _ref$showMinimap === void 0 ? false : _ref$showMinimap,
692
+ _ref$minimapWidth = _ref.minimapWidth,
693
+ minimapWidth = _ref$minimapWidth === void 0 ? 240 : _ref$minimapWidth,
694
+ _ref$minimapHeight = _ref.minimapHeight,
695
+ minimapHeight = _ref$minimapHeight === void 0 ? 120 : _ref$minimapHeight,
696
+ _ref$minimapFilter = _ref.minimapFilter,
697
+ minimapFilter = _ref$minimapFilter === void 0 ? function (e) {
698
+ return true;
699
+ } : _ref$minimapFilter,
663
700
  otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
664
701
  if (!elements[otherProps.id]) {
665
702
  elements[otherProps.id] = [];
@@ -676,15 +713,29 @@ function Canvas2D(_ref) {
676
713
  context.imageSmoothingEnabled = true;
677
714
  context.imageSmoothingQuality = smoothingQuality;
678
715
  }
679
- setState({
680
- boundingClientRect: canvas.getBoundingClientRect(),
681
- canvas: canvas,
682
- context: context,
683
- left: width / 2,
684
- top: height / 2,
685
- width: width,
686
- height: height,
687
- zoom: 1
716
+ setState(function (s) {
717
+ return _extends({}, s, {
718
+ boundingClientRect: canvas.getBoundingClientRect(),
719
+ canvas: canvas,
720
+ context: context,
721
+ left: width / 2,
722
+ top: height / 2,
723
+ width: width,
724
+ height: height,
725
+ zoom: 1
726
+ });
727
+ });
728
+ }
729
+ }, []);
730
+ var canvasMapRef = useCallback(function (minimapCanvas) {
731
+ if (minimapCanvas !== null) {
732
+ var minimapContext = minimapCanvas.getContext('2d');
733
+ setState(function (s) {
734
+ return _extends({}, s, {
735
+ boundingClientRect: minimapCanvas.getBoundingClientRect(),
736
+ minimapCanvas: minimapCanvas,
737
+ minimapContext: minimapContext
738
+ });
688
739
  });
689
740
  }
690
741
  }, []);
@@ -745,6 +796,17 @@ function Canvas2D(_ref) {
745
796
  if (state.context) {
746
797
  renderCanvas(state.context, width, height, sortedElements, tileSize, state);
747
798
  }
799
+ if (showMinimap && state.minimapContext) {
800
+ var filteredElementsList = sortedElements.filter(minimapFilter);
801
+ var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);
802
+ renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
803
+ left: minimapWidth / 2,
804
+ top: minimapHeight / 2,
805
+ deltaLeft: 0,
806
+ deltaTop: 0,
807
+ zoom: 1
808
+ });
809
+ }
748
810
  window.requestAnimationFrame(render);
749
811
  }
750
812
  window.requestAnimationFrame(render);
@@ -752,7 +814,7 @@ function Canvas2D(_ref) {
752
814
  shouldRender = false;
753
815
  };
754
816
  }, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
755
- return /*#__PURE__*/React.createElement("canvas", _extends({
817
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("canvas", _extends({
756
818
  ref: canvasRef,
757
819
  width: width,
758
820
  height: height,
@@ -760,7 +822,12 @@ function Canvas2D(_ref) {
760
822
  onWheel: onWheelFn,
761
823
  onClick: onClickFn,
762
824
  className: "canvas2d-wrapper"
763
- }, otherProps));
825
+ }, otherProps)), showMinimap && /*#__PURE__*/React.createElement("canvas", {
826
+ ref: canvasMapRef,
827
+ width: minimapWidth,
828
+ height: minimapHeight,
829
+ className: "canvas2d-wrapper-minimap"
830
+ }));
764
831
  }
765
832
 
766
833
  function preloadImages(images) {
@@ -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/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 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;\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 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\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({\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\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\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<canvas\r\n\t\t\tref={canvasRef}\r\n\t\t\twidth={width}\r\n\t\t\theight={height}\r\n\t\t\tonPointerMove={onMouseMove}\r\n\t\t\tonWheel={onWheelFn}\r\n\t\t\tonClick={onClickFn}\r\n\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t{...otherProps}\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","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","map","p","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","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","getBoundingClientRect","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","requestAnimationFrame","React","createElement","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/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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.10.0",
3
+ "version": "1.11.0",
4
4
  "description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
5
5
  "author": "Elanis",
6
6
  "license": "MIT",
@@ -12,8 +12,8 @@
12
12
  "node": ">=10"
13
13
  },
14
14
  "scripts": {
15
- "build": "microbundle-crl --no-compress --format modern,cjs",
16
- "start": "microbundle-crl watch --no-compress --format modern,cjs",
15
+ "build": "microbundle-crl --no-compress --format modern,cjs --jsxFragment React.Fragment",
16
+ "start": "microbundle-crl watch --no-compress --format modern,cjs --jsxFragment React.Fragment",
17
17
  "prepare": "run-s build",
18
18
  "test": "run-s test:unit test:lint test:build",
19
19
  "test:build": "run-s build",