canvas2d-wrapper 1.12.0 → 1.13.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # canvas2d-wrapper
2
2
 
3
- > A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.
3
+ > A React Wrapper to draw on an HTML5 canvas with mouse move and zoom abilities.
4
4
 
5
5
  [![NPM](https://img.shields.io/npm/v/canvas2d-wrapper.svg)](https://www.npmjs.com/package/canvas2d-wrapper)
6
6
  [![Reliability Rating](https://sonar.dysnomia.studio/api/project_badges/measure?project=canvas2d-wrapper&metric=reliability_rating)](https://sonar.dysnomia.studio/dashboard?id=canvas2d-wrapper) [![Maintainability Rating](https://sonar.dysnomia.studio/api/project_badges/measure?project=canvas2d-wrapper&metric=sqale_rating)](https://sonar.dysnomia.studio/dashboard?id=canvas2d-wrapper) [![Security Rating](https://sonar.dysnomia.studio/api/project_badges/measure?project=canvas2d-wrapper&metric=security_rating)](https://sonar.dysnomia.studio/dashboard?id=canvas2d-wrapper)
@@ -181,7 +181,7 @@ declare module "canvas2d-wrapper" {
181
181
  export function preloadImages(images: string[]): void;
182
182
 
183
183
  // Hooks
184
- export function useGamepad(): { [id: string]: string };
184
+ export function useGamepad(): Gamepad;
185
185
  export function useKeyboard(): { [id: string]: string };
186
186
  export function useMousePosition(): {
187
187
  x: number | null,
@@ -191,4 +191,91 @@ declare module "canvas2d-wrapper" {
191
191
  width: number,
192
192
  height: number,
193
193
  };
194
+
195
+
196
+
197
+ // Gamepad
198
+ /**
199
+ * Represents a single gamepad device.
200
+ */
201
+ interface Gamepad {
202
+ /** Unique identifier for the controller (usually the model name). */
203
+ readonly id: string;
204
+
205
+ /** Index of the gamepad in the array returned by getGamepads(). */
206
+ readonly index: number;
207
+
208
+ /** True if the gamepad is currently connected. */
209
+ readonly connected: boolean;
210
+
211
+ /** Timestamp (in milliseconds) of the last update. */
212
+ readonly timestamp: number;
213
+
214
+ /** Mapping type – typically "standard" or an empty string for custom layouts. */
215
+ readonly mapping: string;
216
+
217
+ /** Array of button states (pressed, touched, value). */
218
+ readonly buttons: readonly GamepadButton[];
219
+
220
+ /** Array of axis values ranging from -1.0 to +1.0. */
221
+ readonly axes: readonly number[];
222
+
223
+ /** Optional pose information (e.g., for VR controllers). */
224
+ readonly pose?: GamepadPose | null;
225
+
226
+ /** Optional haptic actuators (vibration). */
227
+ readonly hapticActuators?: readonly GamepadHapticActuator[] | null;
228
+ }
229
+
230
+ /**
231
+ * Represents a single button on a gamepad.
232
+ */
233
+ interface GamepadButton {
234
+ /** Normalized pressure (0.0–1.0). */
235
+ readonly value: number;
236
+
237
+ /** True if the button is currently pressed. */
238
+ readonly pressed: boolean;
239
+
240
+ /** True if the button is being touched (may be same as pressed). */
241
+ readonly touched: boolean;
242
+ }
243
+
244
+ /**
245
+ * Pose information for motion‑tracking controllers.
246
+ */
247
+ interface GamepadPose {
248
+ /** Position vector `[x, y, z]` in meters (if available). */
249
+ readonly position?: readonly number[] | null;
250
+
251
+ /** Linear velocity `[vx, vy, vz]` in m/s (if available). */
252
+ readonly linearVelocity?: readonly number[] | null;
253
+
254
+ /** Linear acceleration `[ax, ay, az]` in m/s² (if available). */
255
+ readonly linearAcceleration?: readonly number[] | null;
256
+
257
+ /** Orientation quaternion `[x, y, z, w]` (if available). */
258
+ readonly orientation?: readonly number[] | null;
259
+
260
+ /** Angular velocity `[wx, wy, wz]` in rad/s (if available). */
261
+ readonly angularVelocity?: readonly number[] | null;
262
+
263
+ /** Angular acceleration `[αx, αy, αz]` in rad/s² (if available). */
264
+ readonly angularAcceleration?: readonly number[] | null;
265
+
266
+ /** Indicates whether the pose data is reliable. */
267
+ readonly hasOrientation: boolean;
268
+ readonly hasPosition: boolean;
269
+ }
270
+
271
+ /**
272
+ * Haptic actuator for vibration feedback.
273
+ */
274
+ interface GamepadHapticActuator {
275
+ /** The type of actuator (e.g., "vibration"). */
276
+ readonly type: string;
277
+
278
+ /** Duration in milliseconds, strong magnitude (0–1), and optional weak magnitude. */
279
+ pulse(duration: number, strongMagnitude: number, weakMagnitude?: number): Promise<boolean>;
280
+ }
194
281
  }
package/dist/index.js CHANGED
@@ -251,9 +251,25 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
251
251
  return validElements[validElements.length - 1];
252
252
  }
253
253
 
254
+ function computeEventPositions(props, event, tileSize) {
255
+ var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
256
+ var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
257
+ var posOnMap = {
258
+ x: Math.floor(left / tileSize / props.zoom),
259
+ y: Math.floor(top / tileSize / props.zoom)
260
+ };
261
+ return {
262
+ left: left,
263
+ top: top,
264
+ posOnMap: posOnMap
265
+ };
266
+ }
267
+
254
268
  function elementClick(e, elements, tileSize, state) {
255
- var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
256
- var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
269
+ var _computeEventPosition = computeEventPositions(state, e, tileSize),
270
+ left = _computeEventPosition.left,
271
+ top = _computeEventPosition.top,
272
+ posOnMap = _computeEventPosition.posOnMap;
257
273
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
258
274
  if (clickedElement !== null) {
259
275
  return clickedElement;
@@ -262,10 +278,7 @@ function elementClick(e, elements, tileSize, state) {
262
278
  id: null,
263
279
  element: null,
264
280
  originalEvent: e,
265
- posOnMap: {
266
- x: Math.floor(left / tileSize / state.zoom),
267
- y: Math.floor(top / tileSize / state.zoom)
268
- }
281
+ posOnMap: posOnMap
269
282
  };
270
283
  }
271
284
 
@@ -293,8 +306,10 @@ var unselectTimeoutId = 0;
293
306
  var UNSELECT_TIMEOUT_MS = 300;
294
307
  function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
295
308
  var newProps = _extends({}, props);
296
- var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
297
- var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
309
+ var _computeEventPosition = computeEventPositions(props, event, tileSize),
310
+ left = _computeEventPosition.left,
311
+ top = _computeEventPosition.top,
312
+ posOnMap = _computeEventPosition.posOnMap;
298
313
  if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
299
314
  var moved = false;
300
315
  if (dragObjects) {
@@ -309,7 +324,7 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
309
324
  onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
310
325
  }
311
326
  if (onHover) {
312
- onHover(null);
327
+ onHover(null, posOnMap);
313
328
  }
314
329
  }
315
330
  }
@@ -332,10 +347,7 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
332
347
  }
333
348
  } else {
334
349
  if (onHover) {
335
- onHover(collideElement(event, elements, left, top, tileSize, props.zoom), {
336
- x: left,
337
- y: top
338
- });
350
+ onHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);
339
351
  }
340
352
  selectedObject = null;
341
353
  }
