canvas2d-wrapper 1.11.0 → 1.12.1

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.
@@ -56,7 +56,8 @@ declare module "canvas2d-wrapper" {
56
56
  x: number,
57
57
  y: number,
58
58
  zIndex?: number,
59
- draggable?: boolean
59
+ draggable?: boolean,
60
+ hasCollisions?: boolean
60
61
  );
61
62
 
62
63
  get constructorName(): string;
@@ -69,6 +70,7 @@ declare module "canvas2d-wrapper" {
69
70
  x: number;
70
71
  y: number;
71
72
  draggable: boolean | undefined;
73
+ hasCollisions: boolean | undefined;
72
74
  }
73
75
 
74
76
  export class ColoredCanvasObject extends CanvasObject {
@@ -81,7 +83,8 @@ declare module "canvas2d-wrapper" {
81
83
  fill?: string,
82
84
  stroke?: string,
83
85
  zIndex?: number,
84
- draggable?: boolean
86
+ draggable?: boolean,
87
+ hasCollisions?: boolean
85
88
  );
86
89
 
87
90
  fill: string | undefined;
@@ -98,6 +101,7 @@ declare module "canvas2d-wrapper" {
98
101
  src: string,
99
102
  zIndex?: number,
100
103
  draggable?: boolean,
104
+ hasCollisions?: boolean
101
105
  });
102
106
 
103
107
  crop(sx: number, swidth: number, sheight: number);
@@ -117,6 +121,7 @@ declare module "canvas2d-wrapper" {
117
121
  stroke?: string,
118
122
  zIndex?: number,
119
123
  draggable?: boolean,
124
+ hasCollisions?: boolean
120
125
  });
121
126
 
122
127
  radius: number;
@@ -131,6 +136,7 @@ declare module "canvas2d-wrapper" {
131
136
  zIndex?: number,
132
137
  smoothCorners?: boolean,
133
138
  smoothCornersRadius?: number,
139
+ hasCollisions?: boolean
134
140
  });
135
141
 
136
142
  points: Position2D[];
@@ -147,6 +153,7 @@ declare module "canvas2d-wrapper" {
147
153
  stroke?: string,
148
154
  zIndex?: number,
149
155
  draggable?: boolean,
156
+ hasCollisions?: boolean
150
157
  });
151
158
 
152
159
  points: Position2D[];
@@ -163,6 +170,7 @@ declare module "canvas2d-wrapper" {
163
170
  stroke?: string,
164
171
  zIndex?: number,
165
172
  draggable?: boolean,
173
+ hasCollisions?: boolean
166
174
  });
167
175
 
168
176
  width: number;
@@ -173,7 +181,7 @@ declare module "canvas2d-wrapper" {
173
181
  export function preloadImages(images: string[]): void;
174
182
 
175
183
  // Hooks
176
- export function useGamepad(): { [id: string]: string };
184
+ export function useGamepad(): Gamepad;
177
185
  export function useKeyboard(): { [id: string]: string };
178
186
  export function useMousePosition(): {
179
187
  x: number | null,
@@ -183,4 +191,91 @@ declare module "canvas2d-wrapper" {
183
191
  width: number,
184
192
  height: number,
185
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
+ }
186
281
  }
package/dist/index.js CHANGED
@@ -123,11 +123,52 @@ function inRect(element, x, y, left, top, localTileSize) {
123
123
  return x <= left && left <= x + width && y <= top && top <= y + height;
124
124
  }
125
125
 
126
+ function onLinePath(element, left, top, localTileSize) {
127
+ var radius = element.lineWidth;
128
+ if (inCircle({
129
+ radius: radius
130
+ }, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
131
+ return true;
132
+ }
133
+ if (inCircle({
134
+ radius: radius
135
+ }, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
136
+ return true;
137
+ }
138
+ for (var i = 1; i < element.points.length; i++) {
139
+ var from = {
140
+ x: element.points[i - 1].x * localTileSize,
141
+ y: element.points[i - 1].y * localTileSize
142
+ };
143
+ var to = {
144
+ x: element.points[i].x * localTileSize,
145
+ y: element.points[i].y * localTileSize
146
+ };
147
+ var diffX = from.x - to.x;
148
+ var diffY = from.y - to.y;
149
+ var length = Math.sqrt(diffX * diffX + diffY * diffY);
150
+ var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
151
+ var point = {
152
+ x: from.x + dot * (to.x - from.x),
153
+ y: from.y + dot * (to.y - from.y)
154
+ };
155
+ if (inCircle({
156
+ radius: radius
157
+ }, point.x, point.y, left, top, localTileSize)) {
158
+ return true;
159
+ }
160
+ }
161
+ return false;
162
+ }
163
+
126
164
  function collideElement(e, elements, left, top, tileSize, zoom) {
127
165
  var localTileSize = calcTileSize(tileSize, zoom);
128
166
  var validElements = [];
129
167
  for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
130
168
  var element = _step.value;
169
+ if (!element.hasCollisions) {
170
+ continue;
171
+ }
131
172
  var x = element.x * localTileSize;
132
173
  var y = element.y * localTileSize;
133
174
  switch (element.constructorName) {
@@ -171,6 +212,19 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
171
212
  });
172
213
  }
173
214
  break;
215
+ case 'LinePath':
216
+ if (onLinePath(element, left, top, localTileSize)) {
217
+ validElements.push({
218
+ id: element.id,
219
+ element: element,
220
+ originalEvent: e,
221
+ posOnMap: {
222
+ x: element.x,
223
+ y: element.y
224
+ }
225
+ });
226
+ }
227
+ break;
174
228
  }
175
229
  }
