canvas2d-wrapper 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/canvas2d-wrapper.d.ts +182 -0
- package/dist/index.js +166 -63
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +166 -64
- package/dist/index.modern.js.map +1 -1
- package/package.json +12 -11
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/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/CanvasImage.js","../src/shapes/Rect.js","../src/shapes/Polygon.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderRect.js","../src/render/renderPolygon.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';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\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\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch(element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif(inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t});\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});\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});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif(validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif(validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif(a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[validElements.length - 1];\n}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(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};\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};\n}\n","import collideElement from '../collisions/collideElement';\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 left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\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);\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), { x: left, y: top });\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 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 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 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 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","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","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function 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","export default function renderRect(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","import Circle from '../shapes/Circle';\nimport CanvasImage from '../shapes/CanvasImage';\nimport Rect from '../shapes/Rect';\nimport Polygon from '../shapes/Polygon';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderRect from './renderRect';\nimport renderPolygon from './renderPolygon';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new Rect({})).constructorName]: renderRect,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\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 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\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({\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\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\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.context, onFrame]);\n\n\treturn (\n\t\t<canvas\n\t\t\tref={canvasRef}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tonPointerMove={onMouseMove}\n\t\t\tonWheel={onWheelFn}\n\t\t\tonClick={onClickFn}\n\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t{...otherProps}\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\tdocument.addEventListener('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('keyup', (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\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","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","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","Math","max","min","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","ColoredCanvasObject","_CanvasObject","_this","call","_inheritsLoose","Circle","_ColoredCanvasObject","_ref","CanvasImage","src","_proto","prototype","crop","sx","swidth","sheight","sy","Rect","Polygon","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderRect","fillRect","strokeRect","moveTo","lineTo","renderFn","_renderFn","renderPolygon","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","document","JSON","parse","stringify","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/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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"}
|
package/dist/index.modern.js
CHANGED
@@ -49,7 +49,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
49
49
|
if (null == r) return {};
|
50
50
|
var t = {};
|
51
51
|
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
52
|
-
if (e.
|
52
|
+
if (-1 !== e.indexOf(n)) continue;
|
53
53
|
t[n] = r[n];
|
54
54
|
}
|
55
55
|
return t;
|
@@ -134,7 +134,11 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
134
134
|
validElements.push({
|
135
135
|
id: element.id,
|
136
136
|
element: element,
|
137
|
-
originalEvent: e
|
137
|
+
originalEvent: e,
|
138
|
+
posOnMap: {
|
139
|
+
x: element.x,
|
140
|
+
y: element.y
|
141
|
+
}
|
138
142
|
});
|
139
143
|
}
|
140
144
|
break;
|
@@ -143,7 +147,11 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
143
147
|
validElements.push({
|
144
148
|
id: element.id,
|
145
149
|
element: element,
|
146
|
-
originalEvent: e
|
150
|
+
originalEvent: e,
|
151
|
+
posOnMap: {
|
152
|
+
x: element.x,
|
153
|
+
y: element.y
|
154
|
+
}
|
147
155
|
});
|
148
156
|
}
|
149
157
|
break;
|
@@ -152,7 +160,11 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
|
|
152
160
|
validElements.push({
|
153
161
|
id: element.id,
|
154
162
|
element: element,
|
155
|
-
originalEvent: e
|
163
|
+
originalEvent: e,
|
164
|
+
posOnMap: {
|
165
|
+
x: element.x,
|
166
|
+
y: element.y
|
167
|
+
}
|
156
168
|
});
|
157
169
|
}
|
158
170
|
break;
|
@@ -192,7 +204,11 @@ function elementClick(e, elements, tileSize, state) {
|
|
192
204
|
return {
|
193
205
|
id: null,
|
194
206
|
element: null,
|
195
|
-
originalEvent: e
|
207
|
+
originalEvent: e,
|
208
|
+
posOnMap: {
|
209
|
+
x: Math.floor(left / tileSize / state.zoom),
|
210
|
+
y: Math.floor(top / tileSize / state.zoom)
|
211
|
+
}
|
196
212
|
};
|
197
213
|
}
|
198
214
|
|
@@ -206,7 +222,11 @@ function elementRightClick(e, elements, tileSize, state) {
|
|
206
222
|
return {
|
207
223
|
id: null,
|
208
224
|
element: null,
|
209
|
-
originalEvent: e
|
225
|
+
originalEvent: e,
|
226
|
+
posOnMap: {
|
227
|
+
x: Math.floor(left / tileSize / state.zoom),
|
228
|
+
y: Math.floor(top / tileSize / state.zoom)
|
229
|
+
}
|
210
230
|
};
|
211
231
|
}
|
212
232
|
|
@@ -332,6 +352,39 @@ var CanvasObject = /*#__PURE__*/function () {
|
|
332
352
|
}]);
|
333
353
|
}();
|
334
354
|
|
355
|
+
var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
356
|
+
function CanvasImage(_ref) {
|
357
|
+
var _this;
|
358
|
+
var id = _ref.id,
|
359
|
+
x = _ref.x,
|
360
|
+
y = _ref.y,
|
361
|
+
width = _ref.width,
|
362
|
+
height = _ref.height,
|
363
|
+
src = _ref.src,
|
364
|
+
zIndex = _ref.zIndex,
|
365
|
+
draggable = _ref.draggable;
|
366
|
+
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
|
367
|
+
_this.width = width;
|
368
|
+
_this.height = height;
|
369
|
+
_this.src = src;
|
370
|
+
return _this;
|
371
|
+
}
|
372
|
+
_inheritsLoose(CanvasImage, _CanvasObject);
|
373
|
+
var _proto = CanvasImage.prototype;
|
374
|
+
_proto.crop = function crop(sx, swidth, sheight) {
|
375
|
+
this.sx = sx;
|
376
|
+
this.sy = sx;
|
377
|
+
this.swidth = swidth;
|
378
|
+
this.sheight = sheight;
|
379
|
+
};
|
380
|
+
return _createClass(CanvasImage, [{
|
381
|
+
key: "constructorName",
|
382
|
+
get: function get() {
|
383
|
+
return 'CanvasImage';
|
384
|
+
}
|
385
|
+
}]);
|
386
|
+
}(CanvasObject);
|
387
|
+
|
335
388
|
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
336
389
|
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
|
337
390
|
var _this;
|
@@ -373,83 +426,76 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
|
373
426
|
}]);
|
374
427
|
}(ColoredCanvasObject);
|
375
428
|
|
376
|
-
var
|
377
|
-
function
|
429
|
+
var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
|
430
|
+
function LinePath(_ref) {
|
378
431
|
var _this;
|
379
432
|
var id = _ref.id,
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
height = _ref.height,
|
384
|
-
src = _ref.src,
|
433
|
+
lineWidth = _ref.lineWidth,
|
434
|
+
points = _ref.points,
|
435
|
+
stroke = _ref.stroke,
|
385
436
|
zIndex = _ref.zIndex,
|
386
|
-
|
387
|
-
|
388
|
-
_this
|
389
|
-
_this.
|
390
|
-
_this.
|
437
|
+
smoothCorners = _ref.smoothCorners,
|
438
|
+
smoothCornersRadius = _ref.smoothCornersRadius;
|
439
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false) || this;
|
440
|
+
_this.points = points;
|
441
|
+
_this.lineWidth = lineWidth;
|
442
|
+
_this.smoothCorners = smoothCorners;
|
443
|
+
_this.smoothCornersRadius = smoothCornersRadius;
|
391
444
|
return _this;
|
392
445
|
}
|
393
|
-
_inheritsLoose(
|
394
|
-
|
395
|
-
_proto.crop = function crop(sx, swidth, sheight) {
|
396
|
-
this.sx = sx;
|
397
|
-
this.sy = sx;
|
398
|
-
this.swidth = swidth;
|
399
|
-
this.sheight = sheight;
|
400
|
-
};
|
401
|
-
return _createClass(CanvasImage, [{
|
446
|
+
_inheritsLoose(LinePath, _ColoredCanvasObject);
|
447
|
+
return _createClass(LinePath, [{
|
402
448
|
key: "constructorName",
|
403
449
|
get: function get() {
|
404
|
-
return '
|
450
|
+
return 'LinePath';
|
405
451
|
}
|
406
452
|
}]);
|
407
|
-
}(
|
453
|
+
}(ColoredCanvasObject);
|
408
454
|
|
409
|
-
var
|
410
|
-
function
|
455
|
+
var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
456
|
+
function Polygon(_ref) {
|
411
457
|
var _this;
|
412
458
|
var id = _ref.id,
|
413
|
-
|
414
|
-
y = _ref.y,
|
415
|
-
width = _ref.width,
|
416
|
-
height = _ref.height,
|
459
|
+
points = _ref.points,
|
417
460
|
fill = _ref.fill,
|
418
461
|
stroke = _ref.stroke,
|
419
462
|
zIndex = _ref.zIndex,
|
420
463
|
draggable = _ref.draggable;
|
421
|
-
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
422
|
-
_this.
|
423
|
-
_this.height = height;
|
464
|
+
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
|
465
|
+
_this.points = points;
|
424
466
|
return _this;
|
425
467
|
}
|
426
|
-
_inheritsLoose(
|
427
|
-
return _createClass(
|
468
|
+
_inheritsLoose(Polygon, _ColoredCanvasObject);
|
469
|
+
return _createClass(Polygon, [{
|
428
470
|
key: "constructorName",
|
429
471
|
get: function get() {
|
430
|
-
return '
|
472
|
+
return 'Polygon';
|
431
473
|
}
|
432
474
|
}]);
|
433
475
|
}(ColoredCanvasObject);
|
434
476
|
|
435
|
-
var
|
436
|
-
function
|
477
|
+
var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
478
|
+
function Rect(_ref) {
|
437
479
|
var _this;
|
438
480
|
var id = _ref.id,
|
439
|
-
|
481
|
+
x = _ref.x,
|
482
|
+
y = _ref.y,
|
483
|
+
width = _ref.width,
|
484
|
+
height = _ref.height,
|
440
485
|
fill = _ref.fill,
|
441
486
|
stroke = _ref.stroke,
|
442
487
|
zIndex = _ref.zIndex,
|
443
488
|
draggable = _ref.draggable;
|
444
|
-
_this = _ColoredCanvasObject.call(this, id,
|
445
|
-
_this.
|
489
|
+
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
|
490
|
+
_this.width = width;
|
491
|
+
_this.height = height;
|
446
492
|
return _this;
|
447
493
|
}
|
448
|
-
_inheritsLoose(
|
449
|
-
return _createClass(
|
494
|
+
_inheritsLoose(Rect, _ColoredCanvasObject);
|
495
|
+
return _createClass(Rect, [{
|
450
496
|
key: "constructorName",
|
451
497
|
get: function get() {
|
452
|
-
return '
|
498
|
+
return 'Rect';
|
453
499
|
}
|
454
500
|
}]);
|
455
501
|
}(ColoredCanvasObject);
|
@@ -479,16 +525,55 @@ function renderImage(context, element, left, top, localTileSize) {
|
|
479
525
|
}
|
480
526
|
}
|
481
527
|
|
482
|
-
function
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
528
|
+
function renderLinePath(context, element, left, top, localTileSize) {
|
529
|
+
var defaultLineWidth = context.lineWidth;
|
530
|
+
var points = element.points.map(function (p) {
|
531
|
+
return {
|
532
|
+
x: left + p.x * localTileSize,
|
533
|
+
y: top + p.y * localTileSize
|
534
|
+
};
|
535
|
+
});
|
536
|
+
if (points.length < 2) return;
|
537
|
+
context.beginPath();
|
538
|
+
context.moveTo(points[0].x, points[0].y);
|
539
|
+
if (element.smoothCorners) {
|
540
|
+
for (var i = 1; i < points.length - 1; i++) {
|
541
|
+
var prev = points[i - 1];
|
542
|
+
var curr = points[i];
|
543
|
+
var next = points[i + 1];
|
544
|
+
var dx1 = curr.x - prev.x;
|
545
|
+
var dy1 = curr.y - prev.y;
|
546
|
+
var dx2 = next.x - curr.x;
|
547
|
+
var dy2 = next.y - curr.y;
|
548
|
+
var len1 = Math.hypot(dx1, dy1);
|
549
|
+
var len2 = Math.hypot(dx2, dy2);
|
550
|
+
var offset1X = dx1 / len1 * element.smoothCornersRadius;
|
551
|
+
var offset1Y = dy1 / len1 * element.smoothCornersRadius;
|
552
|
+
var offset2X = dx2 / len2 * element.smoothCornersRadius;
|
553
|
+
var offset2Y = dy2 / len2 * element.smoothCornersRadius;
|
554
|
+
var cornerStart = {
|
555
|
+
x: curr.x - offset1X,
|
556
|
+
y: curr.y - offset1Y
|
557
|
+
};
|
558
|
+
var cornerEnd = {
|
559
|
+
x: curr.x + offset2X,
|
560
|
+
y: curr.y + offset2Y
|
561
|
+
};
|
562
|
+
context.lineTo(cornerStart.x, cornerStart.y);
|
563
|
+
context.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);
|
564
|
+
}
|
565
|
+
context.lineTo(points[points.length - 1].x, points[points.length - 1].y);
|
566
|
+
} else {
|
567
|
+
for (var _i = 1; _i < points.length; _i++) {
|
568
|
+
context.lineTo(points[_i].x, points[_i].y);
|
569
|
+
}
|
488
570
|
}
|
571
|
+
context.lineWidth = element.lineWidth;
|
572
|
+
context.stroke();
|
573
|
+
context.lineWidth = defaultLineWidth;
|
489
574
|
}
|
490
575
|
|
491
|
-
function
|
576
|
+
function renderPolygon(context, element, left, top, localTileSize) {
|
492
577
|
context.beginPath();
|
493
578
|
context.moveTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
494
579
|
for (var i = 0; i < element.points.length; i++) {
|
@@ -503,10 +588,21 @@ function renderRect$1(context, element, left, top, localTileSize) {
|
|
503
588
|
}
|
504
589
|
}
|
505
590
|
|
591
|
+
function renderRect(context, element, left, top, localTileSize) {
|
592
|
+
if (element.fill) {
|
593
|
+
context.fillRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
594
|
+
}
|
595
|
+
if (element.stroke) {
|
596
|
+
context.strokeRect(left + element.x * localTileSize, top + element.y * localTileSize, element.width * localTileSize, element.height * localTileSize);
|
597
|
+
}
|
598
|
+
}
|
599
|
+
|
506
600
|
var _renderFn;
|
507
|
-
var renderFn = (_renderFn = {}, _renderFn[new Circle({}).constructorName] = renderCircle, _renderFn[new CanvasImage({}).constructorName] = renderImage, _renderFn[new
|
601
|
+
var renderFn = (_renderFn = {}, _renderFn[new Circle({}).constructorName] = renderCircle, _renderFn[new CanvasImage({}).constructorName] = renderImage, _renderFn[new LinePath({
|
602
|
+
points: [{}]
|
603
|
+
}).constructorName] = renderLinePath, _renderFn[new Polygon({
|
508
604
|
points: [{}]
|
509
|
-
}).constructorName] = renderRect
|
605
|
+
}).constructorName] = renderPolygon, _renderFn[new Rect({}).constructorName] = renderRect, _renderFn);
|
510
606
|
function renderCanvas(context, width, height, elements, tileSize, state) {
|
511
607
|
var left = state.left + state.deltaLeft;
|
512
608
|
var top = state.top + state.deltaTop;
|
@@ -655,7 +751,7 @@ function Canvas2D(_ref) {
|
|
655
751
|
return function () {
|
656
752
|
shouldRender = false;
|
657
753
|
};
|
658
|
-
}, [state.context, onFrame]);
|
754
|
+
}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
|
659
755
|
return /*#__PURE__*/React.createElement("canvas", _extends({
|
660
756
|
ref: canvasRef,
|
661
757
|
width: width,
|
@@ -695,14 +791,20 @@ function useKeyboard() {
|
|
695
791
|
keyboard = _useState[0],
|
696
792
|
setKeyboard = _useState[1];
|
697
793
|
useEffect(function () {
|
698
|
-
|
794
|
+
var keydown = function keydown(e) {
|
699
795
|
keyboard[e.key] = true;
|
700
796
|
setKeyboard(JSON.parse(JSON.stringify(keyboard)));
|
701
|
-
}
|
702
|
-
document.addEventListener('
|
797
|
+
};
|
798
|
+
document.addEventListener('keydown', keydown);
|
799
|
+
var keyup = function keyup(e) {
|
703
800
|
keyboard[e.key] = false;
|
704
801
|
setKeyboard(JSON.parse(JSON.stringify(keyboard)));
|
705
|
-
}
|
802
|
+
};
|
803
|
+
document.addEventListener('keyup', keyup);
|
804
|
+
return function () {
|
805
|
+
document.removeEventListener('keydown', keydown);
|
806
|
+
document.removeEventListener('keyup', keyup);
|
807
|
+
};
|
706
808
|
}, []);
|
707
809
|
return keyboard;
|
708
810
|
}
|
@@ -774,5 +876,5 @@ function useWindowDimensions() {
|
|
774
876
|
return windowDimensions;
|
775
877
|
}
|
776
878
|
|
777
|
-
export { Canvas2D, CanvasImage, CanvasObject, Circle, Polygon, Rect, preloadImages, useGamepad, useKeyboard, useMousePosition, useWindowDimensions };
|
879
|
+
export { Canvas2D, CanvasImage, CanvasObject, Circle, LinePath, Polygon, Rect, preloadImages, useGamepad, useKeyboard, useMousePosition, useWindowDimensions };
|
778
880
|
//# sourceMappingURL=index.modern.js.map
|