@@ -861,7 +873,7 @@ function Canvas2D(_ref) {
861
873
  }
862
874
  if (showMinimap && state.minimapContext) {
863
875
  var filteredElementsList = sortedElements.filter(minimapFilter);
864
- var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);
876
+ var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);
865
877
  renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
866
878
  left: minimapWidth / 2,
867
879
  top: minimapHeight / 2,
@@ -877,6 +889,16 @@ function Canvas2D(_ref) {
877
889
  shouldRender = false;
878
890
  };
879
891
  }, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
892
+ React.useEffect(function () {
893
+ setState(function (s) {
894
+ return _extends({}, s, {
895
+ left: width / 2,
896
+ top: height / 2,
897
+ width: width,
898
+ height: height
899
+ });
900
+ });
901
+ }, [width, height]);
880
902
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("canvas", _extends({
881
903
  ref: canvasRef,
882
904
  width: width,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from \"./inCircle\";\r\n\r\nexport default function onLinePath(element, left, top, localTileSize) {\r\n\tconst radius = element.lineWidth;\r\n\r\n\t// Starting point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[0].x * localTileSize,\r\n\t\telement.points[0].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Ending point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[element.points.length - 1].x * localTileSize,\r\n\t\telement.points[element.points.length - 1].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\t// Line collision\r\n\tfor (let i = 1; i < element.points.length; i++) {\r\n\t\tconst from = {\r\n\t\t\tx: element.points[i - 1].x * localTileSize,\r\n\t\t\ty: element.points[i - 1].y * localTileSize\r\n\t\t};\r\n\r\n\t\tconst to = {\r\n\t\t\tx: element.points[i].x * localTileSize,\r\n\t\t\ty: element.points[i].y * localTileSize\r\n\t\t};\r\n\r\n\t\t// Line length\r\n\t\tconst diffX = from.x - to.x;\r\n\t\tconst diffY = from.y - to.y;\r\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\r\n\r\n\t\t// Dot product of the line and Circle\r\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\r\n\t\t\r\n\t\t// Closest point on the line\r\n\t\tconst point = {\r\n\t\t\tx: from.x + (dot * (to.x - from.x)),\r\n\t\t\ty: from.y + (dot * (to.y - from.y)),\r\n\t\t};\r\n\r\n\t\tif (inCircle(\r\n\t\t\t{ radius }, \r\n\t\t\tpoint.x,\r\n\t\t\tpoint.y,\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\tlocalTileSize\r\n\t\t)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Curves collision\r\n\t// TODO, since not needed for now\r\n\r\n\treturn false;\r\n}\r\n","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\nimport onLinePath from './onLinePath';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (!element.hasCollisions) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'LinePath': \r\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[validElements.length - 1];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
@@ -248,9 +248,25 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
248
248
  return validElements[validElements.length - 1];
249
249
  }
250
250
 
251
+ function computeEventPositions(props, event, tileSize) {
252
+ var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
253
+ var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
254
+ var posOnMap = {
255
+ x: Math.floor(left / tileSize / props.zoom),
256
+ y: Math.floor(top / tileSize / props.zoom)
257
+ };
258
+ return {
259
+ left: left,
260
+ top: top,
261
+ posOnMap: posOnMap
262
+ };
263
+ }
264
+
251
265
  function elementClick(e, elements, tileSize, state) {
252
- var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
253
- var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
266
+ var _computeEventPosition = computeEventPositions(state, e, tileSize),
267
+ left = _computeEventPosition.left,
268
+ top = _computeEventPosition.top,
269
+ posOnMap = _computeEventPosition.posOnMap;
254
270
  var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
255
271
  if (clickedElement !== null) {
256
272
  return clickedElement;
@@ -259,10 +275,7 @@ function elementClick(e, elements, tileSize, state) {
259
275
  id: null,
260
276
  element: null,
261
277
  originalEvent: e,
262
- posOnMap: {
263
- x: Math.floor(left / tileSize / state.zoom),
264
- y: Math.floor(top / tileSize / state.zoom)
265
- }
278
+ posOnMap: posOnMap
266
279
  };
267
280
  }
268
281
 
@@ -290,8 +303,10 @@ var unselectTimeoutId = 0;
290
303
  var UNSELECT_TIMEOUT_MS = 300;
291
304
  function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
292
305
  var newProps = _extends({}, props);
293
- var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
294
- var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
306
+ var _computeEventPosition = computeEventPositions(props, event, tileSize),
307
+ left = _computeEventPosition.left,
308
+ top = _computeEventPosition.top,
309
+ posOnMap = _computeEventPosition.posOnMap;
295
310
  if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
296
311
  var moved = false;
297
312
  if (dragObjects) {
@@ -306,7 +321,7 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
306
321
  onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
307
322
  }
308
323
  if (onHover) {
309
- onHover(null);
324
+ onHover(null, posOnMap);
310
325
  }
311
326
  }
312
327
  }
@@ -329,10 +344,7 @@ function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYA
329
344
  }