176
230
  if (validElements.length === 0) {
@@ -359,12 +413,13 @@ function sortElements(elements) {
359
413
  }
360
414
 
361
415
  var CanvasObject = /*#__PURE__*/function () {
362
- function CanvasObject(id, x, y, zIndex, draggable) {
416
+ function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
363
417
  this.id = id;
364
418
  this.x = x;
365
419
  this.y = y;
366
420
  this['z-index'] = zIndex;
367
421
  this.draggable = draggable;
422
+ this.hasCollisions = hasCollisions;
368
423
  }
369
424
  return _createClass(CanvasObject, [{
370
425
  key: "zIndex",
@@ -392,8 +447,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
392
447
  height = _ref.height,
393
448
  src = _ref.src,
394
449
  zIndex = _ref.zIndex,
395
- draggable = _ref.draggable;
396
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
450
+ draggable = _ref.draggable,
451
+ hasCollisions = _ref.hasCollisions;
452
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
397
453
  _this.width = width;
398
454
  _this.height = height;
399
455
  _this.src = src;
@@ -416,9 +472,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
416
472
  }(CanvasObject);
417
473
 
418
474
  var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
419
- function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
475
+ function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
420
476
  var _this;
421
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
477
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
422
478
  _this.fill = fill;
423
479
  _this.stroke = stroke;
424
480
  return _this;
@@ -442,8 +498,9 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
442
498
  fill = _ref.fill,
443
499
  stroke = _ref.stroke,
444
500
  zIndex = _ref.zIndex,
445
- draggable = _ref.draggable;
446
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
501
+ draggable = _ref.draggable,
502
+ hasCollisions = _ref.hasCollisions;
503
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
447
504
  _this.radius = radius;
448
505
  return _this;
449
506
  }
@@ -465,8 +522,9 @@ var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
465
522
  stroke = _ref.stroke,
466
523
  zIndex = _ref.zIndex,
467
524
  smoothCorners = _ref.smoothCorners,
468
- smoothCornersRadius = _ref.smoothCornersRadius;
469
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false) || this;
525
+ smoothCornersRadius = _ref.smoothCornersRadius,
526
+ hasCollisions = _ref.hasCollisions;
527
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
470
528
  _this.points = points;
471
529
  _this.lineWidth = lineWidth;
472
530
  _this.smoothCorners = smoothCorners;
@@ -490,8 +548,9 @@ var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
490
548
  fill = _ref.fill,
491
549
  stroke = _ref.stroke,
492
550
  zIndex = _ref.zIndex,
493
- draggable = _ref.draggable;
494
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
551
+ draggable = _ref.draggable,
552
+ hasCollisions = _ref.hasCollisions;
553
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
495
554
  _this.points = points;
496
555
  return _this;
497
556
  }
@@ -515,8 +574,9 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
515
574
  fill = _ref.fill,
516
575
  stroke = _ref.stroke,
517
576
  zIndex = _ref.zIndex,
518
- draggable = _ref.draggable;
519
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
577
+ draggable = _ref.draggable,
578
+ hasCollisions = _ref.hasCollisions;
579
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
520
580
  _this.width = width;
521
581
  _this.height = height;
522
582
  return _this;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","Math","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","lineWidth","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\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}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\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';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function 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 * state.zoom);\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\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","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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"}
@@ -120,11 +120,52 @@ function inRect(element, x, y, left, top, localTileSize) {
120
120
  return x <= left && left <= x + width && y <= top && top <= y + height;
121
121
  }
122
122
 
123
+ function onLinePath(element, left, top, localTileSize) {
124
+ var radius = element.lineWidth;
125
+ if (inCircle({
126
+ radius: radius
127
+ }, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
128
+ return true;
129
+ }
130
+ if (inCircle({
131
+ radius: radius
132
+ }, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
133
+ return true;
134
+ }
135
+ for (var i = 1; i < element.points.length; i++) {
136
+ var from = {
137
+ x: element.points[i - 1].x * localTileSize,
138
+ y: element.points[i - 1].y * localTileSize
139
+ };
140
+ var to = {
141
+ x: element.points[i].x * localTileSize,
142
+ y: element.points[i].y * localTileSize
143
+ };
144
+ var diffX = from.x - to.x;
145
+ var diffY = from.y - to.y;
146
+ var length = Math.sqrt(diffX * diffX + diffY * diffY);
147
+ var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
148
+ var point = {
149
+ x: from.x + dot * (to.x - from.x),
150
+ y: from.y + dot * (to.y - from.y)
151
+ };
152
+ if (inCircle({
153
+ radius: radius
154
+ }, point.x, point.y, left, top, localTileSize)) {
155
+ return true;
156
+ }
157
+ }
158
+ return false;
159
+ }
160
+
123
161
  function collideElement(e, elements, left, top, tileSize, zoom) {
124
162
  var localTileSize = calcTileSize(tileSize, zoom);
125
163
  var validElements = [];
126
164
  for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
127
165
  var element = _step.value;
166
+ if (!element.hasCollisions) {
167
+ continue;
168
+ }
128
169
  var x = element.x * localTileSize;
129
170
  var y = element.y * localTileSize;
130
171
  switch (element.constructorName) {
@@ -168,6 +209,19 @@ function collideElement(e, elements, left, top, tileSize, zoom) {
168
209
  });
169
210
  }
170
211
  break;
212
+ case 'LinePath':
213
+ if (onLinePath(element, left, top, localTileSize)) {
214
+ validElements.push({
215
+ id: element.id,
216
+ element: element,
217
+ originalEvent: e,
218
+ posOnMap: {
219
+ x: element.x,
220
+ y: element.y
221
+ }
222
+ });
223
+ }
224
+ break;
171
225
  }
172
226
  }
173
227
  if (validElements.length === 0) {
@@ -356,12 +410,13 @@ function sortElements(elements) {
356
410
  }
357
411
 
358
412
  var CanvasObject = /*#__PURE__*/function () {
359
- function CanvasObject(id, x, y, zIndex, draggable) {
413
+ function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
360
414
  this.id = id;
361
415
  this.x = x;
362
416
  this.y = y;
363
417
  this['z-index'] = zIndex;
364
418
  this.draggable = draggable;
419
+ this.hasCollisions = hasCollisions;
365
420
  }
366
421
  return _createClass(CanvasObject, [{
367
422
  key: "zIndex",
@@ -389,8 +444,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
389
444
  height = _ref.height,
390
445
  src = _ref.src,
391
446
  zIndex = _ref.zIndex,
392
- draggable = _ref.draggable;
393
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
447
+ draggable = _ref.draggable,
448
+ hasCollisions = _ref.hasCollisions;
449
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
394
450
  _this.width = width;
395
451
  _this.height = height;
396
452
  _this.src = src;
@@ -413,9 +469,9 @@ var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
413
469
  }(CanvasObject);
414
470
 
415
471
  var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
416
- function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable) {
472
+ function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
417
473
  var _this;
418
- _this = _CanvasObject.call(this, id, x, y, zIndex, draggable) || this;
474
+ _this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
419
475
  _this.fill = fill;
420
476
  _this.stroke = stroke;
421
477
  return _this;
@@ -439,8 +495,9 @@ var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
439
495
  fill = _ref.fill,
440
496
  stroke = _ref.stroke,
441
497
  zIndex = _ref.zIndex,
442
- draggable = _ref.draggable;
443
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
498
+ draggable = _ref.draggable,
499
+ hasCollisions = _ref.hasCollisions;
500
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
444
501
  _this.radius = radius;
445
502
  return _this;
446
503
  }
@@ -462,8 +519,9 @@ var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
462
519
  stroke = _ref.stroke,
463
520
  zIndex = _ref.zIndex,
464
521
  smoothCorners = _ref.smoothCorners,
465
- smoothCornersRadius = _ref.smoothCornersRadius;
466
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false) || this;
522
+ smoothCornersRadius = _ref.smoothCornersRadius,
523
+ hasCollisions = _ref.hasCollisions;
524
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
467
525
  _this.points = points;
468
526
  _this.lineWidth = lineWidth;
469
527
  _this.smoothCorners = smoothCorners;
@@ -487,8 +545,9 @@ var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
487
545
  fill = _ref.fill,
488
546
  stroke = _ref.stroke,
489
547
  zIndex = _ref.zIndex,
490
- draggable = _ref.draggable;
491
- _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable) || this;
548
+ draggable = _ref.draggable,
549
+ hasCollisions = _ref.hasCollisions;
550
+ _this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
492
551
  _this.points = points;
493
552
  return _this;
494
553
  }
