canvas2d-wrapper 1.14.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Canvas2D.d.ts +3 -0
- package/dist/Canvas2D.js +158 -0
- package/dist/Canvas2D.spec.d.ts +0 -0
- package/dist/Canvas2D.spec.js +38101 -0
- package/dist/assets/Canvas2D.css +1 -0
- package/dist/collisions/collideElement.d.ts +3 -0
- package/dist/collisions/collideElement.js +53 -0
- package/dist/collisions/inCircle.d.ts +3 -0
- package/dist/collisions/inCircle.js +6 -0
- package/dist/collisions/inPoly.d.ts +2 -0
- package/dist/collisions/inPoly.js +20 -0
- package/dist/collisions/inRect.d.ts +2 -0
- package/dist/collisions/inRect.js +12 -0
- package/dist/collisions/onLinePath.d.ts +2 -0
- package/dist/collisions/onLinePath.js +45 -0
- package/dist/events/computeEventPositions.d.ts +9 -0
- package/dist/events/computeEventPositions.js +7 -0
- package/dist/events/elementClick.d.ts +4 -0
- package/dist/events/elementClick.js +18 -0
- package/dist/events/elementRightClick.d.ts +4 -0
- package/dist/events/elementRightClick.js +13 -0
- package/dist/events/mouseMove.d.ts +5 -0
- package/dist/events/mouseMove.js +37 -0
- package/dist/events/mouseWheel.d.ts +2 -0
- package/dist/events/mouseWheel.js +10 -0
- package/dist/functions/calcRatioForMinimap.d.ts +2 -0
- package/dist/functions/calcRatioForMinimap.js +15 -0
- package/dist/functions/calcTileSize.d.ts +1 -0
- package/dist/functions/calcTileSize.js +6 -0
- package/dist/functions/preloadImages.d.ts +1 -0
- package/dist/functions/preloadImages.js +7 -0
- package/dist/functions/sortElements.d.ts +2 -0
- package/dist/functions/sortElements.js +18 -0
- package/dist/generateTestData.d.ts +2 -0
- package/dist/generateTestData.js +48 -0
- package/dist/hooks/useGamepad.d.ts +1 -0
- package/dist/hooks/useGamepad.js +13 -0
- package/dist/hooks/useKeyboard.d.ts +5 -0
- package/dist/hooks/useKeyboard.js +19 -0
- package/dist/hooks/useMousePosition.d.ts +6 -0
- package/dist/hooks/useMousePosition.js +25 -0
- package/dist/hooks/useWindowDimensions.d.ts +4 -0
- package/dist/hooks/useWindowDimensions.js +20 -0
- package/dist/img/logo.png +0 -0
- package/dist/main.d.ts +20 -0
- package/dist/main.js +26 -0
- package/dist/render/renderCanvas.d.ts +3 -0
- package/dist/render/renderCanvas.js +35 -0
- package/dist/render/renderCircle.d.ts +2 -0
- package/dist/render/renderCircle.js +12 -0
- package/dist/render/renderImage.d.ts +2 -0
- package/dist/render/renderImage.js +41 -0
- package/dist/render/renderLinePath.d.ts +2 -0
- package/dist/render/renderLinePath.js +27 -0
- package/dist/render/renderPolygon.d.ts +2 -0
- package/dist/render/renderPolygon.js +18 -0
- package/dist/render/renderRect.d.ts +2 -0
- package/dist/render/renderRect.js +27 -0
- package/dist/shapes/CanvasImage.d.ts +40 -0
- package/dist/shapes/CanvasImage.js +38 -0
- package/dist/shapes/CanvasObject.d.ts +14 -0
- package/dist/shapes/CanvasObject.js +27 -0
- package/dist/shapes/Circle.d.ts +28 -0
- package/dist/shapes/Circle.js +25 -0
- package/dist/shapes/ColoredCanvasObject.d.ts +7 -0
- package/dist/shapes/ColoredCanvasObject.js +14 -0
- package/dist/shapes/LinePath.d.ts +31 -0
- package/dist/shapes/LinePath.js +28 -0
- package/dist/shapes/Polygon.d.ts +25 -0
- package/dist/shapes/Polygon.js +23 -0
- package/dist/shapes/Rect.d.ts +34 -0
- package/dist/shapes/Rect.js +29 -0
- package/dist/types/Canvas2DProps.d.ts +30 -0
- package/dist/types/Canvas2DProps.js +1 -0
- package/dist/types/Canvas2DState.d.ts +18 -0
- package/dist/types/Canvas2DState.js +1 -0
- package/dist/types/CollideElementResultItem.d.ts +9 -0
- package/dist/types/CollideElementResultItem.js +1 -0
- package/dist/types/Position2D.d.ts +5 -0
- package/dist/types/Position2D.js +1 -0
- package/dist/types/Surface2D.d.ts +7 -0
- package/dist/types/Surface2D.js +1 -0
- package/package.json +48 -56
- package/canvas2d-wrapper.d.ts +0 -285
- package/dist/index.css +0 -3
- package/dist/index.js +0 -1088
- package/dist/index.js.map +0 -1
- package/dist/index.modern.js +0 -1074
- package/dist/index.modern.js.map +0 -1
package/dist/index.js
DELETED
@@ -1,1088 +0,0 @@
|
|
1
|
-
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
2
|
-
|
3
|
-
var React = require('react');
|
4
|
-
var React__default = _interopDefault(React);
|
5
|
-
|
6
|
-
function _arrayLikeToArray(r, a) {
|
7
|
-
(null == a || a > r.length) && (a = r.length);
|
8
|
-
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
9
|
-
return n;
|
10
|
-
}
|
11
|
-
function _defineProperties(e, r) {
|
12
|
-
for (var t = 0; t < r.length; t++) {
|
13
|
-
var o = r[t];
|
14
|
-
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
|
15
|
-
}
|
16
|
-
}
|
17
|
-
function _createClass(e, r, t) {
|
18
|
-
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
|
19
|
-
writable: !1
|
20
|
-
}), e;
|
21
|
-
}
|
22
|
-
function _createForOfIteratorHelperLoose(r, e) {
|
23
|
-
var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
24
|
-
if (t) return (t = t.call(r)).next.bind(t);
|
25
|
-
if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
|
26
|
-
t && (r = t);
|
27
|
-
var o = 0;
|
28
|
-
return function () {
|
29
|
-
return o >= r.length ? {
|
30
|
-
done: !0
|
31
|
-
} : {
|
32
|
-
done: !1,
|
33
|
-
value: r[o++]
|
34
|
-
};
|
35
|
-
};
|
36
|
-
}
|
37
|
-
throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
38
|
-
}
|
39
|
-
function _extends() {
|
40
|
-
return _extends = Object.assign ? Object.assign.bind() : function (n) {
|
41
|
-
for (var e = 1; e < arguments.length; e++) {
|
42
|
-
var t = arguments[e];
|
43
|
-
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
44
|
-
}
|
45
|
-
return n;
|
46
|
-
}, _extends.apply(null, arguments);
|
47
|
-
}
|
48
|
-
function _inheritsLoose(t, o) {
|
49
|
-
t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o);
|
50
|
-
}
|
51
|
-
function _objectWithoutPropertiesLoose(r, e) {
|
52
|
-
if (null == r) return {};
|
53
|
-
var t = {};
|
54
|
-
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
55
|
-
if (-1 !== e.indexOf(n)) continue;
|
56
|
-
t[n] = r[n];
|
57
|
-
}
|
58
|
-
return t;
|
59
|
-
}
|
60
|
-
function _setPrototypeOf(t, e) {
|
61
|
-
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
|
62
|
-
return t.__proto__ = e, t;
|
63
|
-
}, _setPrototypeOf(t, e);
|
64
|
-
}
|
65
|
-
function _toPrimitive(t, r) {
|
66
|
-
if ("object" != typeof t || !t) return t;
|
67
|
-
var e = t[Symbol.toPrimitive];
|
68
|
-
if (void 0 !== e) {
|
69
|
-
var i = e.call(t, r || "default");
|
70
|
-
if ("object" != typeof i) return i;
|
71
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
72
|
-
}
|
73
|
-
return ("string" === r ? String : Number)(t);
|
74
|
-
}
|
75
|
-
function _toPropertyKey(t) {
|
76
|
-
var i = _toPrimitive(t, "string");
|
77
|
-
return "symbol" == typeof i ? i : i + "";
|
78
|
-
}
|
79
|
-
function _unsupportedIterableToArray(r, a) {
|
80
|
-
if (r) {
|
81
|
-
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
82
|
-
var t = {}.toString.call(r).slice(8, -1);
|
83
|
-
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
84
|
-
}
|
85
|
-
}
|
86
|
-
|
87
|
-
function calcTileSize(tileSize, zoom) {
|
88
|
-
return tileSize * zoom;
|
89
|
-
}
|
90
|
-
|
91
|
-
function inCircle(element, x, y, left, top, localTileSize) {
|
92
|
-
var distance = (x - left) * (x - left) + (y - top) * (y - top);
|
93
|
-
return distance <= element.radius * localTileSize * (element.radius * localTileSize);
|
94
|
-
}
|
95
|
-
|
96
|
-
function inPoly(element, x, y, mouseX, mouseY, localTileSize) {
|
97
|
-
var j = element.points.length - 1;
|
98
|
-
var counter = false;
|
99
|
-
for (var i = 0; i < element.points.length; i++) {
|
100
|
-
var iX = element.points[i].x * localTileSize;
|
101
|
-
var iY = element.points[i].y * localTileSize;
|
102
|
-
if (mouseX === iX && mouseY === iY) {
|
103
|
-
return true;
|
104
|
-
}
|
105
|
-
var jX = element.points[j].x * localTileSize;
|
106
|
-
var jY = element.points[j].y * localTileSize;
|
107
|
-
if (iY > y !== jY > y) {
|
108
|
-
var slope = (mouseX - iX) * (jY - iY) - (jX - iX) * (mouseY - iY);
|
109
|
-
if (slope === 0) {
|
110
|
-
return true;
|
111
|
-
}
|
112
|
-
if (slope < 0 !== jY < iY) {
|
113
|
-
counter = !counter;
|
114
|
-
}
|
115
|
-
}
|
116
|
-
}
|
117
|
-
return counter;
|
118
|
-
}
|
119
|
-
|
120
|
-
function inRect(element, x, y, left, top, localTileSize, rotation) {
|
121
|
-
var width = element.width * localTileSize;
|
122
|
-
var height = element.height * localTileSize;
|
123
|
-
var rotatedLeft = left;
|
124
|
-
var rotatedTop = top;
|
125
|
-
if (rotation) {
|
126
|
-
var centerX = x + width / 2;
|
127
|
-
var centerY = y + height / 2;
|
128
|
-
rotatedLeft = centerX + (left - centerX) * Math.cos(-rotation) - (top - centerY) * Math.sin(-rotation);
|
129
|
-
rotatedTop = centerY + (top - centerY) * Math.cos(-rotation) + (left - centerX) * Math.sin(-rotation);
|
130
|
-
}
|
131
|
-
return x <= rotatedLeft && rotatedLeft <= x + width && y <= rotatedTop && rotatedTop <= y + height;
|
132
|
-
}
|
133
|
-
|
134
|
-
function onLinePath(element, left, top, localTileSize) {
|
135
|
-
var radius = element.lineWidth;
|
136
|
-
if (inCircle({
|
137
|
-
radius: radius
|
138
|
-
}, element.points[0].x * localTileSize, element.points[0].y * localTileSize, left, top, localTileSize)) {
|
139
|
-
return true;
|
140
|
-
}
|
141
|
-
if (inCircle({
|
142
|
-
radius: radius
|
143
|
-
}, element.points[element.points.length - 1].x * localTileSize, element.points[element.points.length - 1].y * localTileSize, left, top, localTileSize)) {
|
144
|
-
return true;
|
145
|
-
}
|
146
|
-
for (var i = 1; i < element.points.length; i++) {
|
147
|
-
var from = {
|
148
|
-
x: element.points[i - 1].x * localTileSize,
|
149
|
-
y: element.points[i - 1].y * localTileSize
|
150
|
-
};
|
151
|
-
var to = {
|
152
|
-
x: element.points[i].x * localTileSize,
|
153
|
-
y: element.points[i].y * localTileSize
|
154
|
-
};
|
155
|
-
var diffX = from.x - to.x;
|
156
|
-
var diffY = from.y - to.y;
|
157
|
-
var length = Math.sqrt(diffX * diffX + diffY * diffY);
|
158
|
-
var dot = ((left - from.x) * (to.x - from.x) + (top - from.y) * (to.y - from.y)) / Math.pow(length, 2);
|
159
|
-
var point = {
|
160
|
-
x: from.x + dot * (to.x - from.x),
|
161
|
-
y: from.y + dot * (to.y - from.y)
|
162
|
-
};
|
163
|
-
if (inCircle({
|
164
|
-
radius: radius
|
165
|
-
}, point.x, point.y, left, top, localTileSize)) {
|
166
|
-
return true;
|
167
|
-
}
|
168
|
-
}
|
169
|
-
return false;
|
170
|
-
}
|
171
|
-
|
172
|
-
function collideElement(e, elements, left, top, tileSize, zoom) {
|
173
|
-
var localTileSize = calcTileSize(tileSize, zoom);
|
174
|
-
var validElements = [];
|
175
|
-
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
176
|
-
var element = _step.value;
|
177
|
-
if (!element.hasCollisions) {
|
178
|
-
continue;
|
179
|
-
}
|
180
|
-
var x = element.x * localTileSize;
|
181
|
-
var y = element.y * localTileSize;
|
182
|
-
switch (element.constructorName) {
|
183
|
-
case 'Rect':
|
184
|
-
case 'CanvasImage':
|
185
|
-
if (inRect(element, x, y, left, top, localTileSize, element.rotation)) {
|
186
|
-
validElements.push({
|
187
|
-
id: element.id,
|
188
|
-
element: element,
|
189
|
-
originalEvent: e,
|
190
|
-
posOnMap: {
|
191
|
-
x: element.x,
|
192
|
-
y: element.y
|
193
|
-
}
|
194
|
-
});
|
195
|
-
}
|
196
|
-
break;
|
197
|
-
case 'Circle':
|
198
|
-
if (inCircle(element, x, y, left, top, localTileSize)) {
|
199
|
-
validElements.push({
|
200
|
-
id: element.id,
|
201
|
-
element: element,
|
202
|
-
originalEvent: e,
|
203
|
-
posOnMap: {
|
204
|
-
x: element.x,
|
205
|
-
y: element.y
|
206
|
-
}
|
207
|
-
});
|
208
|
-
}
|
209
|
-
break;
|
210
|
-
case 'Polygon':
|
211
|
-
if (inPoly(element, x, y, left, top, localTileSize)) {
|
212
|
-
validElements.push({
|
213
|
-
id: element.id,
|
214
|
-
element: element,
|
215
|
-
originalEvent: e,
|
216
|
-
posOnMap: {
|
217
|
-
x: element.x,
|
218
|
-
y: element.y
|
219
|
-
}
|
220
|
-
});
|
221
|
-
}
|
222
|
-
break;
|
223
|
-
case 'LinePath':
|
224
|
-
if (onLinePath(element, left, top, localTileSize)) {
|
225
|
-
validElements.push({
|
226
|
-
id: element.id,
|
227
|
-
element: element,
|
228
|
-
originalEvent: e,
|
229
|
-
posOnMap: {
|
230
|
-
x: element.x,
|
231
|
-
y: element.y
|
232
|
-
}
|
233
|
-
});
|
234
|
-
}
|
235
|
-
break;
|
236
|
-
}
|
237
|
-
}
|
238
|
-
if (validElements.length === 0) {
|
239
|
-
return null;
|
240
|
-
}
|
241
|
-
if (validElements.length === 1) {
|
242
|
-
return validElements[0];
|
243
|
-
}
|
244
|
-
validElements.sort(function (a, b) {
|
245
|
-
if (a.element.zIndex > b.element.zIndex) {
|
246
|
-
return -1;
|
247
|
-
}
|
248
|
-
if (a.element.zIndex < b.element.zIndex) {
|
249
|
-
return 1;
|
250
|
-
}
|
251
|
-
if (a.id > b.id) {
|
252
|
-
return 1;
|
253
|
-
}
|
254
|
-
if (a.id < b.id) {
|
255
|
-
return -1;
|
256
|
-
}
|
257
|
-
return 0;
|
258
|
-
});
|
259
|
-
return validElements[0];
|
260
|
-
}
|
261
|
-
|
262
|
-
function computeEventPositions(props, event, tileSize) {
|
263
|
-
var left = -props.left - props.deltaLeft + event.pageX - event.target.offsetLeft;
|
264
|
-
var top = -props.top - props.deltaTop + event.pageY - event.target.offsetTop;
|
265
|
-
var posOnMap = {
|
266
|
-
x: Math.floor(left / tileSize / props.zoom),
|
267
|
-
y: Math.floor(top / tileSize / props.zoom)
|
268
|
-
};
|
269
|
-
return {
|
270
|
-
left: left,
|
271
|
-
top: top,
|
272
|
-
posOnMap: posOnMap
|
273
|
-
};
|
274
|
-
}
|
275
|
-
|
276
|
-
function elementClick(e, elements, tileSize, state) {
|
277
|
-
var _computeEventPosition = computeEventPositions(state, e, tileSize),
|
278
|
-
left = _computeEventPosition.left,
|
279
|
-
top = _computeEventPosition.top,
|
280
|
-
posOnMap = _computeEventPosition.posOnMap;
|
281
|
-
var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
|
282
|
-
if (clickedElement !== null) {
|
283
|
-
return clickedElement;
|
284
|
-
}
|
285
|
-
return {
|
286
|
-
id: null,
|
287
|
-
element: null,
|
288
|
-
originalEvent: e,
|
289
|
-
posOnMap: posOnMap
|
290
|
-
};
|
291
|
-
}
|
292
|
-
|
293
|
-
function elementRightClick(e, elements, tileSize, state) {
|
294
|
-
var left = -state.left - state.deltaLeft + e.pageX - e.target.offsetLeft;
|
295
|
-
var top = -state.top - state.deltaTop + e.pageY - e.target.offsetTop;
|
296
|
-
var clickedElement = collideElement(e, elements, left, top, tileSize, state.zoom);
|
297
|
-
if (clickedElement !== null) {
|
298
|
-
return clickedElement;
|
299
|
-
}
|
300
|
-
return {
|
301
|
-
id: null,
|
302
|
-
element: null,
|
303
|
-
originalEvent: e,
|
304
|
-
posOnMap: {
|
305
|
-
x: Math.floor(left / tileSize / state.zoom),
|
306
|
-
y: Math.floor(top / tileSize / state.zoom)
|
307
|
-
}
|
308
|
-
};
|
309
|
-
}
|
310
|
-
|
311
|
-
var LEFT_BUTTON = 1;
|
312
|
-
var selectedObject = null;
|
313
|
-
var unselectTimeoutId = 0;
|
314
|
-
var UNSELECT_TIMEOUT_MS = 300;
|
315
|
-
function mouseMove(event, elements, tileSize, props, setProps, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover) {
|
316
|
-
var newProps = _extends({}, props);
|
317
|
-
var _computeEventPosition = computeEventPositions(props, event, tileSize),
|
318
|
-
left = _computeEventPosition.left,
|
319
|
-
top = _computeEventPosition.top,
|
320
|
-
posOnMap = _computeEventPosition.posOnMap;
|
321
|
-
if (event.nativeEvent.buttons === LEFT_BUTTON && !!props.prevX) {
|
322
|
-
var moved = false;
|
323
|
-
if (dragObjects) {
|
324
|
-
if (selectedObject === null) {
|
325
|
-
selectedObject = collideElement(event, elements, left, top, tileSize, props.zoom);
|
326
|
-
}
|
327
|
-
if (selectedObject !== null && selectedObject.element.draggable) {
|
328
|
-
selectedObject.element.x = -props.left - props.deltaLeft + (event.clientX - props.boundingClientRect.left) - selectedObject.element.width / 2;
|
329
|
-
selectedObject.element.y = -props.top - props.deltaLeft + (event.clientY - props.boundingClientRect.top) - selectedObject.element.height / 2;
|
330
|
-
moved = true;
|
331
|
-
if (onElementMoved) {
|
332
|
-
onElementMoved(selectedObject, event.screenX - props.prevX, event.screenY - props.prevY);
|
333
|
-
}
|
334
|
-
if (onHover) {
|
335
|
-
onHover(null, posOnMap);
|
336
|
-
}
|
337
|
-
}
|
338
|
-
}
|
339
|
-
if (!moved) {
|
340
|
-
if (!lockXAxis) {
|
341
|
-
newProps.left += event.screenX - props.prevX;
|
342
|
-
}
|
343
|
-
if (!lockYAxis) {
|
344
|
-
newProps.top += event.screenY - props.prevY;
|
345
|
-
}
|
346
|
-
}
|
347
|
-
if (event.nativeEvent.pointerType !== 'mouse') {
|
348
|
-
unselectTimeoutId = setTimeout(function () {
|
349
|
-
selectedObject = null;
|
350
|
-
setProps(_extends({}, newProps, {
|
351
|
-
prevX: null,
|
352
|
-
prevY: null
|
353
|
-
}));
|
354
|
-
}, UNSELECT_TIMEOUT_MS);
|
355
|
-
}
|
356
|
-
} else {
|
357
|
-
if (onHover) {
|
358
|
-
onHover(collideElement(event, elements, left, top, tileSize, props.zoom), posOnMap);
|
359
|
-
}
|
360
|
-
selectedObject = null;
|
361
|
-
}
|
362
|
-
setProps(_extends({}, newProps, {
|
363
|
-
prevX: event.screenX,
|
364
|
-
prevY: event.screenY
|
365
|
-
}));
|
366
|
-
}
|
367
|
-
|
368
|
-
var WHEEL_DELTA = 0.05;
|
369
|
-
function mouseWheel(event, props, setProps, minZoom, maxZoom) {
|
370
|
-
var zoom = props.zoom;
|
371
|
-
if (event.deltaY < 0) {
|
372
|
-
zoom += WHEEL_DELTA;
|
373
|
-
} else {
|
374
|
-
zoom -= WHEEL_DELTA;
|
375
|
-
}
|
376
|
-
zoom = Math.max(zoom, minZoom);
|
377
|
-
zoom = Math.min(zoom, maxZoom);
|
378
|
-
setProps(_extends({}, props, {
|
379
|
-
zoom: zoom
|
380
|
-
}));
|
381
|
-
}
|
382
|
-
|
383
|
-
function calcRatioForMinimap(elements, width, height, minimapWidth, minimapHeight, tileSize) {
|
384
|
-
var elementsX = elements.map(function (e) {
|
385
|
-
if (Array.isArray(e.points)) {
|
386
|
-
return e.points.map(function (p) {
|
387
|
-
return p.x * tileSize;
|
388
|
-
});
|
389
|
-
}
|
390
|
-
return [e.x * tileSize];
|
391
|
-
}).flat();
|
392
|
-
var minX = Math.min.apply(Math, elementsX);
|
393
|
-
var maxX = Math.max.apply(Math, elementsX);
|
394
|
-
width = Math.max(2 * maxX, -2 * minX, width);
|
395
|
-
var elementsY = elements.map(function (e) {
|
396
|
-
if (Array.isArray(e.points)) {
|
397
|
-
return e.points.map(function (p) {
|
398
|
-
return p.y * tileSize;
|
399
|
-
});
|
400
|
-
}
|
401
|
-
return [e.y * tileSize];
|
402
|
-
}).flat();
|
403
|
-
var minY = Math.min.apply(Math, elementsY);
|
404
|
-
var maxY = Math.max.apply(Math, elementsY);
|
405
|
-
height = Math.max(2 * maxY, -2 * minY, height);
|
406
|
-
var ratio = Math.max(width / minimapWidth, height / minimapHeight);
|
407
|
-
return ratio;
|
408
|
-
}
|
409
|
-
|
410
|
-
function sortElements(elements) {
|
411
|
-
elements.sort(function (a, b) {
|
412
|
-
if (a.zIndex !== b.zIndex) {
|
413
|
-
return a.zIndex - b.zIndex;
|
414
|
-
}
|
415
|
-
if (a.fill === b.fill) {
|
416
|
-
if (a.stroke === b.stroke) {
|
417
|
-
return 0;
|
418
|
-
}
|
419
|
-
if (a.stroke < b.stroke) {
|
420
|
-
return 1;
|
421
|
-
}
|
422
|
-
return -1;
|
423
|
-
}
|
424
|
-
if (a.fill < b.fill) {
|
425
|
-
return 1;
|
426
|
-
}
|
427
|
-
if (a.fill > b.fill) {
|
428
|
-
return -1;
|
429
|
-
}
|
430
|
-
return 0;
|
431
|
-
});
|
432
|
-
return elements;
|
433
|
-
}
|
434
|
-
|
435
|
-
var CanvasObject = /*#__PURE__*/function () {
|
436
|
-
function CanvasObject(id, x, y, zIndex, draggable, hasCollisions) {
|
437
|
-
this.id = id;
|
438
|
-
this.x = x;
|
439
|
-
this.y = y;
|
440
|
-
this['z-index'] = zIndex;
|
441
|
-
this.draggable = draggable;
|
442
|
-
this.hasCollisions = hasCollisions;
|
443
|
-
}
|
444
|
-
return _createClass(CanvasObject, [{
|
445
|
-
key: "zIndex",
|
446
|
-
get: function get() {
|
447
|
-
return this['z-index'] || 0;
|
448
|
-
},
|
449
|
-
set: function set(zIndex) {
|
450
|
-
this['z-index'] = zIndex;
|
451
|
-
}
|
452
|
-
}, {
|
453
|
-
key: "constructorName",
|
454
|
-
get: function get() {
|
455
|
-
return 'CanvasObject';
|
456
|
-
}
|
457
|
-
}]);
|
458
|
-
}();
|
459
|
-
|
460
|
-
var CanvasImage = /*#__PURE__*/function (_CanvasObject) {
|
461
|
-
function CanvasImage(_ref) {
|
462
|
-
var _this;
|
463
|
-
var id = _ref.id,
|
464
|
-
x = _ref.x,
|
465
|
-
y = _ref.y,
|
466
|
-
width = _ref.width,
|
467
|
-
height = _ref.height,
|
468
|
-
src = _ref.src,
|
469
|
-
zIndex = _ref.zIndex,
|
470
|
-
draggable = _ref.draggable,
|
471
|
-
hasCollisions = _ref.hasCollisions,
|
472
|
-
rotation = _ref.rotation;
|
473
|
-
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
474
|
-
_this.width = width;
|
475
|
-
_this.height = height;
|
476
|
-
_this.src = src;
|
477
|
-
_this.rotation = rotation;
|
478
|
-
return _this;
|
479
|
-
}
|
480
|
-
_inheritsLoose(CanvasImage, _CanvasObject);
|
481
|
-
var _proto = CanvasImage.prototype;
|
482
|
-
_proto.crop = function crop(sx, swidth, sheight) {
|
483
|
-
this.sx = sx;
|
484
|
-
this.sy = sx;
|
485
|
-
this.swidth = swidth;
|
486
|
-
this.sheight = sheight;
|
487
|
-
};
|
488
|
-
return _createClass(CanvasImage, [{
|
489
|
-
key: "constructorName",
|
490
|
-
get: function get() {
|
491
|
-
return 'CanvasImage';
|
492
|
-
}
|
493
|
-
}]);
|
494
|
-
}(CanvasObject);
|
495
|
-
|
496
|
-
var ColoredCanvasObject = /*#__PURE__*/function (_CanvasObject) {
|
497
|
-
function ColoredCanvasObject(id, x, y, fill, stroke, zIndex, draggable, hasCollisions) {
|
498
|
-
var _this;
|
499
|
-
_this = _CanvasObject.call(this, id, x, y, zIndex, draggable, hasCollisions) || this;
|
500
|
-
_this.fill = fill;
|
501
|
-
_this.stroke = stroke;
|
502
|
-
return _this;
|
503
|
-
}
|
504
|
-
_inheritsLoose(ColoredCanvasObject, _CanvasObject);
|
505
|
-
return _createClass(ColoredCanvasObject, [{
|
506
|
-
key: "constructorName",
|
507
|
-
get: function get() {
|
508
|
-
return 'ColoredCanvasObject';
|
509
|
-
}
|
510
|
-
}]);
|
511
|
-
}(CanvasObject);
|
512
|
-
|
513
|
-
var Circle = /*#__PURE__*/function (_ColoredCanvasObject) {
|
514
|
-
function Circle(_ref) {
|
515
|
-
var _this;
|
516
|
-
var id = _ref.id,
|
517
|
-
x = _ref.x,
|
518
|
-
y = _ref.y,
|
519
|
-
radius = _ref.radius,
|
520
|
-
fill = _ref.fill,
|
521
|
-
stroke = _ref.stroke,
|
522
|
-
zIndex = _ref.zIndex,
|
523
|
-
draggable = _ref.draggable,
|
524
|
-
hasCollisions = _ref.hasCollisions;
|
525
|
-
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
526
|
-
_this.radius = radius;
|
527
|
-
return _this;
|
528
|
-
}
|
529
|
-
_inheritsLoose(Circle, _ColoredCanvasObject);
|
530
|
-
return _createClass(Circle, [{
|
531
|
-
key: "constructorName",
|
532
|
-
get: function get() {
|
533
|
-
return 'Circle';
|
534
|
-
}
|
535
|
-
}]);
|
536
|
-
}(ColoredCanvasObject);
|
537
|
-
|
538
|
-
var LinePath = /*#__PURE__*/function (_ColoredCanvasObject) {
|
539
|
-
function LinePath(_ref) {
|
540
|
-
var _this;
|
541
|
-
var id = _ref.id,
|
542
|
-
lineWidth = _ref.lineWidth,
|
543
|
-
points = _ref.points,
|
544
|
-
stroke = _ref.stroke,
|
545
|
-
zIndex = _ref.zIndex,
|
546
|
-
smoothCorners = _ref.smoothCorners,
|
547
|
-
smoothCornersRadius = _ref.smoothCornersRadius,
|
548
|
-
hasCollisions = _ref.hasCollisions;
|
549
|
-
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, 'none', stroke, zIndex, false, hasCollisions) || this;
|
550
|
-
_this.points = points;
|
551
|
-
_this.lineWidth = lineWidth;
|
552
|
-
_this.smoothCorners = smoothCorners;
|
553
|
-
_this.smoothCornersRadius = smoothCornersRadius;
|
554
|
-
return _this;
|
555
|
-
}
|
556
|
-
_inheritsLoose(LinePath, _ColoredCanvasObject);
|
557
|
-
return _createClass(LinePath, [{
|
558
|
-
key: "constructorName",
|
559
|
-
get: function get() {
|
560
|
-
return 'LinePath';
|
561
|
-
}
|
562
|
-
}]);
|
563
|
-
}(ColoredCanvasObject);
|
564
|
-
|
565
|
-
var Polygon = /*#__PURE__*/function (_ColoredCanvasObject) {
|
566
|
-
function Polygon(_ref) {
|
567
|
-
var _this;
|
568
|
-
var id = _ref.id,
|
569
|
-
points = _ref.points,
|
570
|
-
fill = _ref.fill,
|
571
|
-
stroke = _ref.stroke,
|
572
|
-
zIndex = _ref.zIndex,
|
573
|
-
draggable = _ref.draggable,
|
574
|
-
hasCollisions = _ref.hasCollisions;
|
575
|
-
_this = _ColoredCanvasObject.call(this, id, points[0].x, points[0].y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
576
|
-
_this.points = points;
|
577
|
-
return _this;
|
578
|
-
}
|
579
|
-
_inheritsLoose(Polygon, _ColoredCanvasObject);
|
580
|
-
return _createClass(Polygon, [{
|
581
|
-
key: "constructorName",
|
582
|
-
get: function get() {
|
583
|
-
return 'Polygon';
|
584
|
-
}
|
585
|
-
}]);
|
586
|
-
}(ColoredCanvasObject);
|
587
|
-
|
588
|
-
var Rect = /*#__PURE__*/function (_ColoredCanvasObject) {
|
589
|
-
function Rect(_ref) {
|
590
|
-
var _this;
|
591
|
-
var id = _ref.id,
|
592
|
-
x = _ref.x,
|
593
|
-
y = _ref.y,
|
594
|
-
width = _ref.width,
|
595
|
-
height = _ref.height,
|
596
|
-
fill = _ref.fill,
|
597
|
-
stroke = _ref.stroke,
|
598
|
-
zIndex = _ref.zIndex,
|
599
|
-
draggable = _ref.draggable,
|
600
|
-
hasCollisions = _ref.hasCollisions,
|
601
|
-
rotation = _ref.rotation;
|
602
|
-
_this = _ColoredCanvasObject.call(this, id, x, y, fill, stroke, zIndex, draggable, hasCollisions) || this;
|
603
|
-
_this.width = width;
|
604
|
-
_this.height = height;
|
605
|
-
_this.rotation = rotation;
|
606
|
-
return _this;
|
607
|
-
}
|
608
|
-
_inheritsLoose(Rect, _ColoredCanvasObject);
|
609
|
-
return _createClass(Rect, [{
|
610
|
-
key: "constructorName",
|
611
|
-
get: function get() {
|
612
|
-
return 'Rect';
|
613
|
-
}
|
614
|
-
}]);
|
615
|
-
}(ColoredCanvasObject);
|
616
|
-
|
617
|
-
function renderCircle(context, element, left, top, localTileSize) {
|
618
|
-
context.beginPath();
|
619
|
-
context.arc(left + element.x * localTileSize, top + element.y * localTileSize, element.radius * localTileSize, 0, 2 * Math.PI);
|
620
|
-
if (element.fill) {
|
621
|
-
context.fill();
|
622
|
-
}
|
623
|
-
if (element.stroke) {
|
624
|
-
context.stroke();
|
625
|
-
}
|
626
|
-
}
|
627
|
-
|
628
|
-
window.__canvas2dWrapper__ = {};
|
629
|
-
window.__canvas2dWrapper__.imgCache = {};
|
630
|
-
function renderImage(context, element, left, top, localTileSize) {
|
631
|
-
if (!__canvas2dWrapper__.imgCache[element.src]) {
|
632
|
-
__canvas2dWrapper__.imgCache[element.src] = new Image();
|
633
|
-
__canvas2dWrapper__.imgCache[element.src].src = element.src;
|
634
|
-
}
|
635
|
-
var positionX = left + element.x * localTileSize;
|
636
|
-
var positionY = top + element.y * localTileSize;
|
637
|
-
var width = element.width * localTileSize;
|
638
|
-
var height = element.height * localTileSize;
|
639
|
-
if (element.rotation) {
|
640
|
-
context.save();
|
641
|
-
context.translate(positionX + width / 2, positionY + height / 2);
|
642
|
-
context.rotate(element.rotation);
|
643
|
-
if (!element.sx) {
|
644
|
-
context.drawImage(__canvas2dWrapper__.imgCache[element.src], -width / 2, -height / 2, width, height);
|
645
|
-
} else {
|
646
|
-
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, -element.swidth / 2, -element.sheight / 2, width, height);
|
647
|
-
}
|
648
|
-
context.restore();
|
649
|
-
} else {
|
650
|
-
if (!element.sx) {
|
651
|
-
context.drawImage(__canvas2dWrapper__.imgCache[element.src], positionX, positionY, width, height);
|
652
|
-
} else {
|
653
|
-
context.drawImage(__canvas2dWrapper__.imgCache[element.src], element.sx, element.sy, element.swidth, element.sheight, positionX, positionY, width, height);
|
654
|
-
}
|
655
|
-
}
|
656
|
-
}
|
657
|
-
|
658
|
-
function renderLinePath(context, element, left, top, localTileSize) {
|
659
|
-
var defaultLineWidth = context.lineWidth;
|
660
|
-
var points = element.points.map(function (p) {
|
661
|
-
return {
|
662
|
-
x: left + p.x * localTileSize,
|
663
|
-
y: top + p.y * localTileSize
|
664
|
-
};
|
665
|
-
});
|
666
|
-
if (points.length < 2) return;
|
667
|
-
context.beginPath();
|
668
|
-
context.moveTo(points[0].x, points[0].y);
|
669
|
-
if (element.smoothCorners) {
|
670
|
-
for (var i = 1; i < points.length - 1; i++) {
|
671
|
-
var prev = points[i - 1];
|
672
|
-
var curr = points[i];
|
673
|
-
var next = points[i + 1];
|
674
|
-
var dx1 = curr.x - prev.x;
|
675
|
-
var dy1 = curr.y - prev.y;
|
676
|
-
var dx2 = next.x - curr.x;
|
677
|
-
var dy2 = next.y - curr.y;
|
678
|
-
var len1 = Math.hypot(dx1, dy1);
|
679
|
-
var len2 = Math.hypot(dx2, dy2);
|
680
|
-
var offset1X = dx1 / len1 * element.smoothCornersRadius;
|
681
|
-
var offset1Y = dy1 / len1 * element.smoothCornersRadius;
|
682
|
-
var offset2X = dx2 / len2 * element.smoothCornersRadius;
|
683
|
-
var offset2Y = dy2 / len2 * element.smoothCornersRadius;
|
684
|
-
var cornerStart = {
|
685
|
-
x: curr.x - offset1X,
|
686
|
-
y: curr.y - offset1Y
|
687
|
-
};
|
688
|
-
var cornerEnd = {
|
689
|
-
x: curr.x + offset2X,
|
690
|
-
y: curr.y + offset2Y
|
691
|
-
};
|
692
|
-
context.lineTo(cornerStart.x, cornerStart.y);
|
693
|
-
context.quadraticCurveTo(curr.x, curr.y, cornerEnd.x, cornerEnd.y);
|
694
|
-
}
|
695
|
-
context.lineTo(points[points.length - 1].x, points[points.length - 1].y);
|
696
|
-
} else {
|
697
|
-
for (var _i = 1; _i < points.length; _i++) {
|
698
|
-
context.lineTo(points[_i].x, points[_i].y);
|
699
|
-
}
|
700
|
-
}
|
701
|
-
context.lineWidth = element.lineWidth * localTileSize;
|
702
|
-
context.stroke();
|
703
|
-
context.lineWidth = defaultLineWidth;
|
704
|
-
}
|
705
|
-
|
706
|
-
function renderPolygon(context, element, left, top, localTileSize) {
|
707
|
-
context.beginPath();
|
708
|
-
context.moveTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
709
|
-
for (var i = 0; i < element.points.length; i++) {
|
710
|
-
context.lineTo(left + element.points[i].x * localTileSize, top + element.points[i].y * localTileSize);
|
711
|
-
}
|
712
|
-
context.lineTo(left + element.points[0].x * localTileSize, top + element.points[0].y * localTileSize);
|
713
|
-
if (element.fill) {
|
714
|
-
context.fill();
|
715
|
-
}
|
716
|
-
if (element.stroke) {
|
717
|
-
context.stroke();
|
718
|
-
}
|
719
|
-
}
|
720
|
-
|
721
|
-
function renderRect(context, element, left, top, localTileSize) {
|
722
|
-
var positionX = left + element.x * localTileSize;
|
723
|
-
var positionY = top + element.y * localTileSize;
|
724
|
-
var width = element.width * localTileSize;
|
725
|
-
var height = element.height * localTileSize;
|
726
|
-
if (element.rotation) {
|
727
|
-
context.save();
|
728
|
-
context.translate(positionX + width / 2, positionY + height / 2);
|
729
|
-
context.rotate(element.rotation);
|
730
|
-
if (element.fill) {
|
731
|
-
context.fillRect(-width / 2, -width / 2, width, height);
|
732
|
-
}
|
733
|
-
if (element.stroke) {
|
734
|
-
context.strokeRect(-width / 2, -width / 2, width, height);
|
735
|
-
}
|
736
|
-
context.restore();
|
737
|
-
} else {
|
738
|
-
if (element.fill) {
|
739
|
-
context.fillRect(positionX, positionY, width, height);
|
740
|
-
}
|
741
|
-
if (element.stroke) {
|
742
|
-
context.strokeRect(positionX, positionY, width, height);
|
743
|
-
}
|
744
|
-
}
|
745
|
-
}
|
746
|
-
|
747
|
-
var _renderFn;
|
748
|
-
var renderFn = (_renderFn = {}, _renderFn[new Circle({}).constructorName] = renderCircle, _renderFn[new CanvasImage({}).constructorName] = renderImage, _renderFn[new LinePath({
|
749
|
-
points: [{}]
|
750
|
-
}).constructorName] = renderLinePath, _renderFn[new Polygon({
|
751
|
-
points: [{}]
|
752
|
-
}).constructorName] = renderPolygon, _renderFn[new Rect({}).constructorName] = renderRect, _renderFn);
|
753
|
-
function renderCanvas(context, width, height, elements, tileSize, state) {
|
754
|
-
var left = state.left + state.deltaLeft;
|
755
|
-
var top = state.top + state.deltaTop;
|
756
|
-
var prevFillStyle = '';
|
757
|
-
var prevStrokeStyle = '';
|
758
|
-
var localTileSize = calcTileSize(tileSize, state.zoom);
|
759
|
-
context.clearRect(0, 0, width, height);
|
760
|
-
for (var _iterator = _createForOfIteratorHelperLoose(elements), _step; !(_step = _iterator()).done;) {
|
761
|
-
var element = _step.value;
|
762
|
-
if (element.fill !== prevFillStyle && typeof element.fill !== 'undefined') {
|
763
|
-
context.fillStyle = element.fill;
|
764
|
-
prevFillStyle = element.fill;
|
765
|
-
}
|
766
|
-
if (element.stroke !== prevStrokeStyle && typeof element.stroke !== 'undefined') {
|
767
|
-
context.strokeStyle = element.stroke;
|
768
|
-
prevStrokeStyle = element.stroke;
|
769
|
-
}
|
770
|
-
var type = element.constructorName;
|
771
|
-
if (renderFn[type]) {
|
772
|
-
renderFn[type](context, element, left, top, localTileSize);
|
773
|
-
} else {
|
774
|
-
throw new Error('Unsupported shape type:' + type);
|
775
|
-
}
|
776
|
-
}
|
777
|
-
}
|
778
|
-
|
779
|
-
var _excluded = ["width", "height", "trackMouseMove", "minZoom", "maxZoom", "tileSize", "onClick", "onRightClick", "onHover", "onElementMoved", "onWheel", "onFrame", "lockXAxis", "lockYAxis", "smoothingQuality", "dragObjects", "deltaLeft", "deltaTop", "showMinimap", "minimapWidth", "minimapHeight", "minimapFilter"];
|
780
|
-
var elements = {};
|
781
|
-
function Canvas2D(_ref) {
|
782
|
-
var width = _ref.width,
|
783
|
-
height = _ref.height,
|
784
|
-
_ref$trackMouseMove = _ref.trackMouseMove,
|
785
|
-
trackMouseMove = _ref$trackMouseMove === void 0 ? true : _ref$trackMouseMove,
|
786
|
-
_ref$minZoom = _ref.minZoom,
|
787
|
-
minZoom = _ref$minZoom === void 0 ? 1 : _ref$minZoom,
|
788
|
-
_ref$maxZoom = _ref.maxZoom,
|
789
|
-
maxZoom = _ref$maxZoom === void 0 ? 1 : _ref$maxZoom,
|
790
|
-
_ref$tileSize = _ref.tileSize,
|
791
|
-
tileSize = _ref$tileSize === void 0 ? 1 : _ref$tileSize,
|
792
|
-
onClick = _ref.onClick,
|
793
|
-
onRightClick = _ref.onRightClick,
|
794
|
-
onHover = _ref.onHover,
|
795
|
-
onElementMoved = _ref.onElementMoved,
|
796
|
-
onWheel = _ref.onWheel,
|
797
|
-
onFrame = _ref.onFrame,
|
798
|
-
_ref$lockXAxis = _ref.lockXAxis,
|
799
|
-
lockXAxis = _ref$lockXAxis === void 0 ? false : _ref$lockXAxis,
|
800
|
-
_ref$lockYAxis = _ref.lockYAxis,
|
801
|
-
lockYAxis = _ref$lockYAxis === void 0 ? false : _ref$lockYAxis,
|
802
|
-
_ref$smoothingQuality = _ref.smoothingQuality,
|
803
|
-
smoothingQuality = _ref$smoothingQuality === void 0 ? 'medium' : _ref$smoothingQuality,
|
804
|
-
_ref$dragObjects = _ref.dragObjects,
|
805
|
-
dragObjects = _ref$dragObjects === void 0 ? false : _ref$dragObjects,
|
806
|
-
_ref$deltaLeft = _ref.deltaLeft,
|
807
|
-
deltaLeft = _ref$deltaLeft === void 0 ? 0 : _ref$deltaLeft,
|
808
|
-
_ref$deltaTop = _ref.deltaTop,
|
809
|
-
deltaTop = _ref$deltaTop === void 0 ? 0 : _ref$deltaTop,
|
810
|
-
_ref$showMinimap = _ref.showMinimap,
|
811
|
-
showMinimap = _ref$showMinimap === void 0 ? false : _ref$showMinimap,
|
812
|
-
_ref$minimapWidth = _ref.minimapWidth,
|
813
|
-
minimapWidth = _ref$minimapWidth === void 0 ? 240 : _ref$minimapWidth,
|
814
|
-
_ref$minimapHeight = _ref.minimapHeight,
|
815
|
-
minimapHeight = _ref$minimapHeight === void 0 ? 120 : _ref$minimapHeight,
|
816
|
-
_ref$minimapFilter = _ref.minimapFilter,
|
817
|
-
minimapFilter = _ref$minimapFilter === void 0 ? function (e) {
|
818
|
-
return true;
|
819
|
-
} : _ref$minimapFilter,
|
820
|
-
otherProps = _objectWithoutPropertiesLoose(_ref, _excluded);
|
821
|
-
if (!elements[otherProps.id]) {
|
822
|
-
elements[otherProps.id] = [];
|
823
|
-
}
|
824
|
-
var _useState = React.useState({}),
|
825
|
-
state = _useState[0],
|
826
|
-
setState = _useState[1];
|
827
|
-
var canvasRef = React.useCallback(function (canvas) {
|
828
|
-
if (canvas !== null) {
|
829
|
-
var context = canvas.getContext('2d');
|
830
|
-
if (smoothingQuality === false) {
|
831
|
-
context.imageSmoothingEnabled = false;
|
832
|
-
} else {
|
833
|
-
context.imageSmoothingEnabled = true;
|
834
|
-
context.imageSmoothingQuality = smoothingQuality;
|
835
|
-
}
|
836
|
-
setState(function (s) {
|
837
|
-
return _extends({}, s, {
|
838
|
-
boundingClientRect: canvas.getBoundingClientRect(),
|
839
|
-
canvas: canvas,
|
840
|
-
context: context,
|
841
|
-
left: width / 2,
|
842
|
-
top: height / 2,
|
843
|
-
width: width,
|
844
|
-
height: height,
|
845
|
-
zoom: 1
|
846
|
-
});
|
847
|
-
});
|
848
|
-
}
|
849
|
-
}, []);
|
850
|
-
var canvasMapRef = React.useCallback(function (minimapCanvas) {
|
851
|
-
if (minimapCanvas !== null) {
|
852
|
-
var minimapContext = minimapCanvas.getContext('2d');
|
853
|
-
setState(function (s) {
|
854
|
-
return _extends({}, s, {
|
855
|
-
boundingClientRect: minimapCanvas.getBoundingClientRect(),
|
856
|
-
minimapCanvas: minimapCanvas,
|
857
|
-
minimapContext: minimapContext
|
858
|
-
});
|
859
|
-
});
|
860
|
-
}
|
861
|
-
}, []);
|
862
|
-
state.deltaTop = deltaTop;
|
863
|
-
state.deltaLeft = deltaLeft;
|
864
|
-
if (typeof width !== 'number' || typeof height !== 'number') {
|
865
|
-
throw new Error('width/height should be specified and be numbers.');
|
866
|
-
}
|
867
|
-
if (minZoom > maxZoom) {
|
868
|
-
throw new Error('minZoom should be lower than maxZoom.');
|
869
|
-
}
|
870
|
-
if (typeof onClick !== 'function' && typeof onClick !== 'undefined') {
|
871
|
-
throw new Error('onClick should be a function.');
|
872
|
-
}
|
873
|
-
if (typeof onFrame !== 'function') {
|
874
|
-
throw new Error('onFrame should be a function.');
|
875
|
-
}
|
876
|
-
var onMouseMove = null;
|
877
|
-
if (trackMouseMove) {
|
878
|
-
onMouseMove = function onMouseMove(e) {
|
879
|
-
return mouseMove(e, elements[otherProps.id], tileSize, state, setState, lockXAxis, lockYAxis, dragObjects, onElementMoved, onHover);
|
880
|
-
};
|
881
|
-
}
|
882
|
-
var onWheelFn = function onWheelFn(e) {
|
883
|
-
if (onWheel) {
|
884
|
-
onWheel(e);
|
885
|
-
}
|
886
|
-
if (minZoom !== maxZoom) {
|
887
|
-
mouseWheel(e, state, setState, minZoom, maxZoom);
|
888
|
-
}
|
889
|
-
};
|
890
|
-
var onClickFn = null;
|
891
|
-
if (onClick) {
|
892
|
-
onClickFn = function onClickFn(e) {
|
893
|
-
return onClick(elementClick(e, elements[otherProps.id], tileSize, state));
|
894
|
-
};
|
895
|
-
}
|
896
|
-
React.useEffect(function () {
|
897
|
-
function onRightClickEvent(e) {
|
898
|
-
e.preventDefault();
|
899
|
-
onRightClick(elementRightClick(e, elements[otherProps.id], tileSize, state));
|
900
|
-
}
|
901
|
-
if (onRightClick && state.canvas) {
|
902
|
-
state.canvas.addEventListener('contextmenu', onRightClickEvent);
|
903
|
-
return function () {
|
904
|
-
state.canvas.removeEventListener('contextmenu', onRightClickEvent);
|
905
|
-
};
|
906
|
-
}
|
907
|
-
}, [state.canvas, onRightClick]);
|
908
|
-
React.useEffect(function () {
|
909
|
-
var shouldRender = true;
|
910
|
-
function render() {
|
911
|
-
if (!shouldRender) {
|
912
|
-
return;
|
913
|
-
}
|
914
|
-
elements[otherProps.id] = onFrame();
|
915
|
-
var sortedElements = sortElements(elements[otherProps.id]);
|
916
|
-
if (state.context) {
|
917
|
-
renderCanvas(state.context, width, height, sortedElements, tileSize, state);
|
918
|
-
}
|
919
|
-
if (showMinimap && state.minimapContext) {
|
920
|
-
var filteredElementsList = sortedElements.filter(minimapFilter);
|
921
|
-
var ratio = calcRatioForMinimap(filteredElementsList, width, height, minimapWidth, minimapHeight, tileSize);
|
922
|
-
renderCanvas(state.minimapContext, minimapWidth, minimapHeight, filteredElementsList, tileSize / ratio, {
|
923
|
-
left: minimapWidth / 2,
|
924
|
-
top: minimapHeight / 2,
|
925
|
-
deltaLeft: 0,
|
926
|
-
deltaTop: 0,
|
927
|
-
zoom: 1
|
928
|
-
});
|
929
|
-
}
|
930
|
-
window.requestAnimationFrame(render);
|
931
|
-
}
|
932
|
-
window.requestAnimationFrame(render);
|
933
|
-
return function () {
|
934
|
-
shouldRender = false;
|
935
|
-
};
|
936
|
-
}, [state.left, state.top, state.deltaLeft, state.deltaTop, state.zoom, state.context, onFrame]);
|
937
|
-
React.useEffect(function () {
|
938
|
-
setState(function (s) {
|
939
|
-
return _extends({}, s, {
|
940
|
-
left: width / 2,
|
941
|
-
top: height / 2,
|
942
|
-
width: width,
|
943
|
-
height: height
|
944
|
-
});
|
945
|
-
});
|
946
|
-
}, [width, height]);
|
947
|
-
return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("canvas", _extends({
|
948
|
-
ref: canvasRef,
|
949
|
-
width: width,
|
950
|
-
height: height,
|
951
|
-
onPointerMove: onMouseMove,
|
952
|
-
onWheel: onWheelFn,
|
953
|
-
onClick: onClickFn,
|
954
|
-
className: "canvas2d-wrapper"
|
955
|
-
}, otherProps)), showMinimap && /*#__PURE__*/React__default.createElement("canvas", {
|
956
|
-
ref: canvasMapRef,
|
957
|
-
width: minimapWidth,
|
958
|
-
height: minimapHeight,
|
959
|
-
className: "canvas2d-wrapper-minimap"
|
960
|
-
}));
|
961
|
-
}
|
962
|
-
|
963
|
-
function preloadImages(images) {
|
964
|
-
for (var _iterator = _createForOfIteratorHelperLoose(images), _step; !(_step = _iterator()).done;) {
|
965
|
-
var image = _step.value;
|
966
|
-
__canvas2dWrapper__.imgCache[image] = new Image();
|
967
|
-
__canvas2dWrapper__.imgCache[image].src = image;
|
968
|
-
}
|
969
|
-
}
|
970
|
-
|
971
|
-
var intervalId = 0;
|
972
|
-
var FRAME_INTERVAL = 15;
|
973
|
-
function useGamepad() {
|
974
|
-
var _useState = React.useState(),
|
975
|
-
gamepad = _useState[0],
|
976
|
-
setGamepad = _useState[1];
|
977
|
-
React.useEffect(function () {
|
978
|
-
clearInterval(intervalId);
|
979
|
-
intervalId = setInterval(function () {
|
980
|
-
return setGamepad(navigator.getGamepads()[0]);
|
981
|
-
}, FRAME_INTERVAL);
|
982
|
-
}, []);
|
983
|
-
return gamepad;
|
984
|
-
}
|
985
|
-
|
986
|
-
function useKeyboard() {
|
987
|
-
var _useState = React.useState({}),
|
988
|
-
keyboard = _useState[0],
|
989
|
-
setKeyboard = _useState[1];
|
990
|
-
React.useEffect(function () {
|
991
|
-
var keydown = function keydown(e) {
|
992
|
-
keyboard[e.key] = true;
|
993
|
-
setKeyboard(JSON.parse(JSON.stringify(keyboard)));
|
994
|
-
};
|
995
|
-
document.addEventListener('keydown', keydown);
|
996
|
-
var keyup = function keyup(e) {
|
997
|
-
keyboard[e.key] = false;
|
998
|
-
setKeyboard(JSON.parse(JSON.stringify(keyboard)));
|
999
|
-
};
|
1000
|
-
document.addEventListener('keyup', keyup);
|
1001
|
-
return function () {
|
1002
|
-
document.removeEventListener('keydown', keydown);
|
1003
|
-
document.removeEventListener('keyup', keyup);
|
1004
|
-
};
|
1005
|
-
}, []);
|
1006
|
-
return keyboard;
|
1007
|
-
}
|
1008
|
-
|
1009
|
-
function useMousePosition(includeTouch) {
|
1010
|
-
if (includeTouch === void 0) {
|
1011
|
-
includeTouch = true;
|
1012
|
-
}
|
1013
|
-
var _useState = React.useState({
|
1014
|
-
x: null,
|
1015
|
-
y: null
|
1016
|
-
}),
|
1017
|
-
mousePosition = _useState[0],
|
1018
|
-
setMousePosition = _useState[1];
|
1019
|
-
React.useEffect(function () {
|
1020
|
-
var updateMousePosition = function updateMousePosition(ev) {
|
1021
|
-
var x, y;
|
1022
|
-
if (ev.touches) {
|
1023
|
-
var touch = ev.touches[0];
|
1024
|
-
var _ref = [touch.clientX, touch.clientY];
|
1025
|
-
x = _ref[0];
|
1026
|
-
y = _ref[1];
|
1027
|
-
} else {
|
1028
|
-
var _ref2 = [ev.clientX, ev.clientY];
|
1029
|
-
x = _ref2[0];
|
1030
|
-
y = _ref2[1];
|
1031
|
-
}
|
1032
|
-
setMousePosition({
|
1033
|
-
x: x,
|
1034
|
-
y: y
|
1035
|
-
});
|
1036
|
-
};
|
1037
|
-
window.addEventListener('mousemove', updateMousePosition);
|
1038
|
-
if (includeTouch) {
|
1039
|
-
window.addEventListener('touchmove', updateMousePosition);
|
1040
|
-
}
|
1041
|
-
return function () {
|
1042
|
-
window.removeEventListener('mousemove', updateMousePosition);
|
1043
|
-
if (includeTouch) {
|
1044
|
-
window.removeEventListener('touchmove', updateMousePosition);
|
1045
|
-
}
|
1046
|
-
};
|
1047
|
-
}, [includeTouch]);
|
1048
|
-
return mousePosition;
|
1049
|
-
}
|
1050
|
-
|
1051
|
-
function getWindowDimensions() {
|
1052
|
-
var _document$documentEle = document.documentElement,
|
1053
|
-
width = _document$documentEle.clientWidth,
|
1054
|
-
height = _document$documentEle.clientHeight;
|
1055
|
-
return {
|
1056
|
-
width: width,
|
1057
|
-
height: height
|
1058
|
-
};
|
1059
|
-
}
|
1060
|
-
function useWindowDimensions() {
|
1061
|
-
var _useState = React.useState(getWindowDimensions()),
|
1062
|
-
windowDimensions = _useState[0],
|
1063
|
-
setWindowDimensions = _useState[1];
|
1064
|
-
React.useEffect(function () {
|
1065
|
-
function handleResize() {
|
1066
|
-
setWindowDimensions(getWindowDimensions());
|
1067
|
-
}
|
1068
|
-
window.addEventListener('resize', handleResize);
|
1069
|
-
return function () {
|
1070
|
-
return window.removeEventListener('resize', handleResize);
|
1071
|
-
};
|
1072
|
-
}, []);
|
1073
|
-
return windowDimensions;
|
1074
|
-
}
|
1075
|
-
|
1076
|
-
exports.Canvas2D = Canvas2D;
|
1077
|
-
exports.CanvasImage = CanvasImage;
|
1078
|
-
exports.CanvasObject = CanvasObject;
|
1079
|
-
exports.Circle = Circle;
|
1080
|
-
exports.LinePath = LinePath;
|
1081
|
-
exports.Polygon = Polygon;
|
1082
|
-
exports.Rect = Rect;
|
1083
|
-
exports.preloadImages = preloadImages;
|
1084
|
-
exports.useGamepad = useGamepad;
|
1085
|
-
exports.useKeyboard = useKeyboard;
|
1086
|
-
exports.useMousePosition = useMousePosition;
|
1087
|
-
exports.useWindowDimensions = useWindowDimensions;
|
1088
|
-
//# sourceMappingURL=index.js.map
|