canvas2d-wrapper 1.14.1 → 2.0.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.
Files changed (89) hide show
  1. package/dist/Canvas2D.d.ts +3 -0
  2. package/dist/Canvas2D.js +158 -0
  3. package/dist/Canvas2D.spec.d.ts +0 -0
  4. package/dist/Canvas2D.spec.js +38101 -0
  5. package/dist/assets/Canvas2D.css +1 -0
  6. package/dist/collisions/collideElement.d.ts +3 -0
  7. package/dist/collisions/collideElement.js +53 -0
  8. package/dist/collisions/inCircle.d.ts +3 -0
  9. package/dist/collisions/inCircle.js +6 -0
  10. package/dist/collisions/inPoly.d.ts +2 -0
  11. package/dist/collisions/inPoly.js +20 -0
  12. package/dist/collisions/inRect.d.ts +2 -0
  13. package/dist/collisions/inRect.js +12 -0
  14. package/dist/collisions/onLinePath.d.ts +2 -0
  15. package/dist/collisions/onLinePath.js +45 -0
  16. package/dist/events/computeEventPositions.d.ts +9 -0
  17. package/dist/events/computeEventPositions.js +7 -0
  18. package/dist/events/elementClick.d.ts +4 -0
  19. package/dist/events/elementClick.js +18 -0
  20. package/dist/events/elementRightClick.d.ts +4 -0
  21. package/dist/events/elementRightClick.js +13 -0
  22. package/dist/events/mouseMove.d.ts +5 -0
  23. package/dist/events/mouseMove.js +37 -0
  24. package/dist/events/mouseWheel.d.ts +2 -0
  25. package/dist/events/mouseWheel.js +10 -0
  26. package/dist/functions/calcRatioForMinimap.d.ts +2 -0
  27. package/dist/functions/calcRatioForMinimap.js +15 -0
  28. package/dist/functions/calcTileSize.d.ts +1 -0
  29. package/dist/functions/calcTileSize.js +6 -0
  30. package/dist/functions/preloadImages.d.ts +1 -0
  31. package/dist/functions/preloadImages.js +7 -0
  32. package/dist/functions/sortElements.d.ts +2 -0
  33. package/dist/functions/sortElements.js +18 -0
  34. package/dist/generateTestData.d.ts +2 -0
  35. package/dist/generateTestData.js +48 -0
  36. package/dist/hooks/useGamepad.d.ts +1 -0
  37. package/dist/hooks/useGamepad.js +13 -0
  38. package/dist/hooks/useKeyboard.d.ts +5 -0
  39. package/dist/hooks/useKeyboard.js +19 -0
  40. package/dist/hooks/useMousePosition.d.ts +6 -0
  41. package/dist/hooks/useMousePosition.js +25 -0
  42. package/dist/hooks/useWindowDimensions.d.ts +4 -0
  43. package/dist/hooks/useWindowDimensions.js +20 -0
  44. package/dist/img/logo.png +0 -0
  45. package/dist/main.d.ts +20 -0
  46. package/dist/main.js +26 -0
  47. package/dist/render/renderCanvas.d.ts +3 -0
  48. package/dist/render/renderCanvas.js +35 -0
  49. package/dist/render/renderCircle.d.ts +2 -0
  50. package/dist/render/renderCircle.js +12 -0
  51. package/dist/render/renderImage.d.ts +2 -0
  52. package/dist/render/renderImage.js +41 -0
  53. package/dist/render/renderLinePath.d.ts +2 -0
  54. package/dist/render/renderLinePath.js +27 -0
  55. package/dist/render/renderPolygon.d.ts +2 -0
  56. package/dist/render/renderPolygon.js +18 -0
  57. package/dist/render/renderRect.d.ts +2 -0
  58. package/dist/render/renderRect.js +27 -0
  59. package/dist/shapes/CanvasImage.d.ts +40 -0
  60. package/dist/shapes/CanvasImage.js +38 -0
  61. package/dist/shapes/CanvasObject.d.ts +14 -0
  62. package/dist/shapes/CanvasObject.js +27 -0
  63. package/dist/shapes/Circle.d.ts +28 -0
  64. package/dist/shapes/Circle.js +25 -0
  65. package/dist/shapes/ColoredCanvasObject.d.ts +7 -0
  66. package/dist/shapes/ColoredCanvasObject.js +14 -0
  67. package/dist/shapes/LinePath.d.ts +31 -0
  68. package/dist/shapes/LinePath.js +28 -0
  69. package/dist/shapes/Polygon.d.ts +25 -0
  70. package/dist/shapes/Polygon.js +23 -0
  71. package/dist/shapes/Rect.d.ts +34 -0
  72. package/dist/shapes/Rect.js +29 -0
  73. package/dist/types/Canvas2DProps.d.ts +30 -0
  74. package/dist/types/Canvas2DProps.js +1 -0
  75. package/dist/types/Canvas2DState.d.ts +18 -0
  76. package/dist/types/Canvas2DState.js +1 -0
  77. package/dist/types/CollideElementResultItem.d.ts +9 -0
  78. package/dist/types/CollideElementResultItem.js +1 -0
  79. package/dist/types/Position2D.d.ts +5 -0
  80. package/dist/types/Position2D.js +1 -0
  81. package/dist/types/Surface2D.d.ts +7 -0
  82. package/dist/types/Surface2D.js +1 -0
  83. package/package.json +48 -56
  84. package/canvas2d-wrapper.d.ts +0 -285
  85. package/dist/index.css +0 -3
  86. package/dist/index.js +0 -1088
  87. package/dist/index.js.map +0 -1
  88. package/dist/index.modern.js +0 -1074
  89. package/dist/index.modern.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize, rotation) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tlet rotatedLeft = left;\n\tlet rotatedTop = top;\n\tif (rotation) {\n\t\tconst centerX = x + width / 2;\n\t\tconst centerY = y + height / 2;\n\n\t\trotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation)\n\t\trotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation)\n\t}\n\n\treturn (x <= rotatedLeft && rotatedLeft <= (x + width) && y <= rotatedTop && rotatedTop <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize, element.rotation)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.element.zIndex > b.element.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.element.zIndex < b.element.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[0];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t\tthis.rotation = rotation;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t * @param {number} \trotation The rotation in radians\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions, rotation }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.rotation = rotation;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif (!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\t-width / 2,\n\t\t\t\t-height / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\t-element.swidth / 2,\n\t\t\t\t-element.sheight / 2,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\t\tif (!element.sx) {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t} else {\n\t\t\tcontext.drawImage(\n\t\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\t\telement.sx,\n\t\t\t\telement.sy,\n\t\t\t\telement.swidth,\n\t\t\t\telement.sheight,\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight\n\t\t\t);\n\t\t}\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tconst positionX = left + element.x * localTileSize;\n\tconst positionY = top + element.y * localTileSize;\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\tif (element.rotation) {\n\t\tcontext.save();\n\t\tcontext.translate(positionX + width / 2, positionY + height / 2);\n\t\tcontext.rotate(element.rotation);\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\t-width / 2,\n\t\t\t\t-width / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tcontext.restore();\n\t} else {\n\n\t\tif (element.fill) {\n\t\t\tcontext.fillRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\n\t\tif (element.stroke) {\n\t\t\tcontext.strokeRect(\n\t\t\t\tpositionX,\n\t\t\t\tpositionY,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t);\n\t\t}\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","rotation","width","height","rotatedLeft","rotatedTop","centerX","centerY","Math","cos","sin","onLinePath","lineWidth","from","to","diffX","diffY","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","positionX","positionY","save","translate","rotate","drawImage","restore","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}