@@ -512,8 +571,9 @@ var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
512
571
  fill = _ref.fill,
513
572
  stroke = _ref.stroke,
514
573
  zIndex = _ref.zIndex,
515
- draggable = _ref.draggable;
516
- _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable) || this;
574
+ draggable = _ref.draggable,
575
+ hasCollisions = _ref.hasCollisions;
576
+ _this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
517
577
  _this.width = width;
518
578
  _this.height = height;
519
579
  return _this;
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import calcTileSize from '../functions/calcTileSize';\r\n\r\nimport inCircle from './inCircle';\r\nimport inPoly from './inPoly';\r\nimport inRect from './inRect';\r\n\r\nexport default function collideElement(e, elements, left, top, tileSize, zoom) {\r\n\tconst localTileSize = calcTileSize(tileSize, zoom);\r\n\r\n\tconst validElements = [];\r\n\r\n\tfor (const element of elements) {\r\n\t\tconst x = element.x * localTileSize;\r\n\t\tconst y = element.y * localTileSize;\r\n\r\n\t\tswitch (element.constructorName) {\r\n\t\t\tcase 'Rect':\r\n\t\t\tcase 'CanvasImage':\r\n\t\t\t\tif (inRect(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Circle':\r\n\t\t\t\tif (inCircle(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'Polygon':\r\n\t\t\t\tif (inPoly(element, x, y, left, top, localTileSize)) {\r\n\t\t\t\t\tvalidElements.push({\r\n\t\t\t\t\t\tid: element.id,\r\n\t\t\t\t\t\telement,\r\n\t\t\t\t\t\toriginalEvent: e,\r\n\t\t\t\t\t\tposOnMap: { x: element.x, y: element.y }\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (validElements.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tif (validElements.length === 1) {\r\n\t\treturn validElements[0];\r\n\t}\r\n\r\n\tvalidElements.sort((a, b) => {\r\n\t\tif (a.zIndex > b.zIndex) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.zIndex < b.zIndex) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\tif (a.id > b.id) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tif (a.id < b.id) {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t});\r\n\r\n\treturn validElements[validElements.length - 1];\r\n}","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nexport default function elementRightClick(e, elements, tileSize, state) {\r\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\r\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\r\n\r\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\r\n\tif (clickedElement !== null) {\r\n\t\treturn clickedElement;\r\n\t}\r\n\r\n\treturn {\r\n\t\tid: null,\r\n\t\telement: null,\r\n\t\toriginalEvent: e,\r\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\r\n\t};\r\n}\r\n","import collideElement from '../collisions/collideElement';\r\n\r\nconst LEFT_BUTTON = 1;\r\nlet selectedObject = null;\r\nlet unselectTimeoutId = 0;\r\nconst UNSELECT_TIMEOUT_MS = 300;\r\n\r\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\r\n\tconst newProps = {\r\n\t\t...props,\r\n\t};\r\n\r\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\r\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\r\n\r\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\r\n\t\tlet moved = false;\r\n\t\tif (dragObjects) {\r\n\t\t\tif (selectedObject === null) {\r\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\r\n\t\t\t}\r\n\r\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\r\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\r\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\r\n\r\n\t\t\t\tmoved = true;\r\n\r\n\t\t\t\tif (onElementMoved) {\r\n\t\t\t\t\tonElementMoved(\r\n\t\t\t\t\t\tselectedObject,\r\n\t\t\t\t\t\t(event.screenX - props.prevX),\r\n\t\t\t\t\t\t(event.screenY - props.prevY),\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (onHover) {\r\n\t\t\t\t\tonHover(null);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!moved) {\r\n\t\t\t// Lock Axis\r\n\t\t\tif (!lockXAxis) {\r\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\r\n\t\t\t}\r\n\r\n\t\t\tif (!lockYAxis) {\r\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\r\n\t\t\tunselectTimeoutId = setTimeout(() => {\r\n\t\t\t\tselectedObject = null;\r\n\t\t\t\tsetProps({\r\n\t\t\t\t\t...newProps,\r\n\t\t\t\t\tprevX: null,\r\n\t\t\t\t\tprevY: null,\r\n\t\t\t\t});\r\n\t\t\t}, UNSELECT_TIMEOUT_MS);\r\n\t\t}\r\n\t} else {\r\n\t\tif (onHover) {\r\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\r\n\t\t}\r\n\r\n\t\tselectedObject = null;\r\n\t}\r\n\r\n\tsetProps({\r\n\t\t...newProps,\r\n\t\tprevX: event.screenX,\r\n\t\tprevY: event.screenY,\r\n\t});\r\n}\r\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {\r\n\tconst elementsX = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.x * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.x * tileSize];\r\n\t}).flat();\r\n\tconst minX = Math.min(...elementsX);\r\n\tconst maxX = Math.max(...elementsX);\r\n\twidth = Math.max(2 * maxX, -2 * minX, width);\r\n\r\n\tconst elementsY = elements.map((e) => {\r\n\t\tif (Array.isArray(e.points)) {\r\n\t\t\treturn e.points.map(p => p.y * tileSize)\r\n\t\t}\r\n\r\n\t\treturn [e.y * tileSize];\r\n\t}).flat();\r\n\tconst minY = Math.min(...elementsY);\r\n\tconst maxY = Math.max(...elementsY);\r\n\theight = Math.max(2 * maxY, -2 * minY, height);\r\n\r\n\tconst ratio = Math.max(width / minimapWidth, height / minimapHeight);\r\n\r\n\treturn ratio;\r\n}\r\n","export default function sortElements(elements) {\n\telements.sort((a, b) => {\n\t\tif(a.zIndex !== b.zIndex) {\n\t\t\treturn a.zIndex - b.zIndex;\n\t\t}\n\n\t\tif(a.fill === b.fill) {\n\t\t\tif(a.stroke === b.stroke) {\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif(a.stroke < b.stroke) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\treturn -1;\n\t\t}\n\n\t\tif(a.fill < b.fill) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif(a.fill > b.fill) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn 0;\n\t});\n\n\treturn elements;\n}\n","export default class CanvasObject {\n\tconstructor(id, x, y, zIndex, draggable) {\n\t\tthis.id = id;\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis['z-index'] = zIndex;\n\t\tthis.draggable = draggable;\n\t}\n\n\tset zIndex(zIndex) {\n\t\tthis['z-index'] = zIndex;\n\t}\n\n\tget zIndex() {\n\t\treturn this['z-index'] || 0;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasObject';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class CanvasImage extends CanvasObject {\n\t/**\n\t * Represents an Image that will be created on the canvas.\n\t * Note: a cache to prevent too much loading is implemented, you can create as much\n\t * images as you want of the same source without any performance issue.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of picture in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of picture in canvas\n\t * @param {number} \t\twidth Picture width in canvas\n\t * @param {number} \t\theight Picture height in canvas\n\t * @param {string} \tsrc \tImage source link\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, src, zIndex, draggable }) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.src = src;\n\t}\n\n\tcrop(sx, swidth, sheight) {\n\t\tthis.sx = sx;\n\t\tthis.sy = sx;\n\t\tthis.swidth = swidth;\n\t\tthis.sheight = sheight;\n\t}\n\n\tget constructorName() {\n\t\treturn 'CanvasImage';\n\t}\n}\n","import CanvasObject from './CanvasObject';\n\nexport default class ColoredCanvasObject extends CanvasObject {\n\tconstructor(id, x, y, fill, stroke, zIndex, draggable) {\n\t\tsuper(id, x, y, zIndex, draggable);\n\n\t\tthis.fill = fill;\n\t\tthis.stroke = stroke;\n\t}\n\n\tget constructorName() {\n\t\treturn 'ColoredCanvasObject';\n\t}\n}","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Circle extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of circle center in canvas\n\t * @param {number}\t\t\ty Top coordinate of circle center in canvas\n\t * @param {number} \t\tradius Circle radius in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, radius, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.radius = radius;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Circle';\n\t}\n}\n\n","import ColoredCanvasObject from './ColoredCanvasObject';\r\n\r\nexport default class LinePath extends ColoredCanvasObject {\r\n\t/**\r\n\t * Represents a Line Path that will be created on the canvas.\r\n\t *\r\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\r\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\r\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\r\n\t * @param {number} \tzIndex \tStack order of the element\r\n\t * @param \t {number} \t\tlineWidth Width of the stroked line\r\n\t * @param \t {number} \t\tsmoothCorners Should we have smooth corners ?\r\n\t * @param \t {number} \t\tsmoothCornersRadius Radius of smoothed corners\r\n\t */\r\n\tconstructor({ id, lineWidth, points, stroke, zIndex, smoothCorners, smoothCornersRadius }) {\r\n\t\tsuper(id, points[0].x, points[0].y, 'none', stroke, zIndex, false);\r\n\r\n\t\tthis.points = points;\r\n\t\tthis.lineWidth = lineWidth;\r\n\t\tthis.smoothCorners = smoothCorners;\r\n\t\tthis.smoothCornersRadius = smoothCornersRadius;\r\n\t}\r\n\r\n\tget constructorName() {\r\n\t\treturn 'LinePath';\r\n\t}\r\n}\r\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Polygon extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tpoints Array of coordinates {x, y} of the polygon points\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, points, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, points[0].x, points[0].y, fill, stroke, zIndex, draggable);\n\n\t\tthis.points = points;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Polygon';\n\t}\n}\n","import ColoredCanvasObject from './ColoredCanvasObject';\n\nexport default class Rect extends ColoredCanvasObject {\n\t/**\n\t * Represents a Rectangle that will be created on the canvas.\n\t *\n\t * @param {string|number} id \t\tIdentifier (used in click callback)\n\t * @param {number}\t\t\tx Left coordinate of top-left corner of rectangle in canvas\n\t * @param {number}\t\t\ty Top coordinate of top-left corner of rectangle in canvas\n\t * @param {number} \t\twidth Rectangle width in canvas\n\t * @param {number} \t\theight Rectangle height in canvas\n\t * @param {string} \tfill \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.fillStyle\n\t * @param {string} \tstroke \tDOMString, CanvasGradient or CanvsPattern representing what should be put in CanvasRenderingContext2D.strokeStyle\n\t * @param {number} \tzIndex \tStack order of the element\n\t */\n\tconstructor({ id, x, y, width, height, fill, stroke, zIndex, draggable }) {\n\t\tsuper(id, x, y, fill, stroke, zIndex, draggable);\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t}\n\n\tget constructorName() {\n\t\treturn 'Rect';\n\t}\n}\n","export default function renderCircle(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.arc(\r\n\t\tleft + element.x * localTileSize,\r\n\t\ttop + element.y * localTileSize,\r\n\t\telement.radius * localTileSize,\r\n\t\t0,\r\n\t\t2 * Math.PI\r\n\t);\r\n\r\n\tif(element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif(element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","window.__canvas2dWrapper__ = {};\nwindow.__canvas2dWrapper__.imgCache = {};\n\nexport default function renderImage(context, element, left, top, localTileSize) {\n\tif(!__canvas2dWrapper__.imgCache[element.src]) {\n\t\t__canvas2dWrapper__.imgCache[element.src] = new Image();\n\t\t__canvas2dWrapper__.imgCache[element.src].src = element.src;\n\t}\n\n\tif(!element.sx) {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t} else {\n\t\tcontext.drawImage(\n\t\t\t__canvas2dWrapper__.imgCache[element.src],\n\t\t\telement.sx,\n\t\t\telement.sy,\n\t\t\telement.swidth,\n\t\t\telement.sheight,\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize\n\t\t);\n\t}\n}\n","export default function renderLinePath(\r\n\tcontext,\r\n\telement,\r\n\tleft,\r\n\ttop,\r\n\tlocalTileSize\r\n) {\r\n\tconst defaultLineWidth = context.lineWidth;\r\n\tconst points = element.points.map((p) => ({\r\n\t\tx: left + p.x * localTileSize,\r\n\t\ty: top + p.y * localTileSize,\r\n\t}));\r\n\r\n\tif (points.length < 2) return;\r\n\r\n\tcontext.beginPath();\r\n\tcontext.moveTo(points[0].x, points[0].y);\r\n\r\n\tif (element.smoothCorners) {\r\n\t\tfor (let i = 1; i < points.length - 1; i++) {\r\n\t\t\tconst prev = points[i - 1];\r\n\t\t\tconst curr = points[i];\r\n\t\t\tconst next = points[i + 1];\r\n\r\n\t\t\t// Direction vectors\r\n\t\t\tconst dx1 = curr.x - prev.x;\r\n\t\t\tconst dy1 = curr.y - prev.y;\r\n\t\t\tconst dx2 = next.x - curr.x;\r\n\t\t\tconst dy2 = next.y - curr.y;\r\n\r\n\t\t\t// Lengths\r\n\t\t\tconst len1 = Math.hypot(dx1, dy1);\r\n\t\t\tconst len2 = Math.hypot(dx2, dy2);\r\n\r\n\t\t\t// Offsets for corner rounding\r\n\t\t\tconst offset1X = (dx1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset1Y = (dy1 / len1) * element.smoothCornersRadius;\r\n\t\t\tconst offset2X = (dx2 / len2) * element.smoothCornersRadius;\r\n\t\t\tconst offset2Y = (dy2 / len2) * element.smoothCornersRadius;\r\n\r\n\t\t\tconst cornerStart = {\r\n\t\t\t\tx: curr.x - offset1X,\r\n\t\t\t\ty: curr.y - offset1Y,\r\n\t\t\t};\r\n\t\t\tconst cornerEnd = {\r\n\t\t\t\tx: curr.x + offset2X,\r\n\t\t\t\ty: curr.y + offset2Y,\r\n\t\t\t};\r\n\r\n\t\t\tcontext.lineTo(cornerStart.x, cornerStart.y);\r\n\t\t\tcontext.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);\r\n\t\t}\r\n\r\n\t\t// Final segment\r\n\t\tcontext.lineTo(points[points.length - 1].x, points[points.length - 1].y);\r\n\t} else {\r\n\t\t// Straight line version\r\n\t\tfor (let i = 1; i < points.length; i++) {\r\n\t\t\tcontext.lineTo(points[i].x, points[i].y);\r\n\t\t}\r\n\t}\r\n\r\n\tcontext.lineWidth = element.lineWidth * localTileSize;\r\n\tcontext.stroke();\r\n\tcontext.lineWidth = defaultLineWidth;\r\n}","export default function renderPolygon(context, element, left, top, localTileSize) {\r\n\tcontext.beginPath();\r\n\r\n\tcontext.moveTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tfor (let i = 0; i < element.points.length; i++) {\r\n\t\tcontext.lineTo(\r\n\t\t\tleft + element.points[i].x * localTileSize,\r\n\t\t\ttop + element.points[i].y * localTileSize,\r\n\t\t);\r\n\t}\r\n\r\n\tcontext.lineTo(\r\n\t\tleft + element.points[0].x * localTileSize,\r\n\t\ttop + element.points[0].y * localTileSize,\r\n\t);\r\n\r\n\tif (element.fill) {\r\n\t\tcontext.fill();\r\n\t}\r\n\tif (element.stroke) {\r\n\t\tcontext.stroke();\r\n\t}\r\n}\r\n","export default function renderRect(context, element, left, top, localTileSize) {\n\tif(element.fill) {\n\t\tcontext.fillRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n\n\tif(element.stroke) {\n\t\tcontext.strokeRect(\n\t\t\tleft + element.x * localTileSize,\n\t\t\ttop + element.y * localTileSize,\n\t\t\telement.width * localTileSize,\n\t\t\telement.height * localTileSize,\n\t\t);\n\t}\n}\n","import CanvasImage from '../shapes/CanvasImage';\r\nimport Circle from '../shapes/Circle';\r\nimport LinePath from '../shapes/LinePath';\r\nimport Polygon from '../shapes/Polygon';\r\nimport Rect from '../shapes/Rect';\r\n\r\nimport calcTileSize from '../functions/calcTileSize';\r\n\r\nimport renderCircle from './renderCircle';\r\nimport renderImage from './renderImage';\r\nimport renderLinePath from './renderLinePath';\r\nimport renderPolygon from './renderPolygon';\r\nimport renderRect from './renderRect';\r\n\r\nconst renderFn = {\r\n\t[(new Circle({})).constructorName]: renderCircle,\r\n\t[(new CanvasImage({})).constructorName]: renderImage,\r\n\t[(new LinePath({ points: [{}] })).constructorName]: renderLinePath,\r\n\t[(new Polygon({ points: [{}] })).constructorName]: renderPolygon,\r\n\t[(new Rect({})).constructorName]: renderRect,\r\n};\r\n\r\nexport default function renderCanvas(\r\n\tcontext,\r\n\twidth,\r\n\theight,\r\n\telements,\r\n\ttileSize,\r\n\tstate,\r\n) {\r\n\tconst left = state.left + state.deltaLeft;\r\n\tconst top = state.top + state.deltaTop;\r\n\r\n\tlet prevFillStyle = '';\r\n\tlet prevStrokeStyle = '';\r\n\r\n\tconst localTileSize = calcTileSize(tileSize, state.zoom);\r\n\r\n\tcontext.clearRect(0, 0, width, height);\r\n\r\n\tfor (const element of elements) {\r\n\t\tif (\r\n\t\t\telement.fill !== prevFillStyle &&\r\n\t\t\ttypeof element.fill !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.fillStyle = element.fill;\r\n\t\t\tprevFillStyle = element.fill;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\telement.stroke !== prevStrokeStyle &&\r\n\t\t\ttypeof element.stroke !== 'undefined'\r\n\t\t) {\r\n\t\t\tcontext.strokeStyle = element.stroke;\r\n\t\t\tprevStrokeStyle = element.stroke;\r\n\t\t}\r\n\r\n\t\tconst type = element.constructorName;\r\n\t\tif (renderFn[type]) {\r\n\t\t\trenderFn[type](context, element, left, top, localTileSize);\r\n\t\t} else {\r\n\t\t\tthrow new Error('Unsupported shape type:' + type);\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { useCallback, useEffect, useState } from 'react';\r\n\r\nimport './index.css';\r\n\r\nimport elementClick from './events/elementClick';\r\nimport elementRightClick from './events/elementRightClick';\r\nimport mouseMove from './events/mouseMove';\r\nimport mouseWheel from './events/mouseWheel';\r\n\r\nimport calcRatioForMinimap from './functions/calcRatioForMinimap';\r\nimport sortElements from './functions/sortElements';\r\n\r\nimport renderCanvas from './render/renderCanvas';\r\n\r\nconst elements = {};\r\n\r\nexport default function Canvas2D({\r\n\twidth,\r\n\theight,\r\n\ttrackMouseMove = true,\r\n\tminZoom = 1,\r\n\tmaxZoom = 1,\r\n\ttileSize = 1,\r\n\tonClick,\r\n\tonRightClick,\r\n\tonHover,\r\n\tonElementMoved,\r\n\tonWheel,\r\n\tonFrame,\r\n\tlockXAxis = false,\r\n\tlockYAxis = false,\r\n\tsmoothingQuality = 'medium',\r\n\tdragObjects = false,\r\n\tdeltaLeft = 0,\r\n\tdeltaTop = 0,\r\n\tshowMinimap = false,\r\n\tminimapWidth = 240,\r\n\tminimapHeight = 120,\r\n\tminimapFilter = (e) => true,\r\n\t...otherProps\r\n}) {\r\n\tif (!elements[otherProps.id]) {\r\n\t\telements[otherProps.id] = [];\r\n\t}\r\n\r\n\t// Hooks\r\n\tconst [state, setState] = useState({});\r\n\tconst canvasRef = useCallback((canvas) => {\r\n\t\tif (canvas !== null) {\r\n\t\t\tconst context = canvas.getContext('2d');\r\n\r\n\t\t\tif (smoothingQuality === false) {\r\n\t\t\t\tcontext.imageSmoothingEnabled = false;\r\n\t\t\t} else {\r\n\t\t\t\tcontext.imageSmoothingEnabled = true;\r\n\t\t\t\tcontext.imageSmoothingQuality = smoothingQuality;\r\n\t\t\t}\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: canvas.getBoundingClientRect(),\r\n\t\t\t\tcanvas,\r\n\t\t\t\tcontext,\r\n\t\t\t\tleft: width / 2,\r\n\t\t\t\ttop: height / 2,\r\n\t\t\t\twidth,\r\n\t\t\t\theight,\r\n\t\t\t\tzoom: 1,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tconst canvasMapRef = useCallback((minimapCanvas) => {\r\n\t\tif (minimapCanvas !== null) {\r\n\t\t\tconst minimapContext = minimapCanvas.getContext('2d');\r\n\r\n\t\t\tsetState((s) => ({\r\n\t\t\t\t...s,\r\n\t\t\t\tboundingClientRect: minimapCanvas.getBoundingClientRect(),\r\n\t\t\t\tminimapCanvas,\r\n\t\t\t\tminimapContext,\r\n\t\t\t}));\r\n\t\t}\r\n\t}, []);\r\n\r\n\tstate.deltaTop = deltaTop;\r\n\tstate.deltaLeft = deltaLeft;\r\n\r\n\t// Check inputs\r\n\tif (typeof width !== 'number' || typeof height !== 'number') {\r\n\t\tthrow new Error('width/height should be specified and be numbers.');\r\n\t}\r\n\r\n\tif (minZoom > maxZoom) {\r\n\t\tthrow new Error('minZoom should be lower than maxZoom.');\r\n\t}\r\n\r\n\tif (typeof onClick !== 'function' && typeof onClick !== 'undefined') {\r\n\t\tthrow new Error('onClick should be a function.');\r\n\t}\r\n\r\n\tif (typeof onFrame !== 'function') {\r\n\t\tthrow new Error('onFrame should be a function.');\r\n\t}\r\n\r\n\t// Render\r\n\tlet onMouseMove = null;\r\n\tif (trackMouseMove) {\r\n\t\tonMouseMove = (e) => mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);\r\n\t}\r\n\r\n\tconst onWheelFn = (e) => {\r\n\t\tif (onWheel) {\r\n\t\t\tonWheel(e);\r\n\t\t}\r\n\r\n\t\tif (minZoom !== maxZoom) {\r\n\t\t\tmouseWheel(e, state, setState, minZoom, maxZoom);\r\n\t\t}\r\n\t};\r\n\r\n\tlet onClickFn = null;\r\n\tif (onClick) {\r\n\t\tonClickFn = (e) => onClick(elementClick(e, elements[otherProps.id], tileSize, state));\r\n\t}\r\n\r\n\r\n\t// Right click Event\r\n\tuseEffect(() => {\r\n\t\tfunction onRightClickEvent(e) {\r\n\t\t\te.preventDefault();\r\n\t\t\tonRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));\r\n\t\t}\r\n\r\n\t\tif (onRightClick && state.canvas) {\r\n\t\t\tstate.canvas.addEventListener('contextmenu', onRightClickEvent);\r\n\t\t\treturn () => { state.canvas.removeEventListener('contextmenu', onRightClickEvent); };\r\n\t\t}\r\n\t}, [state.canvas, onRightClick]);\r\n\r\n\t// Canvas render loop\r\n\tuseEffect(() => {\r\n\t\tlet shouldRender = true;\r\n\t\tfunction render() {\r\n\t\t\tif (!shouldRender) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\telements[otherProps.id] = onFrame();\r\n\t\t\tconst sortedElements = sortElements(elements[otherProps.id]);\r\n\r\n\t\t\tif (state.context) {\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.context,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t\theight,\r\n\t\t\t\t\tsortedElements,\r\n\t\t\t\t\ttileSize,\r\n\t\t\t\t\tstate,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (showMinimap && state.minimapContext) {\r\n\t\t\t\tconst filteredElementsList = sortedElements.filter(minimapFilter);\r\n\t\t\t\tconst ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize * state.zoom);\r\n\r\n\t\t\t\trenderCanvas(\r\n\t\t\t\t\tstate.minimapContext,\r\n\t\t\t\t\tminimapWidth,\r\n\t\t\t\t\tminimapHeight,\r\n\t\t\t\t\tfilteredElementsList,\r\n\t\t\t\t\ttileSize / ratio,\r\n\t\t\t\t\t{ left: minimapWidth / 2, top: minimapHeight / 2, deltaLeft: 0, deltaTop: 0, zoom: 1 },\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\twindow.requestAnimationFrame(render);\r\n\t\t}\r\n\t\twindow.requestAnimationFrame(render);\r\n\r\n\t\treturn () => { shouldRender = false; };\r\n\t}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<canvas\r\n\t\t\t\tref={canvasRef}\r\n\t\t\t\twidth={width}\r\n\t\t\t\theight={height}\r\n\t\t\t\tonPointerMove={onMouseMove}\r\n\t\t\t\tonWheel={onWheelFn}\r\n\t\t\t\tonClick={onClickFn}\r\n\t\t\t\tclassName=\"canvas2d-wrapper\"\r\n\t\t\t\t{...otherProps}\r\n\t\t\t/>\r\n\r\n\t\t\t{showMinimap && <canvas\r\n\t\t\t\tref={canvasMapRef}\r\n\t\t\t\twidth={minimapWidth}\r\n\t\t\t\theight={minimapHeight}\r\n\t\t\t\tclassName=\"canvas2d-wrapper-minimap\"\r\n\t\t\t/>}\r\n\t\t</>\r\n\t);\r\n}\r\n","export default function preloadImages(images) {\n\tfor(const image of images) {\n\t\t__canvas2dWrapper__.imgCache[image] = new Image();\n\t\t__canvas2dWrapper__.imgCache[image].src = image;\n\t}\n}","import { useEffect, useState } from 'react';\n\nlet intervalId = 0;\nconst FRAME_INTERVAL = 15; // TODO: requestAnimationFrame ?\nexport default function useGamepad() {\n\tconst [gamepad, setGamepad] = useState();\n\n\tuseEffect(() => {\n\t\tclearInterval(intervalId);\n\t\tintervalId = setInterval(() =>\n\t\t\tsetGamepad(navigator.getGamepads()[0])\n\t\t, FRAME_INTERVAL);\n\t}, []);\n\n\treturn gamepad;\n}","import { useEffect, useState } from 'react';\n\nexport default function useKeyboard() {\n\tconst [keyboard, setKeyboard] = useState({});\n\n\tuseEffect(() => {\n\t\tconst keydown = (e) => {\n\t\t\tkeyboard[e.key] = true;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keydown', keydown);\n\n\t\tconst keyup = (e) => {\n\t\t\tkeyboard[e.key] = false;\n\t\t\tsetKeyboard(JSON.parse(JSON.stringify(keyboard)));\n\t\t};\n\t\tdocument.addEventListener('keyup', keyup);\n\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('keydown', keydown);\n\t\t\tdocument.removeEventListener('keyup', keyup);\n\t\t};\n\t}, []);\n\n\treturn keyboard;\n}","import { useEffect, useState } from 'react';\n\nexport default function useMousePosition(includeTouch = true) {\n\tconst [\n\t\tmousePosition,\n\t\tsetMousePosition\n\t] = useState({ x: null, y: null });\n\n\tuseEffect(() => {\n\t\tconst updateMousePosition = ev => {\n\t\t\tlet x, y;\n\t\t\tif (ev.touches) {\n\t\t\t\tconst touch = ev.touches[0];\n\t\t\t\t[x, y] = [touch.clientX, touch.clientY];\n\t\t\t} else {\n\t\t\t\t[x, y] = [ev.clientX, ev.clientY];\n\t\t\t}\n\t\t\tsetMousePosition({ x, y });\n\t\t};\n\t\twindow.addEventListener('mousemove', updateMousePosition);\n\n\t\tif (includeTouch) {\n\t\t\twindow.addEventListener('touchmove', updateMousePosition);\n\t\t}\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener('mousemove', updateMousePosition);\n\n\t\t\tif (includeTouch) {\n\t\t\t\twindow.removeEventListener('touchmove', updateMousePosition);\n\t\t\t}\n\t\t};\n\t}, [includeTouch]);\n\n\treturn mousePosition;\n}","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n\tconst { clientWidth: width, clientHeight: height } = document.documentElement;\n\treturn {\n\t\twidth,\n\t\theight,\n\t};\n}\n\nexport default function useWindowDimensions() {\n\tconst [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());\n\n\tuseEffect(() => {\n\t\tfunction handleResize() {\n\t\t\tsetWindowDimensions(getWindowDimensions());\n\t\t}\n\n\t\twindow.addEventListener('resize', handleResize);\n\t\treturn () => window.removeEventListener('resize', handleResize);\n\t}, []);\n\n\treturn windowDimensions;\n}\n"],"names":["calcTileSize","tileSize","zoom","inCircle","element","x","y","left","top","localTileSize","distance","radius","inPoly","mouseX","mouseY","j","points","length","counter","i","iX","iY","jX","jY","slope","inRect","width","height","collideElement","e","elements","validElements","_iterator","_createForOfIteratorHelperLoose","_step","done","value","constructorName","push","id","originalEvent","posOnMap","sort","a","b","zIndex","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","Math","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","lineWidth","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/functions/calcTileSize.js","../src/collisions/inCircle.js","../src/collisions/inPoly.js","../src/collisions/inRect.js","../src/collisions/onLinePath.js","../src/collisions/collideElement.js","../src/events/elementClick.js","../src/events/elementRightClick.js","../src/events/mouseMove.js","../src/events/mouseWheel.js","../src/functions/calcRatioForMinimap.js","../src/functions/sortElements.js","../src/shapes/CanvasObject.js","../src/shapes/CanvasImage.js","../src/shapes/ColoredCanvasObject.js","../src/shapes/Circle.js","../src/shapes/LinePath.js","../src/shapes/Polygon.js","../src/shapes/Rect.js","../src/render/renderCircle.js","../src/render/renderImage.js","../src/render/renderLinePath.js","../src/render/renderPolygon.js","../src/render/renderRect.js","../src/render/renderCanvas.js","../src/Canvas2D.js","../src/functions/preloadImages.js","../src/hooks/useGamepad.js","../src/hooks/useKeyboard.js","../src/hooks/useMousePosition.js","../src/hooks/useWindowDimensions.js"],"sourcesContent":["export default function calcTileSize(tileSize, zoom) {\n\treturn tileSize * zoom;\n}\n","export default function inCircle(element, x, y, left, top, localTileSize) {\n\tconst distance = (\n\t\t(x - left) * (x - left) +\n\t\t(y - top) * (y - top)\n\t);\n\n\treturn (distance <= ((element.radius * localTileSize) * (element.radius * localTileSize)));\n}","export default function inPoly(element, x, y, mouseX, mouseY, localTileSize) {\n\tconst j = element.points.length - 1;\n\tlet counter = false;\n\n\tfor(let i = 0; i < element.points.length; i++) {\n\t\tconst iX = element.points[i].x * localTileSize;\n\t\tconst iY = element.points[i].y * localTileSize;\n\n\t\t// The mouse is exactly at a polygon point\n\t\tif(mouseX === iX && mouseY === iY) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst jX = element.points[j].x * localTileSize;\n\t\tconst jY = element.points[j].y * localTileSize;\n\n\t\tif((iY > y) !== (jY > y)) {\n\t\t\tconst slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);\n\n\t\t\t// On the boundary\n\t\t\tif(slope === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Alternate, odd count = inside, even count = outside\n\t\t\tif((slope < 0) !== (jY < iY)) {\n\t\t\t\tcounter = !counter;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn counter;\n}\n","export default function inRect(element, x, y, left, top, localTileSize) {\n\tconst width = element.width * localTileSize;\n\tconst height = element.height * localTileSize;\n\n\treturn (x <= left && left <= (x + width) && y <= top && top <= (y + height));\n}","import inCircle from './inCircle';\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}","import collideElement from '../collisions/collideElement';\n\nexport default function elementClick(e, elements, tileSize, state) {\n\tconst left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;\n\tconst top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;\n\n\tconst clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);\n\tif (clickedElement !== null) {\n\t\treturn clickedElement;\n\t}\n\n\treturn {\n\t\tid: null,\n\t\telement: null,\n\t\toriginalEvent: e,\n\t\tposOnMap: { x: Math.floor(left / tileSize / state.zoom), y: Math.floor(top / tileSize / state.zoom) }\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';\n\nconst LEFT_BUTTON = 1;\nlet selectedObject = null;\nlet unselectTimeoutId = 0;\nconst UNSELECT_TIMEOUT_MS = 300;\n\nexport default function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {\n\tconst newProps = {\n\t\t...props,\n\t};\n\n\tconst left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;\n\tconst top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;\n\n\tif (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {\n\t\tlet moved = false;\n\t\tif (dragObjects) {\n\t\t\tif (selectedObject === null) {\n\t\t\t\tselectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);\n\t\t\t}\n\n\t\t\tif (selectedObject !== null && selectedObject.element.draggable) {\n\t\t\t\tselectedObject.element.x = (-props.left - props.deltaLeft) + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;\n\t\t\t\tselectedObject.element.y = (-props.top - props.deltaLeft) + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;\n\n\t\t\t\tmoved = true;\n\n\t\t\t\tif (onElementMoved) {\n\t\t\t\t\tonElementMoved(\n\t\t\t\t\t\tselectedObject,\n\t\t\t\t\t\t(event.screenX - props.prevX),\n\t\t\t\t\t\t(event.screenY - props.prevY),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (onHover) {\n\t\t\t\t\tonHover(null);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!moved) {\n\t\t\t// Lock Axis\n\t\t\tif (!lockXAxis) {\n\t\t\t\tnewProps.left += (event.screenX - props.prevX);\n\t\t\t}\n\n\t\t\tif (!lockYAxis) {\n\t\t\t\tnewProps.top += (event.screenY - props.prevY);\n\t\t\t}\n\t\t}\n\n\t\tif (event.nativeEvent.pointerType !== 'mouse') {\n\t\t\tunselectTimeoutId = setTimeout(() => {\n\t\t\t\tselectedObject = null;\n\t\t\t\tsetProps({\n\t\t\t\t\t...newProps,\n\t\t\t\t\tprevX: null,\n\t\t\t\t\tprevY: null,\n\t\t\t\t});\n\t\t\t}, UNSELECT_TIMEOUT_MS);\n\t\t}\n\t} else {\n\t\tif (onHover) {\n\t\t\tonHover(collideElement(event, elements, left, top, tileSize, props.zoom), { x: left, y: top });\n\t\t}\n\n\t\tselectedObject = null;\n\t}\n\n\tsetProps({\n\t\t...newProps,\n\t\tprevX: event.screenX,\n\t\tprevY: event.screenY,\n\t});\n}\n","const WHEEL_DELTA = 0.05;\n\nexport default function mouseWheel(event, props, setProps, minZoom, maxZoom) {\n\tlet zoom = props.zoom;\n\tif(event.deltaY < 0) {\n\t\tzoom += WHEEL_DELTA;\n\t} else {\n\t\tzoom -= WHEEL_DELTA;\n\t}\n\n\tzoom = Math.max(zoom, minZoom);\n\tzoom = Math.min(zoom, maxZoom);\n\n\t/** TODO: zoom on mouse **/\n\n\tsetProps({\n\t\t...props,\n\t\tzoom,\n\t});\n}\n","export default function 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 * state.zoom);\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\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","elementClick","state","deltaLeft","pageX","target","offsetLeft","deltaTop","pageY","offsetTop","clickedElement","floor","elementRightClick","LEFT_BUTTON","selectedObject","unselectTimeoutId","UNSELECT_TIMEOUT_MS","mouseMove","event","props","setProps","lockXAxis","lockYAxis","dragObjects","onElementMoved","onHover","newProps","_extends","nativeEvent","buttons","prevX","moved","draggable","clientX","boundingClientRect","clientY","screenX","screenY","prevY","pointerType","setTimeout","WHEEL_DELTA","mouseWheel","minZoom","maxZoom","deltaY","max","min","calcRatioForMinimap","minimapWidth","minimapHeight","elementsX","map","Array","isArray","p","flat","minX","apply","maxX","elementsY","minY","maxY","ratio","sortElements","fill","stroke","CanvasObject","_createClass","key","get","set","CanvasImage","_CanvasObject","_ref","_this","src","call","_inheritsLoose","_proto","prototype","crop","sx","swidth","sheight","sy","ColoredCanvasObject","Circle","_ColoredCanvasObject","LinePath","smoothCorners","smoothCornersRadius","Polygon","Rect","renderCircle","context","beginPath","arc","PI","window","__canvas2dWrapper__","imgCache","renderImage","Image","drawImage","renderLinePath","defaultLineWidth","moveTo","prev","curr","next","dx1","dy1","dx2","dy2","len1","hypot","len2","offset1X","offset1Y","offset2X","offset2Y","cornerStart","cornerEnd","lineTo","quadraticCurveTo","renderPolygon","renderRect","fillRect","strokeRect","renderFn","_renderFn","renderCanvas","prevFillStyle","prevStrokeStyle","clearRect","fillStyle","strokeStyle","type","Error","Canvas2D","_ref$trackMouseMove","trackMouseMove","_ref$minZoom","_ref$maxZoom","_ref$tileSize","onClick","onRightClick","onWheel","onFrame","_ref$lockXAxis","_ref$lockYAxis","_ref$smoothingQuality","smoothingQuality","_ref$dragObjects","_ref$deltaLeft","_ref$deltaTop","_ref$showMinimap","showMinimap","_ref$minimapWidth","_ref$minimapHeight","_ref$minimapFilter","minimapFilter","otherProps","_objectWithoutPropertiesLoose","_excluded","_useState","useState","setState","canvasRef","useCallback","canvas","getContext","imageSmoothingEnabled","imageSmoothingQuality","s","getBoundingClientRect","canvasMapRef","minimapCanvas","minimapContext","onMouseMove","onWheelFn","onClickFn","useEffect","onRightClickEvent","preventDefault","addEventListener","removeEventListener","shouldRender","render","sortedElements","filteredElementsList","filter","requestAnimationFrame","React","createElement","Fragment","ref","onPointerMove","className","preloadImages","images","image","intervalId","FRAME_INTERVAL","useGamepad","gamepad","setGamepad","clearInterval","setInterval","navigator","getGamepads","useKeyboard","keyboard","setKeyboard","keydown","JSON","parse","stringify","document","keyup","useMousePosition","includeTouch","mousePosition","setMousePosition","updateMousePosition","ev","touches","touch","_ref2","getWindowDimensions","_document$documentEle","documentElement","clientWidth","clientHeight","useWindowDimensions","windowDimensions","setWindowDimensions","handleResize"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "canvas2d-wrapper",
3
- "version": "1.11.0",
3
+ "version": "1.12.1",
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.34.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.34.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.0",
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
  }