330
345
  } else {
331
346
  if (onHover) {
332
- onHover(collideElement(event, elements, left, top, tileSize, props.zoom), {
333
- x: left,
334
- y: top
335
- });
347
+ onHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);
336
348
  }
337
349
  selectedObject = null;
338
350
  }
@@ -858,7 +870,7 @@ function Canvas2D(_ref) {
858
870
  }
859
871
  if (showMinimap && state.minimapContext) {
860
872
  var filteredElementsList = sortedElements.filter(minimapFilter);
861
- var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);
873
+ var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);
862
874
  renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
863
875
  left: minimapWidth / 2,
864
876
  top: minimapHeight / 2,
@@ -874,6 +886,16 @@ function Canvas2D(_ref) {
874
886
  shouldRender = false;
875
887
  };
876
888
  }, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
889
+ useEffect(function () {
890
+ setState(function (s) {
891
+ return _extends({}, s, {
892
+ left: width / 2,
893
+ top: height / 2,
894
+ width: width,
895
+ height: height
896
+ });
897
+ });
898
+ }, [width, height]);
877
899
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("canvas", _extends({
878
900
  ref: canvasRef,
879
901
  width: width,
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from \"./inCircle\";\r\n\r\nexport default function onLinePath(element, left, top, localTileSize) {\r\n\tconst radius = element.lineWidth;\r\n\r\n\t// Starting point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[0].x * localTileSize,\r\n\t\telement.points[0].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t// Ending point in Circle\r\n\tif (inCircle(\r\n\t\t{ radius }, \r\n\t\telement.points[element.points.length - 1].x * localTileSize,\r\n\t\telement.points[element.points.length - 1].y * localTileSize,\r\n\t\tleft,\r\n\t\ttop,\r\n\t\tlocalTileSize\r\n\t)) {\r\n\t\treturn true;\r\n\t}\r\n\r\n\r\n\r\n\t// Line collision\r\n\tfor (let i = 1; i < element.points.length; i++) {\r\n\t\tconst from = {\r\n\t\t\tx: element.points[i - 1].x * localTileSize,\r\n\t\t\ty: element.points[i - 1].y * localTileSize\r\n\t\t};\r\n\r\n\t\tconst to = {\r\n\t\t\tx: element.points[i].x * localTileSize,\r\n\t\t\ty: element.points[i].y * localTileSize\r\n\t\t};\r\n\r\n\t\t// Line length\r\n\t\tconst diffX = from.x - to.x;\r\n\t\tconst diffY = from.y - to.y;\r\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\r\n\r\n\t\t// Dot product of the line and Circle\r\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\r\n\t\t\r\n\t\t// Closest point on the line\r\n\t\tconst point = {\r\n\t\t\tx: from.x + (dot * (to.x - from.x)),\r\n\t\t\ty: from.y + (dot * (to.y - from.y)),\r\n\t\t};\r\n\r\n\t\tif (inCircle(\r\n\t\t\t{ radius }, \r\n\t\t\tpoint.x,\r\n\t\t\tpoint.y,\r\n\t\t\tleft,\r\n\t\t\ttop,\r\n\t\t\tlocalTileSize\r\n\t\t)) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t}\r\n\r\n\t// Curves collision\r\n\t// TODO, since not needed for now\r\n\r\n\treturn false;\r\n}\r\n","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\nimport onLinePath from './onLinePath';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (!element.hasCollisions) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'LinePath': \r\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/computeEventPositions.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\n\nexport default function onLinePath(element, left, top, localTileSize) {\n\tconst radius = element.lineWidth;\n\n\t// Starting point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[0].x * localTileSize,\n\t\telement.points[0].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\t// Ending point in Circle\n\tif (inCircle(\n\t\t{ radius },\n\t\telement.points[element.points.length - 1].x * localTileSize,\n\t\telement.points[element.points.length - 1].y * localTileSize,\n\t\tleft,\n\t\ttop,\n\t\tlocalTileSize\n\t)) {\n\t\treturn true;\n\t}\n\n\n\t// Line collision\n\tfor (let i = 1; i < element.points.length; i++) {\n\t\tconst from = {\n\t\t\tx: element.points[i - 1].x * localTileSize,\n\t\t\ty: element.points[i - 1].y * localTileSize\n\t\t};\n\n\t\tconst to = {\n\t\t\tx: element.points[i].x * localTileSize,\n\t\t\ty: element.points[i].y * localTileSize\n\t\t};\n\n\t\t// Line length\n\t\tconst diffX = from.x - to.x;\n\t\tconst diffY = from.y - to.y;\n\t\tconst length = Math.sqrt((diffX * diffX) + (diffY * diffY));\n\n\t\t// Dot product of the line and Circle\n\t\tconst dot = (((left - from.x) * (to.x - from.x)) + ((top - from.y) * (to.y - from.y))) / Math.pow(length, 2);\n\n\t\t// Closest point on the line\n\t\tconst point = {\n\t\t\tx: from.x + (dot * (to.x - from.x)),\n\t\t\ty: from.y + (dot * (to.y - from.y)),\n\t\t};\n\n\t\tif (inCircle(\n\t\t\t{ radius },\n\t\t\tpoint.x,\n\t\t\tpoint.y,\n\t\t\tleft,\n\t\t\ttop,\n\t\t\tlocalTileSize\n\t\t)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Curves collision\n\t// TODO, since not needed for now\n\n\treturn false;\n}\n","import calcTileSize from '../functions/calcTileSize';\n\nimport inCircle from './inCircle';\nimport inPoly from './inPoly';\nimport inRect from './inRect';\nimport onLinePath from './onLinePath';\n\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\n\tconst localTileSize = calcTileSize(tileSize, zoom);\n\n\tconst validElements = [];\n\n\tfor (const element of elements) {\n\t\tif (!element.hasCollisions) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst x = element.x * localTileSize;\n\t\tconst y = element.y * localTileSize;\n\n\t\tswitch (element.constructorName) {\n\t\t\tcase 'Rect':\n\t\t\tcase 'CanvasImage':\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Circle':\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Polygon':\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'LinePath':\n\t\t\t\tif (onLinePath(element, left, top, localTileSize)) {\n\t\t\t\t\tvalidElements.push({\n\t\t\t\t\t\tid: element.id,\n\t\t\t\t\t\telement,\n\t\t\t\t\t\toriginalEvent: e,\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (validElements.length === 0) {\n\t\treturn null;\n\t}\n\n\tif (validElements.length === 1) {\n\t\treturn validElements[0];\n\t}\n\n\tvalidElements.sort((a, b) => {\n\t\tif (a.zIndex > b.zIndex) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.zIndex < b.zIndex) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif (a.id > b.id) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (a.id < b.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn validElements[validElements.length - 1];\n}","export default function computeEventPositions(props, event, tileSize) {\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\tconst posOnMap = { x: Math.floor(left / tileSize / props.zoom), y: Math.floor(top / tileSize / props.zoom) };\r\n\r\n\treturn { left, top, posOnMap };\r\n}","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(state, e, tileSize);\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap\n\t};\n}\n","import collideElement from '../collisions/collideElement';\n\nexport default function elementRightClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\n\t};\n}\n","import collideElement from '../collisions/collideElement';\nimport computeEventPositions from './computeEventPositions';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst {\n\t\tleft,\n\t\ttop,\n\t\tposOnMap\n\t} = computeEventPositions(props, event, tileSize);\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null, posOnMap);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\n\tconst elementsX = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.x * tileSize);\n\t\t}\n\n\t\treturn [e.x * tileSize];\n\t}).flat();\n\tconst minX = Math.min(...elementsX);\n\tconst maxX = Math.max(...elementsX);\n\twidth = Math.max(2 * maxX, -2 * minX, width);\n\n\tconst elementsY = elements.map((e) => {\n\t\tif (Array.isArray(e.points)) {\n\t\t\treturn e.points.map(p => p.y * tileSize);\n\t\t}\n\n\t\treturn [e.y * tileSize];\n\t}).flat();\n\tconst minY = Math.min(...elementsY);\n\tconst maxY = Math.max(...elementsY);\n\theight = Math.max(2 * maxY, -2 * minY, height);\n\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\n\n\treturn ratio;\n}\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable, hasCollisions) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t\tthis.hasCollisions = hasCollisions;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {\n\t\tsuper(id, x, y, zIndex, draggable, hasCollisions);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class LinePath extends ColoredCanvasObject {\n\t/**\n\t * Represents a Line Path that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions);\n\n\t\tthis.points = points;\n\t\tthis.lineWidth = lineWidth;\n\t\tthis.smoothCorners = smoothCorners;\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'LinePath';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t * @param {boolean} \thasCollisions \tDoes the object have collisions ?\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable, hasCollisions }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable, hasCollisions);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.arc(\n\t\tleft + element.x * localTileSize,\n\t\ttop + element.y * localTileSize,\n\t\telement.radius * localTileSize,\n\t\t0,\n\t\t2 * Math.PI\n\t);\n\n\tif(element.fill) {\n\t\tcontext.fill();\n\t}\n\tif(element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\n\tcontext,\n\telement,\n\tleft,\n\ttop,\n\tlocalTileSize\n) {\n\tconst defaultLineWidth = context.lineWidth;\n\tconst points = element.points.map((p) => ({\n\t\tx: left + p.x * localTileSize,\n\t\ty: top + p.y * localTileSize,\n\t}));\n\n\tif (points.length < 2) return;\n\n\tcontext.beginPath();\n\tcontext.moveTo(points[0].x, points[0].y);\n\n\tif (element.smoothCorners) {\n\t\tfor (let i = 1; i < points.length - 1; i++) {\n\t\t\tconst prev = points[i - 1];\n\t\t\tconst curr = points[i];\n\t\t\tconst next = points[i + 1];\n\n\t\t\t// Direction vectors\n\t\t\tconst dx1 = curr.x - prev.x;\n\t\t\tconst dy1 = curr.y - prev.y;\n\t\t\tconst dx2 = next.x - curr.x;\n\t\t\tconst dy2 = next.y - curr.y;\n\n\t\t\t// Lengths\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\n\n\t\t\t// Offsets for corner rounding\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\n\n\t\t\tconst cornerStart = {\n\t\t\t\tx: curr.x - offset1X,\n\t\t\t\ty: curr.y - offset1Y,\n\t\t\t};\n\t\t\tconst cornerEnd = {\n\t\t\t\tx: curr.x + offset2X,\n\t\t\t\ty: curr.y + offset2Y,\n\t\t\t};\n\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\n\t\t}\n\n\t\t// Final segment\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\n\t} else {\n\t\t// Straight line version\n\t\tfor (let i = 1; i < points.length; i++) {\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\n\t\t}\n\t}\n\n\tcontext.lineWidth = element.lineWidth * localTileSize;\n\tcontext.stroke();\n\tcontext.lineWidth = defaultLineWidth;\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\n\tcontext.beginPath();\n\n\tcontext.moveTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tfor (let i = 0; i < element.points.length; i++) {\n\t\tcontext.lineTo(\n\t\t\tleft + element.points[i].x * localTileSize,\n\t\t\ttop + element.points[i].y * localTileSize,\n\t\t);\n\t}\n\n\tcontext.lineTo(\n\t\tleft + element.points[0].x * localTileSize,\n\t\ttop + element.points[0].y * localTileSize,\n\t);\n\n\tif (element.fill) {\n\t\tcontext.fill();\n\t}\n\tif (element.stroke) {\n\t\tcontext.stroke();\n\t}\n}\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\nimport Circle from '../shapes/Circle';\nimport LinePath from '../shapes/LinePath';\nimport Polygon from '../shapes/Polygon';\nimport Rect from '../shapes/Rect';\n\nimport calcTileSize from '../functions/calcTileSize';\n\nimport renderCircle from './renderCircle';\nimport renderImage from './renderImage';\nimport renderLinePath from './renderLinePath';\nimport renderPolygon from './renderPolygon';\nimport renderRect from './renderRect';\n\nconst renderFn = {\n\t[(new Circle({})).constructorName]: renderCircle,\n\t[(new CanvasImage({})).constructorName]: renderImage,\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\n\t[(new Rect({})).constructorName]: renderRect,\n};\n\nexport default function renderCanvas(\n\tcontext,\n\twidth,\n\theight,\n\telements,\n\ttileSize,\n\tstate,\n) {\n\tconst left = state.left + state.deltaLeft;\n\tconst top = state.top + state.deltaTop;\n\n\tlet prevFillStyle = '';\n\tlet prevStrokeStyle = '';\n\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\n\n\tcontext.clearRect(0, 0, width, height);\n\n\tfor (const element of elements) {\n\t\tif (\n\t\t\telement.fill !== prevFillStyle &&\n\t\t\ttypeof element.fill !== 'undefined'\n\t\t) {\n\t\t\tcontext.fillStyle = element.fill;\n\t\t\tprevFillStyle = element.fill;\n\t\t}\n\n\t\tif (\n\t\t\telement.stroke !== prevStrokeStyle &&\n\t\t\ttypeof element.stroke !== 'undefined'\n\t\t) {\n\t\t\tcontext.strokeStyle = element.stroke;\n\t\t\tprevStrokeStyle = element.stroke;\n\t\t}\n\n\t\tconst type = element.constructorName;\n\t\tif (renderFn[type]) {\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\n\t\t} else {\n\t\t\tthrow new Error('Unsupported shape type:' + type);\n\t\t}\n\t}\n}\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport './index.css';\n\nimport elementClick from './events/elementClick';\nimport elementRightClick from './events/elementRightClick';\nimport mouseMove from './events/mouseMove';\nimport mouseWheel from './events/mouseWheel';\n\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\nimport sortElements from './functions/sortElements';\n\nimport renderCanvas from './render/renderCanvas';\n\nconst elements = {};\n\nexport default function Canvas2D({\n\twidth,\n\theight,\n\ttrackMouseMove = true,\n\tminZoom = 1,\n\tmaxZoom = 1,\n\ttileSize = 1,\n\tonClick,\n\tonRightClick,\n\tonHover,\n\tonElementMoved,\n\tonWheel,\n\tonFrame,\n\tlockXAxis = false,\n\tlockYAxis = false,\n\tsmoothingQuality = 'medium',\n\tdragObjects = false,\n\tdeltaLeft = 0,\n\tdeltaTop = 0,\n\tshowMinimap = false,\n\tminimapWidth = 240,\n\tminimapHeight = 120,\n\tminimapFilter = (e) => true,\n\t...otherProps\n}) {\n\tif (!elements[otherProps.id]) {\n\t\telements[otherProps.id] = [];\n\t}\n\n\t// Hooks\n\tconst [state, setState] = useState({});\n\tconst canvasRef = useCallback((canvas) => {\n\t\tif (canvas !== null) {\n\t\t\tconst context = canvas.getContext('2d');\n\n\t\t\tif (smoothingQuality === false) {\n\t\t\t\tcontext.imageSmoothingEnabled = false;\n\t\t\t} else {\n\t\t\t\tcontext.imageSmoothingEnabled = true;\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\n\t\t\t}\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\n\t\t\t\tcanvas,\n\t\t\t\tcontext,\n\t\t\t\tleft: width / 2,\n\t\t\t\ttop: height / 2,\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\tzoom: 1,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\n\t\tif (minimapCanvas !== null) {\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\n\n\t\t\tsetState((s) => ({\n\t\t\t\t...s,\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\n\t\t\t\tminimapCanvas,\n\t\t\t\tminimapContext,\n\t\t\t}));\n\t\t}\n\t}, []);\n\n\tstate.deltaTop = deltaTop;\n\tstate.deltaLeft = deltaLeft;\n\n\t// Check inputs\n\tif (typeof width !== 'number' || typeof height !== 'number') {\n\t\tthrow new Error('width/height should be specified and be numbers.');\n\t}\n\n\tif (minZoom > maxZoom) {\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\n\t}\n\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\n\t\tthrow new Error('onClick should be a function.');\n\t}\n\n\tif (typeof onFrame !== 'function') {\n\t\tthrow new Error('onFrame should be a function.');\n\t}\n\n\t// Render\n\tlet onMouseMove = null;\n\tif (trackMouseMove) {\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\n\t}\n\n\tconst onWheelFn = (e) => {\n\t\tif (onWheel) {\n\t\t\tonWheel(e);\n\t\t}\n\n\t\tif (minZoom !== maxZoom) {\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\n\t\t}\n\t};\n\n\tlet onClickFn = null;\n\tif (onClick) {\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\n\t}\n\n\n\t// Right click Event\n\tuseEffect(() => {\n\t\tfunction onRightClickEvent(e) {\n\t\t\te.preventDefault();\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\n\t\t}\n\n\t\tif (onRightClick && state.canvas) {\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\n\t\t}\n\t}, [state.canvas, onRightClick]);\n\n\t// Canvas render loop\n\tuseEffect(() => {\n\t\tlet shouldRender = true;\n\t\tfunction render() {\n\t\t\tif (!shouldRender) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\telements[otherProps.id] = onFrame();\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\n\n\t\t\tif (state.context) {\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.context,\n\t\t\t\t\twidth,\n\t\t\t\t\theight,\n\t\t\t\t\tsortedElements,\n\t\t\t\t\ttileSize,\n\t\t\t\t\tstate,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (showMinimap && state.minimapContext) {\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);\n\n\t\t\t\trenderCanvas(\n\t\t\t\t\tstate.minimapContext,\n\t\t\t\t\tminimapWidth,\n\t\t\t\t\tminimapHeight,\n\t\t\t\t\tfilteredElementsList,\n\t\t\t\t\ttileSize / ratio,\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\n\t\t\t\t);\n\t\t\t}\n\n\t\t\twindow.requestAnimationFrame(render);\n\t\t}\n\t\twindow.requestAnimationFrame(render);\n\n\t\treturn () => { shouldRender = false; };\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\n\n\t// On width/height change: reset view and setState\n\tuseEffect(() => {\n\t\tsetState((s) => ({\n\t\t\t...s,\n\t\t\tleft: width / 2,\n\t\t\ttop: height / 2,\n\t\t\twidth,\n\t\t\theight,\n\t\t}));\n\t}, [width, height]);\n\n\treturn (\n\t\t<>\n\t\t\t<canvas\n\t\t\t\tref={canvasRef}\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tonPointerMove={onMouseMove}\n\t\t\t\tonWheel={onWheelFn}\n\t\t\t\tonClick={onClickFn}\n\t\t\t\tclassName=\"canvas2d-wrapper\"\n\t\t\t\t{...otherProps}\n\t\t\t/>\n\n\t\t\t{showMinimap && <canvas\n\t\t\t\tref={canvasMapRef}\n\t\t\t\twidth={minimapWidth}\n\t\t\t\theight={minimapHeight}\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\n\t\t\t/>}\n\t\t</>\n\t);\n}\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","onLinePath","lineWidth","from","to","diffX","diffY","Math","sqrt","dot","pow","point","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","hasCollisions","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","computeEventPositions","props","event","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","floor","elementClick","state","_computeEventPosition","clickedElement","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.12.0",
3
+ "version": "1.13.0",
4
4
  "description": "A React Wrapper to use HTML5 canvas with mouse move and zoom abilities.",
5
5
  "author": "Elanis",
6
6
  "license": "MIT",
@@ -27,20 +27,23 @@
27
27
  "react": "^18.0.0 || ^19.0.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@testing-library/jest-dom": "^6.6.3",
30
+ "@eslint/eslintrc": "^3.3.1",
31
+ "@eslint/js": "^9.35.0",
32
+ "@testing-library/jest-dom": "^6.8.0",
31
33
  "@testing-library/react": "^16.3.0",
32
34
  "@testing-library/user-event": "^14.6.1",
33
- "canvas": "^3.1.0",
34
- "cross-env": "^7.0.3",
35
- "eslint": "^8.57.1",
35
+ "canvas": "^3.2.0",
36
+ "cross-env": "^10.0.0",
37
+ "eslint": "^9.35.0",
36
38
  "gh-pages": "^6.3.0",
39
+ "globals": "^16.3.0",
37
40
  "microbundle-crl": "^0.13.11",
38
41
  "npm-run-all": "^4.1.5",
39
42
  "postcss-flexbugs-fixes": "^5.0.2",
40
43
  "postcss-normalize": "^13.0.1",
41
- "postcss-preset-env": "^10.2.0",
42
- "react": "^19.1.0",
43
- "react-dom": "^19.1.0",
44
+ "postcss-preset-env": "^10.3.1",
45
+ "react": "^19.1.1",
46
+ "react-dom": "^19.1.1",
44
47
  "react-scripts": "^5.0.1"
45
48
  },
46
49
  "files": [
@@ -48,10 +51,8 @@
48
51
  "./canvas2d-wrapper.d.ts"
49
52
  ],
50
53
  "dependencies": {
51
- "@babel/eslint-parser": "^7.27.1",
52
54
  "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
53
- "@babel/preset-react": "^7.27.1",
54
- "eslint-config-standard-react": "^13.0.0"
55
+ "@babel/preset-react": "^7.27.1"
55
56
  },
56
57
  "types": "./canvas2d-wrapper.d.ts"
57
58
  }