litecanvas 0.207.1 → 0.207.2
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/dist.dev.js +147 -338
- package/dist/dist.js +2 -5
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/dev.js +1 -1
- package/src/index.js +155 -207
- package/src/version.js +1 -1
package/dist/dist.dev.js
CHANGED
|
@@ -113,15 +113,14 @@
|
|
|
113
113
|
};
|
|
114
114
|
var defaultPalette = ["#211e20", "#555568", "#a0a08b", "#e9efec"];
|
|
115
115
|
var assert = (condition, message = "Assertion failed") => {
|
|
116
|
-
if (!condition) throw new Error("[
|
|
116
|
+
if (!condition) throw new Error("[Litecanvas] " + message);
|
|
117
117
|
};
|
|
118
|
-
var version = "0.207.
|
|
118
|
+
var version = "0.207.2";
|
|
119
119
|
function litecanvas(settings = {}) {
|
|
120
120
|
const root = window,
|
|
121
121
|
math = Math,
|
|
122
122
|
perf = performance,
|
|
123
123
|
TWO_PI = math.PI * 2,
|
|
124
|
-
loggerPrefix = "[Litecanvas] ",
|
|
125
124
|
raf = requestAnimationFrame,
|
|
126
125
|
isNumber = Number.isFinite,
|
|
127
126
|
_browserEventListeners = [],
|
|
@@ -145,6 +144,10 @@
|
|
|
145
144
|
tapEvents: true,
|
|
146
145
|
keyboardEvents: true,
|
|
147
146
|
};
|
|
147
|
+
DEV: assert(
|
|
148
|
+
null == settings || "object" === typeof settings,
|
|
149
|
+
"litecanvas() 1st parameter must be a object or null",
|
|
150
|
+
);
|
|
148
151
|
settings = Object.assign(defaults, settings);
|
|
149
152
|
let _loop = settings.loop,
|
|
150
153
|
_initialized = false,
|
|
@@ -176,36 +179,24 @@
|
|
|
176
179
|
TWO_PI,
|
|
177
180
|
HALF_PI: TWO_PI / 4,
|
|
178
181
|
lerp: (start, end, t) => {
|
|
179
|
-
DEV: assert(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
);
|
|
183
|
-
DEV: assert(
|
|
184
|
-
isNumber(end),
|
|
185
|
-
loggerPrefix + "lerp() 2nd param must be a number",
|
|
186
|
-
);
|
|
187
|
-
DEV: assert(
|
|
188
|
-
isNumber(t),
|
|
189
|
-
loggerPrefix + "lerp() 3rd param must be a number",
|
|
190
|
-
);
|
|
182
|
+
DEV: assert(isNumber(start), "lerp() 1st parameter must be a number");
|
|
183
|
+
DEV: assert(isNumber(end), "lerp() 2nd parameter must be a number");
|
|
184
|
+
DEV: assert(isNumber(t), "lerp() 3rd parameter must be a number");
|
|
191
185
|
return start + t * (end - start);
|
|
192
186
|
},
|
|
193
187
|
deg2rad: (degs) => {
|
|
194
|
-
DEV: assert(isNumber(degs), "deg2rad() 1st
|
|
188
|
+
DEV: assert(isNumber(degs), "deg2rad() 1st parameter must be a number");
|
|
195
189
|
return (math.PI / 180) * degs;
|
|
196
190
|
},
|
|
197
191
|
rad2deg: (rads) => {
|
|
198
|
-
DEV: assert(isNumber(rads), "rad2deg() 1st
|
|
192
|
+
DEV: assert(isNumber(rads), "rad2deg() 1st parameter must be a number");
|
|
199
193
|
return (180 / math.PI) * rads;
|
|
200
194
|
},
|
|
201
195
|
round: (n, precision = 0) => {
|
|
202
|
-
DEV: assert(
|
|
203
|
-
isNumber(n),
|
|
204
|
-
loggerPrefix + "round() 1st param must be a number",
|
|
205
|
-
);
|
|
196
|
+
DEV: assert(isNumber(n), "round() 1st parameter must be a number");
|
|
206
197
|
DEV: assert(
|
|
207
198
|
isNumber(precision) && precision >= 0,
|
|
208
|
-
|
|
199
|
+
"round() 2nd parameter must be a positive number or zero",
|
|
209
200
|
);
|
|
210
201
|
if (!precision) {
|
|
211
202
|
return math.round(n);
|
|
@@ -214,127 +205,64 @@
|
|
|
214
205
|
return math.round(n * multiplier) / multiplier;
|
|
215
206
|
},
|
|
216
207
|
clamp: (value, min, max) => {
|
|
217
|
-
DEV: assert(
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
);
|
|
221
|
-
DEV: assert(
|
|
222
|
-
isNumber(min),
|
|
223
|
-
loggerPrefix + "clamp() 2nd param must be a number",
|
|
224
|
-
);
|
|
225
|
-
DEV: assert(
|
|
226
|
-
isNumber(max),
|
|
227
|
-
loggerPrefix + "clamp() 3rd param must be a number",
|
|
228
|
-
);
|
|
208
|
+
DEV: assert(isNumber(value), "clamp() 1st parameter must be a number");
|
|
209
|
+
DEV: assert(isNumber(min), "clamp() 2nd parameter must be a number");
|
|
210
|
+
DEV: assert(isNumber(max), "clamp() 3rd parameter must be a number");
|
|
229
211
|
DEV: assert(
|
|
230
212
|
max >= min,
|
|
231
|
-
|
|
232
|
-
"clamp() the 2nd param must be less than the 3rd param",
|
|
213
|
+
"clamp() the 2nd parameter must be less than the 3rd parameter",
|
|
233
214
|
);
|
|
234
215
|
if (value < min) return min;
|
|
235
216
|
if (value > max) return max;
|
|
236
217
|
return value;
|
|
237
218
|
},
|
|
238
219
|
dist: (x1, y1, x2, y2) => {
|
|
239
|
-
DEV: assert(
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
);
|
|
243
|
-
DEV: assert(
|
|
244
|
-
isNumber(y1),
|
|
245
|
-
loggerPrefix + "dist() 2nd param must be a number",
|
|
246
|
-
);
|
|
247
|
-
DEV: assert(
|
|
248
|
-
isNumber(x2),
|
|
249
|
-
loggerPrefix + "dist() 3rd param must be a number",
|
|
250
|
-
);
|
|
251
|
-
DEV: assert(
|
|
252
|
-
isNumber(y2),
|
|
253
|
-
loggerPrefix + "dist() 4th param must be a number",
|
|
254
|
-
);
|
|
220
|
+
DEV: assert(isNumber(x1), "dist() 1st parameter must be a number");
|
|
221
|
+
DEV: assert(isNumber(y1), "dist() 2nd parameter must be a number");
|
|
222
|
+
DEV: assert(isNumber(x2), "dist() 3rd parameter must be a number");
|
|
223
|
+
DEV: assert(isNumber(y2), "dist() 4th parameter must be a number");
|
|
255
224
|
return math.hypot(x2 - x1, y2 - y1);
|
|
256
225
|
},
|
|
257
226
|
wrap: (value, min, max) => {
|
|
258
|
-
DEV: assert(
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
);
|
|
262
|
-
DEV: assert(
|
|
263
|
-
isNumber(min),
|
|
264
|
-
loggerPrefix + "wrap() 2nd param must be a number",
|
|
265
|
-
);
|
|
266
|
-
DEV: assert(
|
|
267
|
-
isNumber(max),
|
|
268
|
-
loggerPrefix + "wrap() 3rd param must be a number",
|
|
269
|
-
);
|
|
227
|
+
DEV: assert(isNumber(value), "wrap() 1st parameter must be a number");
|
|
228
|
+
DEV: assert(isNumber(min), "wrap() 2nd parameter must be a number");
|
|
229
|
+
DEV: assert(isNumber(max), "wrap() 3rd parameter must be a number");
|
|
270
230
|
DEV: assert(
|
|
271
231
|
max > min,
|
|
272
|
-
|
|
232
|
+
"wrap() the 2nd parameter must be less than the 3rd parameter",
|
|
273
233
|
);
|
|
274
234
|
return value - (max - min) * math.floor((value - min) / (max - min));
|
|
275
235
|
},
|
|
276
236
|
map(value, start1, stop1, start2, stop2, withinBounds) {
|
|
277
|
-
DEV: assert(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
);
|
|
281
|
-
DEV: assert(
|
|
282
|
-
isNumber(start1),
|
|
283
|
-
loggerPrefix + "map() 2nd param must be a number",
|
|
284
|
-
);
|
|
285
|
-
DEV: assert(
|
|
286
|
-
isNumber(stop1),
|
|
287
|
-
loggerPrefix + "map() 3rd param must be a number",
|
|
288
|
-
);
|
|
289
|
-
DEV: assert(
|
|
290
|
-
isNumber(start2),
|
|
291
|
-
loggerPrefix + "map() 4th param must be a number",
|
|
292
|
-
);
|
|
293
|
-
DEV: assert(
|
|
294
|
-
isNumber(stop2),
|
|
295
|
-
loggerPrefix + "map() 5th param must be a number",
|
|
296
|
-
);
|
|
237
|
+
DEV: assert(isNumber(value), "map() 1st parameter must be a number");
|
|
238
|
+
DEV: assert(isNumber(start1), "map() 2nd parameter must be a number");
|
|
239
|
+
DEV: assert(isNumber(stop1), "map() 3rd parameter must be a number");
|
|
240
|
+
DEV: assert(isNumber(start2), "map() 4th parameter must be a number");
|
|
241
|
+
DEV: assert(isNumber(stop2), "map() 5th parameter must be a number");
|
|
297
242
|
DEV: assert(
|
|
298
243
|
stop1 !== start1,
|
|
299
|
-
|
|
300
|
-
"map() the 2nd param must be different than the 3rd param",
|
|
244
|
+
"map() the 2nd parameter must be different than the 3rd parameter",
|
|
301
245
|
);
|
|
302
246
|
const result =
|
|
303
247
|
((value - start1) / (stop1 - start1)) * (stop2 - start2) + start2;
|
|
304
248
|
return withinBounds ? instance.clamp(result, start2, stop2) : result;
|
|
305
249
|
},
|
|
306
250
|
norm: (value, start, stop) => {
|
|
307
|
-
DEV: assert(
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
);
|
|
311
|
-
DEV: assert(
|
|
312
|
-
isNumber(start),
|
|
313
|
-
loggerPrefix + "norm() 2nd param must be a number",
|
|
314
|
-
);
|
|
315
|
-
DEV: assert(
|
|
316
|
-
isNumber(stop),
|
|
317
|
-
loggerPrefix + "norm() 3rd param must be a number",
|
|
318
|
-
);
|
|
251
|
+
DEV: assert(isNumber(value), "norm() 1st parameter must be a number");
|
|
252
|
+
DEV: assert(isNumber(start), "norm() 2nd parameter must be a number");
|
|
253
|
+
DEV: assert(isNumber(stop), "norm() 3rd parameter must be a number");
|
|
319
254
|
DEV: assert(
|
|
320
255
|
start !== stop,
|
|
321
|
-
|
|
322
|
-
"norm() the 2nd param must be different than the 3rd param",
|
|
256
|
+
"norm() the 2nd parameter must be different than the 3rd parameter",
|
|
323
257
|
);
|
|
324
258
|
return instance.map(value, start, stop, 0, 1);
|
|
325
259
|
},
|
|
326
260
|
rand: (min = 0, max = 1) => {
|
|
327
|
-
DEV: assert(
|
|
328
|
-
|
|
329
|
-
loggerPrefix + "rand() 1st param must be a number",
|
|
330
|
-
);
|
|
331
|
-
DEV: assert(
|
|
332
|
-
isNumber(max),
|
|
333
|
-
loggerPrefix + "rand() 2nd param must be a number",
|
|
334
|
-
);
|
|
261
|
+
DEV: assert(isNumber(min), "rand() 1st parameter must be a number");
|
|
262
|
+
DEV: assert(isNumber(max), "rand() 2nd parameter must be a number");
|
|
335
263
|
DEV: assert(
|
|
336
264
|
max >= min,
|
|
337
|
-
|
|
265
|
+
"rand() the 1st parameter must be less than the 2nd parameter",
|
|
338
266
|
);
|
|
339
267
|
const a = 1664525;
|
|
340
268
|
const c = 1013904223;
|
|
@@ -343,33 +271,25 @@
|
|
|
343
271
|
return (_rngSeed / m) * (max - min) + min;
|
|
344
272
|
},
|
|
345
273
|
randi: (min = 0, max = 1) => {
|
|
346
|
-
DEV: assert(
|
|
347
|
-
|
|
348
|
-
loggerPrefix + "randi() 1st param must be a number",
|
|
349
|
-
);
|
|
350
|
-
DEV: assert(
|
|
351
|
-
isNumber(max),
|
|
352
|
-
loggerPrefix + "randi() 2nd param must be a number",
|
|
353
|
-
);
|
|
274
|
+
DEV: assert(isNumber(min), "randi() 1st parameter must be a number");
|
|
275
|
+
DEV: assert(isNumber(max), "randi() 2nd parameter must be a number");
|
|
354
276
|
DEV: assert(
|
|
355
277
|
max >= min,
|
|
356
|
-
|
|
357
|
-
"randi() the 1st param must be less than the 2nd param",
|
|
278
|
+
"randi() the 1st parameter must be less than the 2nd parameter",
|
|
358
279
|
);
|
|
359
280
|
return ~~instance.rand(min, max + 1);
|
|
360
281
|
},
|
|
361
282
|
rseed(value) {
|
|
362
283
|
DEV: assert(
|
|
363
284
|
isNumber(value) && value >= 0,
|
|
364
|
-
|
|
285
|
+
"rseed() 1st parameter must be a positive integer or zero",
|
|
365
286
|
);
|
|
366
287
|
_rngSeed = ~~value;
|
|
367
288
|
},
|
|
368
289
|
cls(color) {
|
|
369
290
|
DEV: assert(
|
|
370
291
|
null == color || (isNumber(color) && color >= 0),
|
|
371
|
-
|
|
372
|
-
"cls() 1st param must be a positive number or zero or undefined",
|
|
292
|
+
"cls() 1st parameter must be a positive number or zero or undefined",
|
|
373
293
|
);
|
|
374
294
|
if (null == color) {
|
|
375
295
|
_ctx.clearRect(0, 0, instance.W, instance.H);
|
|
@@ -378,32 +298,25 @@
|
|
|
378
298
|
}
|
|
379
299
|
},
|
|
380
300
|
rect(x, y, width, height, color, radii) {
|
|
381
|
-
DEV: assert(
|
|
382
|
-
|
|
383
|
-
loggerPrefix + "rect() 1st param must be a number",
|
|
384
|
-
);
|
|
385
|
-
DEV: assert(
|
|
386
|
-
isNumber(y),
|
|
387
|
-
loggerPrefix + "rect() 2nd param must be a number",
|
|
388
|
-
);
|
|
301
|
+
DEV: assert(isNumber(x), "rect() 1st parameter must be a number");
|
|
302
|
+
DEV: assert(isNumber(y), "rect() 2nd parameter must be a number");
|
|
389
303
|
DEV: assert(
|
|
390
304
|
isNumber(width) && width > 0,
|
|
391
|
-
|
|
305
|
+
"rect() 3rd parameter must be a positive number",
|
|
392
306
|
);
|
|
393
307
|
DEV: assert(
|
|
394
308
|
isNumber(height) && height >= 0,
|
|
395
|
-
|
|
309
|
+
"rect() 4th parameter must be a positive number or zero",
|
|
396
310
|
);
|
|
397
311
|
DEV: assert(
|
|
398
312
|
null == color || (isNumber(color) && color >= 0),
|
|
399
|
-
|
|
313
|
+
"rect() 5th parameter must be a positive number or zero",
|
|
400
314
|
);
|
|
401
315
|
DEV: assert(
|
|
402
316
|
null == radii ||
|
|
403
317
|
isNumber(radii) ||
|
|
404
318
|
(Array.isArray(radii) && radii.length >= 1),
|
|
405
|
-
|
|
406
|
-
"rect() 6th param must be a number or array of numbers",
|
|
319
|
+
"rect() 6th parameter must be a number or array of numbers",
|
|
407
320
|
);
|
|
408
321
|
beginPath(_ctx);
|
|
409
322
|
_ctx[radii ? "roundRect" : "rect"](
|
|
@@ -416,142 +329,102 @@
|
|
|
416
329
|
instance.stroke(color);
|
|
417
330
|
},
|
|
418
331
|
rectfill(x, y, width, height, color, radii) {
|
|
419
|
-
DEV: assert(
|
|
420
|
-
|
|
421
|
-
loggerPrefix + "rectfill() 1st param must be a number",
|
|
422
|
-
);
|
|
423
|
-
DEV: assert(
|
|
424
|
-
isNumber(y),
|
|
425
|
-
loggerPrefix + "rectfill() 2nd param must be a number",
|
|
426
|
-
);
|
|
332
|
+
DEV: assert(isNumber(x), "rectfill() 1st parameter must be a number");
|
|
333
|
+
DEV: assert(isNumber(y), "rectfill() 2nd parameter must be a number");
|
|
427
334
|
DEV: assert(
|
|
428
335
|
isNumber(width) && width >= 0,
|
|
429
|
-
|
|
430
|
-
"rectfill() 3rd param must be a positive number or zero",
|
|
336
|
+
"rectfill() 3rd parameter must be a positive number or zero",
|
|
431
337
|
);
|
|
432
338
|
DEV: assert(
|
|
433
339
|
isNumber(height) && height >= 0,
|
|
434
|
-
|
|
435
|
-
"rectfill() 4th param must be a positive number or zero",
|
|
340
|
+
"rectfill() 4th parameter must be a positive number or zero",
|
|
436
341
|
);
|
|
437
342
|
DEV: assert(
|
|
438
343
|
null == color || (isNumber(color) && color >= 0),
|
|
439
|
-
|
|
440
|
-
"rectfill() 5th param must be a positive number or zero",
|
|
344
|
+
"rectfill() 5th parameter must be a positive number or zero",
|
|
441
345
|
);
|
|
442
346
|
DEV: assert(
|
|
443
347
|
null == radii ||
|
|
444
348
|
isNumber(radii) ||
|
|
445
349
|
(Array.isArray(radii) && radii.length >= 1),
|
|
446
|
-
|
|
447
|
-
"rectfill() 6th param must be a number or array of at least 2 numbers",
|
|
350
|
+
"rectfill() 6th parameter must be a number or array of at least 2 numbers",
|
|
448
351
|
);
|
|
449
352
|
beginPath(_ctx);
|
|
450
353
|
_ctx[radii ? "roundRect" : "rect"](~~x, ~~y, ~~width, ~~height, radii);
|
|
451
354
|
instance.fill(color);
|
|
452
355
|
},
|
|
453
356
|
oval(x, y, radiusX, radiusY, color) {
|
|
454
|
-
DEV: assert(
|
|
455
|
-
|
|
456
|
-
loggerPrefix + "oval() 1st param must be a number",
|
|
457
|
-
);
|
|
458
|
-
DEV: assert(
|
|
459
|
-
isNumber(y),
|
|
460
|
-
loggerPrefix + "oval() 2nd param must be a number",
|
|
461
|
-
);
|
|
357
|
+
DEV: assert(isNumber(x), "oval() 1st parameter must be a number");
|
|
358
|
+
DEV: assert(isNumber(y), "oval() 2nd parameter must be a number");
|
|
462
359
|
DEV: assert(
|
|
463
360
|
isNumber(radiusX) && radiusX >= 0,
|
|
464
|
-
|
|
361
|
+
"oval() 3rd parameter must be a positive number or zero",
|
|
465
362
|
);
|
|
466
363
|
DEV: assert(
|
|
467
364
|
isNumber(radiusY) && radiusY >= 0,
|
|
468
|
-
|
|
365
|
+
"oval() 4th parameter must be a positive number or zero",
|
|
469
366
|
);
|
|
470
367
|
DEV: assert(
|
|
471
368
|
null == color || (isNumber(color) && color >= 0),
|
|
472
|
-
|
|
369
|
+
"oval() 5th parameter must be a positive number or zero",
|
|
473
370
|
);
|
|
474
371
|
beginPath(_ctx);
|
|
475
372
|
_ctx.ellipse(~~x, ~~y, ~~radiusX, ~~radiusY, 0, 0, TWO_PI);
|
|
476
373
|
instance.stroke(color);
|
|
477
374
|
},
|
|
478
375
|
ovalfill(x, y, radiusX, radiusY, color) {
|
|
479
|
-
DEV: assert(
|
|
480
|
-
|
|
481
|
-
loggerPrefix + "ovalfill() 1st param must be a number",
|
|
482
|
-
);
|
|
483
|
-
DEV: assert(
|
|
484
|
-
isNumber(y),
|
|
485
|
-
loggerPrefix + "ovalfill() 2nd param must be a number",
|
|
486
|
-
);
|
|
376
|
+
DEV: assert(isNumber(x), "ovalfill() 1st parameter must be a number");
|
|
377
|
+
DEV: assert(isNumber(y), "ovalfill() 2nd parameter must be a number");
|
|
487
378
|
DEV: assert(
|
|
488
379
|
isNumber(radiusX) && radiusX >= 0,
|
|
489
|
-
|
|
490
|
-
"ovalfill() 3rd param must be a positive number or zero",
|
|
380
|
+
"ovalfill() 3rd parameter must be a positive number or zero",
|
|
491
381
|
);
|
|
492
382
|
DEV: assert(
|
|
493
383
|
isNumber(radiusY) && radiusY >= 0,
|
|
494
|
-
|
|
495
|
-
"ovalfill() 4th param must be a positive number or zero",
|
|
384
|
+
"ovalfill() 4th parameter must be a positive number or zero",
|
|
496
385
|
);
|
|
497
386
|
DEV: assert(
|
|
498
387
|
null == color || (isNumber(color) && color >= 0),
|
|
499
|
-
|
|
500
|
-
"ovalfill() 5th param must be a positive number or zero",
|
|
388
|
+
"ovalfill() 5th parameter must be a positive number or zero",
|
|
501
389
|
);
|
|
502
390
|
beginPath(_ctx);
|
|
503
391
|
_ctx.ellipse(~~x, ~~y, ~~radiusX, ~~radiusY, 0, 0, TWO_PI);
|
|
504
392
|
instance.fill(color);
|
|
505
393
|
},
|
|
506
394
|
circ(x, y, radius, color) {
|
|
507
|
-
DEV: assert(
|
|
508
|
-
|
|
509
|
-
loggerPrefix + "circ() 1st param must be a number",
|
|
510
|
-
);
|
|
511
|
-
DEV: assert(
|
|
512
|
-
isNumber(y),
|
|
513
|
-
loggerPrefix + "circ() 2nd param must be a number",
|
|
514
|
-
);
|
|
395
|
+
DEV: assert(isNumber(x), "circ() 1st parameter must be a number");
|
|
396
|
+
DEV: assert(isNumber(y), "circ() 2nd parameter must be a number");
|
|
515
397
|
DEV: assert(
|
|
516
398
|
isNumber(radius) && radius >= 0,
|
|
517
|
-
|
|
399
|
+
"circ() 3rd parameter must be a positive number or zero",
|
|
518
400
|
);
|
|
519
401
|
DEV: assert(
|
|
520
402
|
null == color || (isNumber(color) && color >= 0),
|
|
521
|
-
|
|
403
|
+
"circ() 4th parameter must be a positive number or zero",
|
|
522
404
|
);
|
|
523
405
|
instance.oval(x, y, radius, radius, color);
|
|
524
406
|
},
|
|
525
407
|
circfill(x, y, radius, color) {
|
|
526
|
-
DEV: assert(
|
|
527
|
-
|
|
528
|
-
loggerPrefix + "circfill() 1st param must be a number",
|
|
529
|
-
);
|
|
530
|
-
DEV: assert(
|
|
531
|
-
isNumber(y),
|
|
532
|
-
loggerPrefix + "circfill() 2nd param must be a number",
|
|
533
|
-
);
|
|
408
|
+
DEV: assert(isNumber(x), "circfill() 1st parameter must be a number");
|
|
409
|
+
DEV: assert(isNumber(y), "circfill() 2nd parameter must be a number");
|
|
534
410
|
DEV: assert(
|
|
535
411
|
isNumber(radius) && radius >= 0,
|
|
536
|
-
|
|
537
|
-
"circfill() 3rd param must be a positive number or zero",
|
|
412
|
+
"circfill() 3rd parameter must be a positive number or zero",
|
|
538
413
|
);
|
|
539
414
|
DEV: assert(
|
|
540
415
|
null == color || (isNumber(color) && color >= 0),
|
|
541
|
-
|
|
542
|
-
"circfill() 4th param must be a positive number or zero",
|
|
416
|
+
"circfill() 4th parameter must be a positive number or zero",
|
|
543
417
|
);
|
|
544
418
|
instance.ovalfill(x, y, radius, radius, color);
|
|
545
419
|
},
|
|
546
420
|
shape(points) {
|
|
547
421
|
DEV: assert(
|
|
548
422
|
Array.isArray(points),
|
|
549
|
-
|
|
423
|
+
"shape() 1st parameter must be an array of numbers",
|
|
550
424
|
);
|
|
551
425
|
DEV: assert(
|
|
552
426
|
points.length >= 6,
|
|
553
|
-
|
|
554
|
-
"shape() 1st param must be an array with at least 6 numbers (3 points)",
|
|
427
|
+
"shape() 1st parameter must be an array with at least 6 numbers (3 points)",
|
|
555
428
|
);
|
|
556
429
|
beginPath(_ctx);
|
|
557
430
|
for (let i = 0; i < points.length; i += 2) {
|
|
@@ -564,25 +437,19 @@
|
|
|
564
437
|
_ctx.lineTo(~~points[0], ~~points[1]);
|
|
565
438
|
},
|
|
566
439
|
line(x1, y1, x2, y2, color) {
|
|
567
|
-
DEV: assert(
|
|
568
|
-
|
|
569
|
-
loggerPrefix + "line() 1st param must be a number",
|
|
570
|
-
);
|
|
571
|
-
DEV: assert(
|
|
572
|
-
isNumber(y1),
|
|
573
|
-
loggerPrefix + "line() 2nd param must be a number",
|
|
574
|
-
);
|
|
440
|
+
DEV: assert(isNumber(x1), "line() 1st parameter must be a number");
|
|
441
|
+
DEV: assert(isNumber(y1), "line() 2nd parameter must be a number");
|
|
575
442
|
DEV: assert(
|
|
576
443
|
isNumber(x2),
|
|
577
|
-
|
|
444
|
+
"line() 3rd parameter must be a positive number or zero",
|
|
578
445
|
);
|
|
579
446
|
DEV: assert(
|
|
580
447
|
isNumber(y2),
|
|
581
|
-
|
|
448
|
+
"line() 4th parameter must be a positive number or zero",
|
|
582
449
|
);
|
|
583
450
|
DEV: assert(
|
|
584
451
|
null == color || (isNumber(color) && color >= 0),
|
|
585
|
-
|
|
452
|
+
"line() 5th parameter must be a positive number or zero",
|
|
586
453
|
);
|
|
587
454
|
beginPath(_ctx);
|
|
588
455
|
let xfix = _outline_fix !== 0 && ~~x1 === ~~x2 ? 0.5 : 0;
|
|
@@ -594,8 +461,7 @@
|
|
|
594
461
|
linewidth(value) {
|
|
595
462
|
DEV: assert(
|
|
596
463
|
isNumber(value) && value >= 0,
|
|
597
|
-
|
|
598
|
-
"linewidth() 1st param must be a positive number or zero",
|
|
464
|
+
"linewidth() 1st parameter must be a positive number or zero",
|
|
599
465
|
);
|
|
600
466
|
_ctx.lineWidth = ~~value;
|
|
601
467
|
_outline_fix = 0 === ~~value % 2 ? 0 : 0.5;
|
|
@@ -603,31 +469,25 @@
|
|
|
603
469
|
linedash(segments, offset = 0) {
|
|
604
470
|
DEV: assert(
|
|
605
471
|
Array.isArray(segments) && segments.length > 0,
|
|
606
|
-
|
|
472
|
+
"linedash() 1st parameter must be an array of numbers",
|
|
607
473
|
);
|
|
608
474
|
DEV: assert(
|
|
609
475
|
isNumber(offset),
|
|
610
|
-
|
|
476
|
+
"linedash() 2nd parameter must be a number",
|
|
611
477
|
);
|
|
612
478
|
_ctx.setLineDash(segments);
|
|
613
479
|
_ctx.lineDashOffset = offset;
|
|
614
480
|
},
|
|
615
481
|
text(x, y, message, color = _defaultTextColor, fontStyle = "normal") {
|
|
616
|
-
DEV: assert(
|
|
617
|
-
|
|
618
|
-
loggerPrefix + "text() 1st param must be a number",
|
|
619
|
-
);
|
|
620
|
-
DEV: assert(
|
|
621
|
-
isNumber(y),
|
|
622
|
-
loggerPrefix + "text() 2nd param must be a number",
|
|
623
|
-
);
|
|
482
|
+
DEV: assert(isNumber(x), "text() 1st parameter must be a number");
|
|
483
|
+
DEV: assert(isNumber(y), "text() 2nd parameter must be a number");
|
|
624
484
|
DEV: assert(
|
|
625
485
|
null == color || (isNumber(color) && color >= 0),
|
|
626
|
-
|
|
486
|
+
"text() 4th parameter must be a positive number or zero",
|
|
627
487
|
);
|
|
628
488
|
DEV: assert(
|
|
629
489
|
"string" === typeof fontStyle,
|
|
630
|
-
|
|
490
|
+
"text() 5th parameter must be a string",
|
|
631
491
|
);
|
|
632
492
|
_ctx.font = `${fontStyle} ${_fontSize}px ${_fontFamily}`;
|
|
633
493
|
_ctx.fillStyle = getColor(color);
|
|
@@ -643,21 +503,21 @@
|
|
|
643
503
|
textgap(value) {
|
|
644
504
|
DEV: assert(
|
|
645
505
|
isNumber(value),
|
|
646
|
-
|
|
506
|
+
"textgap() 1st parameter must be a number",
|
|
647
507
|
);
|
|
648
508
|
_fontLineHeight = value;
|
|
649
509
|
},
|
|
650
510
|
textfont(family) {
|
|
651
511
|
DEV: assert(
|
|
652
512
|
"string" === typeof family,
|
|
653
|
-
|
|
513
|
+
"textfont() 1st parameter must be a string",
|
|
654
514
|
);
|
|
655
515
|
_fontFamily = family;
|
|
656
516
|
},
|
|
657
517
|
textsize(size) {
|
|
658
518
|
DEV: assert(
|
|
659
519
|
isNumber(size),
|
|
660
|
-
|
|
520
|
+
"textsize() 1st parameter must be a number",
|
|
661
521
|
);
|
|
662
522
|
_fontSize = size;
|
|
663
523
|
},
|
|
@@ -665,8 +525,7 @@
|
|
|
665
525
|
DEV: assert(
|
|
666
526
|
null == align ||
|
|
667
527
|
["left", "right", "center", "start", "end"].includes(align),
|
|
668
|
-
|
|
669
|
-
"textalign() 1st param must be null or one of the following strings: center, left, right, start or end.",
|
|
528
|
+
"textalign() 1st parameter must be null or one of the following strings: center, left, right, start or end.",
|
|
670
529
|
);
|
|
671
530
|
DEV: assert(
|
|
672
531
|
null == baseline ||
|
|
@@ -678,35 +537,22 @@
|
|
|
678
537
|
"alphabetic",
|
|
679
538
|
"ideographic",
|
|
680
539
|
].includes(baseline),
|
|
681
|
-
|
|
682
|
-
"textalign() 2nd param must be null or one of the following strings: middle, top, bottom, hanging, alphabetic or ideographic.",
|
|
540
|
+
"textalign() 2nd parameter must be null or one of the following strings: middle, top, bottom, hanging, alphabetic or ideographic.",
|
|
683
541
|
);
|
|
684
542
|
if (align) _ctx.textAlign = align;
|
|
685
543
|
if (baseline) _ctx.textBaseline = baseline;
|
|
686
544
|
},
|
|
687
545
|
image(x, y, source) {
|
|
688
|
-
DEV: assert(
|
|
689
|
-
|
|
690
|
-
loggerPrefix + "image() 1st param must be a number",
|
|
691
|
-
);
|
|
692
|
-
DEV: assert(
|
|
693
|
-
isNumber(y),
|
|
694
|
-
loggerPrefix + "image() 2nd param must be a number",
|
|
695
|
-
);
|
|
546
|
+
DEV: assert(isNumber(x), "image() 1st parameter must be a number");
|
|
547
|
+
DEV: assert(isNumber(y), "image() 2nd parameter must be a number");
|
|
696
548
|
_ctx.drawImage(source, ~~x, ~~y);
|
|
697
549
|
},
|
|
698
550
|
spr(x, y, pixels) {
|
|
699
|
-
DEV: assert(
|
|
700
|
-
|
|
701
|
-
loggerPrefix + "spr() 1st param must be a number",
|
|
702
|
-
);
|
|
703
|
-
DEV: assert(
|
|
704
|
-
isNumber(y),
|
|
705
|
-
loggerPrefix + "spr() 2nd param must be a number",
|
|
706
|
-
);
|
|
551
|
+
DEV: assert(isNumber(x), "spr() 1st parameter must be a number");
|
|
552
|
+
DEV: assert(isNumber(y), "spr() 2nd parameter must be a number");
|
|
707
553
|
DEV: assert(
|
|
708
554
|
"string" === typeof pixels,
|
|
709
|
-
|
|
555
|
+
"spr() 3rd parameter must be a string",
|
|
710
556
|
);
|
|
711
557
|
const rows = pixels.trim().split("\n");
|
|
712
558
|
for (let row = 0; row < rows.length; row++) {
|
|
@@ -728,27 +574,25 @@
|
|
|
728
574
|
paint(width, height, callback, options = {}) {
|
|
729
575
|
DEV: assert(
|
|
730
576
|
isNumber(width) && width >= 1,
|
|
731
|
-
|
|
577
|
+
"paint() 1st parameter must be a positive number",
|
|
732
578
|
);
|
|
733
579
|
DEV: assert(
|
|
734
580
|
isNumber(height) && height >= 1,
|
|
735
|
-
|
|
581
|
+
"paint() 2nd parameter must be a positive number",
|
|
736
582
|
);
|
|
737
583
|
DEV: assert(
|
|
738
584
|
"function" === typeof callback,
|
|
739
|
-
|
|
585
|
+
"paint() 3rd parameter must be a function",
|
|
740
586
|
);
|
|
741
587
|
DEV: assert(
|
|
742
588
|
(options && null == options.scale) ||
|
|
743
589
|
(isNumber(options.scale) && options.scale > 0),
|
|
744
|
-
|
|
745
|
-
"paint() 4th param (options.scale) must be a positive number",
|
|
590
|
+
"paint() 4th parameter (options.scale) must be a positive number",
|
|
746
591
|
);
|
|
747
592
|
DEV: assert(
|
|
748
593
|
(options && null == options.canvas) ||
|
|
749
594
|
options.canvas instanceof OffscreenCanvas,
|
|
750
|
-
|
|
751
|
-
"paint() 4th param (options.canvas) must be an OffscreenCanvas",
|
|
595
|
+
"paint() 4th parameter (options.canvas) must be an OffscreenCanvas",
|
|
752
596
|
);
|
|
753
597
|
const canvas = options.canvas || new OffscreenCanvas(1, 1),
|
|
754
598
|
scale = options.scale || 1,
|
|
@@ -766,8 +610,7 @@
|
|
|
766
610
|
null == context ||
|
|
767
611
|
context instanceof CanvasRenderingContext2D ||
|
|
768
612
|
context instanceof OffscreenCanvasRenderingContext2D,
|
|
769
|
-
|
|
770
|
-
"ctx() 1st param must be an [Offscreen]CanvasRenderingContext2D",
|
|
613
|
+
"ctx() 1st parameter must be an [Offscreen]CanvasRenderingContext2D",
|
|
771
614
|
);
|
|
772
615
|
if (context) {
|
|
773
616
|
_ctx = context;
|
|
@@ -781,45 +624,30 @@
|
|
|
781
624
|
_ctx.restore();
|
|
782
625
|
},
|
|
783
626
|
translate(x, y) {
|
|
784
|
-
DEV: assert(
|
|
785
|
-
|
|
786
|
-
loggerPrefix + "translate() 1st param must be a number",
|
|
787
|
-
);
|
|
788
|
-
DEV: assert(
|
|
789
|
-
isNumber(y),
|
|
790
|
-
loggerPrefix + "translate() 2nd param must be a number",
|
|
791
|
-
);
|
|
627
|
+
DEV: assert(isNumber(x), "translate() 1st parameter must be a number");
|
|
628
|
+
DEV: assert(isNumber(y), "translate() 2nd parameter must be a number");
|
|
792
629
|
_ctx.translate(~~x, ~~y);
|
|
793
630
|
},
|
|
794
631
|
scale(x, y = x) {
|
|
795
|
-
DEV: assert(
|
|
796
|
-
|
|
797
|
-
loggerPrefix + "scale() 1st param must be a number",
|
|
798
|
-
);
|
|
799
|
-
DEV: assert(
|
|
800
|
-
isNumber(y),
|
|
801
|
-
loggerPrefix + "scale() 2nd param must be a number",
|
|
802
|
-
);
|
|
632
|
+
DEV: assert(isNumber(x), "scale() 1st parameter must be a number");
|
|
633
|
+
DEV: assert(isNumber(y), "scale() 2nd parameter must be a number");
|
|
803
634
|
_ctx.scale(x, y);
|
|
804
635
|
},
|
|
805
636
|
rotate(radians) {
|
|
806
637
|
DEV: assert(
|
|
807
638
|
isNumber(radians),
|
|
808
|
-
|
|
639
|
+
"rotate() 1st parameter must be a number",
|
|
809
640
|
);
|
|
810
641
|
_ctx.rotate(radians);
|
|
811
642
|
},
|
|
812
643
|
alpha(value) {
|
|
813
|
-
DEV: assert(
|
|
814
|
-
isNumber(value),
|
|
815
|
-
loggerPrefix + "alpha() 1st param must be a number",
|
|
816
|
-
);
|
|
644
|
+
DEV: assert(isNumber(value), "alpha() 1st parameter must be a number");
|
|
817
645
|
_ctx.globalAlpha = instance.clamp(value, 0, 1);
|
|
818
646
|
},
|
|
819
647
|
fill(color) {
|
|
820
648
|
DEV: assert(
|
|
821
649
|
null == color || (isNumber(color) && color >= 0),
|
|
822
|
-
|
|
650
|
+
"fill() 1st parameter must be a positive number or zero",
|
|
823
651
|
);
|
|
824
652
|
_ctx.fillStyle = getColor(color);
|
|
825
653
|
_ctx.fill();
|
|
@@ -827,7 +655,7 @@
|
|
|
827
655
|
stroke(color) {
|
|
828
656
|
DEV: assert(
|
|
829
657
|
null == color || (isNumber(color) && color >= 0),
|
|
830
|
-
|
|
658
|
+
"stroke() 1st parameter must be a positive number or zero",
|
|
831
659
|
);
|
|
832
660
|
_ctx.strokeStyle = getColor(color);
|
|
833
661
|
_ctx.stroke();
|
|
@@ -835,7 +663,7 @@
|
|
|
835
663
|
clip(callback) {
|
|
836
664
|
DEV: assert(
|
|
837
665
|
"function" === typeof callback,
|
|
838
|
-
|
|
666
|
+
"clip() 1st parameter must be a function (ctx) => void",
|
|
839
667
|
);
|
|
840
668
|
beginPath(_ctx);
|
|
841
669
|
callback(_ctx);
|
|
@@ -844,15 +672,15 @@
|
|
|
844
672
|
sfx(zzfxParams, pitchSlide, volumeFactor) {
|
|
845
673
|
DEV: assert(
|
|
846
674
|
null == zzfxParams || Array.isArray(zzfxParams),
|
|
847
|
-
|
|
675
|
+
"sfx() 1st parameter must be an array",
|
|
848
676
|
);
|
|
849
677
|
DEV: assert(
|
|
850
678
|
null == pitchSlide || isNumber(pitchSlide),
|
|
851
|
-
|
|
679
|
+
"sfx() 2nd parameter must be a number",
|
|
852
680
|
);
|
|
853
681
|
DEV: assert(
|
|
854
682
|
null == volumeFactor || isNumber(volumeFactor),
|
|
855
|
-
|
|
683
|
+
"sfx() 3rd parameter must be a number",
|
|
856
684
|
);
|
|
857
685
|
if (
|
|
858
686
|
!root.zzfxV ||
|
|
@@ -865,7 +693,6 @@
|
|
|
865
693
|
zzfxParams = zzfxParams.slice();
|
|
866
694
|
zzfxParams[0] = volumeFactor * (zzfxParams[0] || 1);
|
|
867
695
|
zzfxParams[10] = ~~zzfxParams[10] + pitchSlide;
|
|
868
|
-
console.log(zzfxParams);
|
|
869
696
|
}
|
|
870
697
|
zzfx.apply(0, zzfxParams);
|
|
871
698
|
return zzfxParams;
|
|
@@ -873,7 +700,7 @@
|
|
|
873
700
|
volume(value) {
|
|
874
701
|
DEV: assert(
|
|
875
702
|
isNumber(value) && value >= 0,
|
|
876
|
-
|
|
703
|
+
"volume() 1st parameter must be a positive number or zero",
|
|
877
704
|
);
|
|
878
705
|
root.zzfxV = value;
|
|
879
706
|
},
|
|
@@ -881,23 +708,22 @@
|
|
|
881
708
|
use(callback, config = {}) {
|
|
882
709
|
DEV: assert(
|
|
883
710
|
"function" === typeof callback,
|
|
884
|
-
|
|
885
|
-
"use() 1st param must be a function (instance, config) => any",
|
|
711
|
+
"use() 1st parameter must be a function (instance, config) => any",
|
|
886
712
|
);
|
|
887
713
|
DEV: assert(
|
|
888
714
|
"object" === typeof config,
|
|
889
|
-
|
|
715
|
+
"use() 2nd parameter must be an object",
|
|
890
716
|
);
|
|
891
717
|
loadPlugin(callback, config);
|
|
892
718
|
},
|
|
893
719
|
listen: (eventName, callback) => {
|
|
894
720
|
DEV: assert(
|
|
895
721
|
"string" === typeof eventName,
|
|
896
|
-
|
|
722
|
+
"listen() 1st parameter must be a string",
|
|
897
723
|
);
|
|
898
724
|
DEV: assert(
|
|
899
725
|
"function" === typeof callback,
|
|
900
|
-
|
|
726
|
+
"listen() 2nd parameter must be a function",
|
|
901
727
|
);
|
|
902
728
|
eventName = lowerCase(eventName);
|
|
903
729
|
_eventListeners[eventName] = _eventListeners[eventName] || new Set();
|
|
@@ -906,11 +732,11 @@
|
|
|
906
732
|
unlisten: (eventName, callback) => {
|
|
907
733
|
DEV: assert(
|
|
908
734
|
"string" === typeof eventName,
|
|
909
|
-
|
|
735
|
+
"unlisten() 1st parameter must be a string",
|
|
910
736
|
);
|
|
911
737
|
DEV: assert(
|
|
912
738
|
"function" === typeof callback,
|
|
913
|
-
|
|
739
|
+
"unlisten() 2nd parameter must be a function",
|
|
914
740
|
);
|
|
915
741
|
eventName = lowerCase(eventName);
|
|
916
742
|
if (_eventListeners[eventName]) {
|
|
@@ -920,7 +746,7 @@
|
|
|
920
746
|
emit(eventName, arg1, arg2, arg3, arg4) {
|
|
921
747
|
DEV: assert(
|
|
922
748
|
"string" === typeof eventName,
|
|
923
|
-
|
|
749
|
+
"emit() 1st parameter must be a string",
|
|
924
750
|
);
|
|
925
751
|
if (_initialized) {
|
|
926
752
|
eventName = lowerCase(eventName);
|
|
@@ -940,11 +766,11 @@
|
|
|
940
766
|
pal(colors, textColor = 3) {
|
|
941
767
|
DEV: assert(
|
|
942
768
|
null == colors || (Array.isArray(colors) && colors.length > 0),
|
|
943
|
-
|
|
769
|
+
"pal() 1st parameter must be null or an array of colors",
|
|
944
770
|
);
|
|
945
771
|
DEV: assert(
|
|
946
772
|
isNumber(textColor) && textColor >= 0,
|
|
947
|
-
|
|
773
|
+
"pal() 2nd parameter must be a positive number or zero",
|
|
948
774
|
);
|
|
949
775
|
_colorPalette = colors || defaultPalette;
|
|
950
776
|
_colorPaletteState = [];
|
|
@@ -954,11 +780,11 @@
|
|
|
954
780
|
palc(a, b) {
|
|
955
781
|
DEV: assert(
|
|
956
782
|
null == a || (isNumber(a) && a >= 0),
|
|
957
|
-
|
|
783
|
+
"palc() 1st parameter must be a positive number",
|
|
958
784
|
);
|
|
959
785
|
DEV: assert(
|
|
960
786
|
isNumber(a) ? isNumber(b) && b >= 0 : null == b,
|
|
961
|
-
|
|
787
|
+
"palc() 2nd parameter must be a positive number",
|
|
962
788
|
);
|
|
963
789
|
if (a == null) {
|
|
964
790
|
_colorPaletteState = [];
|
|
@@ -969,12 +795,11 @@
|
|
|
969
795
|
def(key, value) {
|
|
970
796
|
DEV: assert(
|
|
971
797
|
"string" === typeof key,
|
|
972
|
-
|
|
798
|
+
"def() 1st parameter must be a string",
|
|
973
799
|
);
|
|
974
800
|
DEV: if (null == value) {
|
|
975
801
|
console.warn(
|
|
976
|
-
|
|
977
|
-
`def() changed the key "${key}" to null (previous value was ${instance[key]})`,
|
|
802
|
+
`[litecanvas] def() changed the key "${key}" to null (previous value was ${instance[key]})`,
|
|
978
803
|
);
|
|
979
804
|
}
|
|
980
805
|
instance[key] = value;
|
|
@@ -985,23 +810,19 @@
|
|
|
985
810
|
timescale(value) {
|
|
986
811
|
DEV: assert(
|
|
987
812
|
isNumber(value) && value >= 0,
|
|
988
|
-
|
|
989
|
-
"timescale() 1st param must be a positive number or zero",
|
|
813
|
+
"timescale() 1st parameter must be a positive number or zero",
|
|
990
814
|
);
|
|
991
815
|
_timeScale = value;
|
|
992
816
|
},
|
|
993
817
|
framerate(value) {
|
|
994
818
|
DEV: assert(
|
|
995
819
|
isNumber(value) && value >= 1,
|
|
996
|
-
|
|
820
|
+
"framerate() 1st parameter must be a positive number",
|
|
997
821
|
);
|
|
998
822
|
_fpsInterval = 1e3 / ~~value;
|
|
999
823
|
},
|
|
1000
824
|
stat(index) {
|
|
1001
|
-
DEV: assert(
|
|
1002
|
-
isNumber(index),
|
|
1003
|
-
loggerPrefix + "stat() 1st param must be a number",
|
|
1004
|
-
);
|
|
825
|
+
DEV: assert(isNumber(index), "stat() 1st parameter must be a number");
|
|
1005
826
|
const internals = [
|
|
1006
827
|
settings,
|
|
1007
828
|
_initialized,
|
|
@@ -1020,8 +841,7 @@
|
|
|
1020
841
|
];
|
|
1021
842
|
DEV: assert(
|
|
1022
843
|
index >= 0 && index < internals.length,
|
|
1023
|
-
|
|
1024
|
-
"stat() 1st param must be a number between 0 and " +
|
|
844
|
+
"stat() 1st parameter must be a number between 0 and " +
|
|
1025
845
|
(internals.length - 1),
|
|
1026
846
|
);
|
|
1027
847
|
return internals[index];
|
|
@@ -1036,8 +856,7 @@
|
|
|
1036
856
|
resume() {
|
|
1037
857
|
DEV: assert(
|
|
1038
858
|
_initialized,
|
|
1039
|
-
|
|
1040
|
-
'resume() cannot be called before the "init" event and neither after the quit() function',
|
|
859
|
+
'resume() cannot be called before the "init" event and neither after the quit() function',
|
|
1041
860
|
);
|
|
1042
861
|
if (_initialized && _paused) {
|
|
1043
862
|
startGameLoop();
|
|
@@ -1063,7 +882,7 @@
|
|
|
1063
882
|
delete root.ENGINE;
|
|
1064
883
|
}
|
|
1065
884
|
DEV: console.warn(
|
|
1066
|
-
|
|
885
|
+
"[litecanvas] quit() terminated a Litecanvas instance.",
|
|
1067
886
|
);
|
|
1068
887
|
},
|
|
1069
888
|
};
|
|
@@ -1153,10 +972,8 @@
|
|
|
1153
972
|
const _touchEndHandler = (ev) => {
|
|
1154
973
|
preventDefault(ev);
|
|
1155
974
|
const existing = [];
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
existing.push(touch.identifier + 1);
|
|
1159
|
-
}
|
|
975
|
+
for (const touch of ev.targetTouches) {
|
|
976
|
+
existing.push(touch.identifier + 1);
|
|
1160
977
|
}
|
|
1161
978
|
for (const [id, tap] of _taps) {
|
|
1162
979
|
if (existing.includes(id)) continue;
|
|
@@ -1203,16 +1020,14 @@
|
|
|
1203
1020
|
instance.def("iskeydown", (key) => {
|
|
1204
1021
|
DEV: assert(
|
|
1205
1022
|
null == key || "string" === typeof key,
|
|
1206
|
-
|
|
1207
|
-
"iskeydown() 1st param must be a string or undefined",
|
|
1023
|
+
"iskeydown() 1st parameter must be a string or undefined",
|
|
1208
1024
|
);
|
|
1209
1025
|
return keyCheck(_keysDown, key);
|
|
1210
1026
|
});
|
|
1211
1027
|
instance.def("iskeypressed", (key) => {
|
|
1212
1028
|
DEV: assert(
|
|
1213
1029
|
null == key || "string" === typeof key,
|
|
1214
|
-
|
|
1215
|
-
"iskeypressed() 1st param must be a string or undefined",
|
|
1030
|
+
"iskeypressed() 1st parameter must be a string or undefined",
|
|
1216
1031
|
);
|
|
1217
1032
|
return keyCheck(_keysPress, key);
|
|
1218
1033
|
});
|
|
@@ -1251,8 +1066,7 @@
|
|
|
1251
1066
|
_canvas = d.querySelector(settings.canvas);
|
|
1252
1067
|
DEV: assert(
|
|
1253
1068
|
null != _canvas,
|
|
1254
|
-
|
|
1255
|
-
'litecanvas() option "canvas" is an invalid CSS selector',
|
|
1069
|
+
'litecanvas() option "canvas" is an invalid CSS selector',
|
|
1256
1070
|
);
|
|
1257
1071
|
} else {
|
|
1258
1072
|
_canvas = settings.canvas;
|
|
@@ -1260,8 +1074,7 @@
|
|
|
1260
1074
|
_canvas = _canvas || d.createElement("canvas");
|
|
1261
1075
|
DEV: assert(
|
|
1262
1076
|
_canvas instanceof HTMLElement && "CANVAS" === _canvas.tagName,
|
|
1263
|
-
|
|
1264
|
-
'litecanvas() option "canvas" should be a canvas element or string (CSS selector of a canvas)',
|
|
1077
|
+
'litecanvas() option "canvas" should be a canvas element or string (CSS selector of a canvas)',
|
|
1265
1078
|
);
|
|
1266
1079
|
_ctx = _canvas.getContext("2d");
|
|
1267
1080
|
on(_canvas, "click", () => focus());
|
|
@@ -1276,19 +1089,16 @@
|
|
|
1276
1089
|
DEV: assert(
|
|
1277
1090
|
null == settings.width ||
|
|
1278
1091
|
(isNumber(settings.width) && settings.width > 0),
|
|
1279
|
-
|
|
1280
|
-
'litecanvas() option "width" should be a positive number when defined',
|
|
1092
|
+
'litecanvas() option "width" should be a positive number when defined',
|
|
1281
1093
|
);
|
|
1282
1094
|
DEV: assert(
|
|
1283
1095
|
null == settings.height ||
|
|
1284
1096
|
(isNumber(settings.height) && settings.height > 0),
|
|
1285
|
-
|
|
1286
|
-
'litecanvas() option "height" should be a positive number when defined',
|
|
1097
|
+
'litecanvas() option "height" should be a positive number when defined',
|
|
1287
1098
|
);
|
|
1288
1099
|
DEV: assert(
|
|
1289
1100
|
null == settings.height || (settings.width > 0 && settings.height > 0),
|
|
1290
|
-
|
|
1291
|
-
'litecanvas() option "width" is required when the option "height" is defined',
|
|
1101
|
+
'litecanvas() option "width" is required when the option "height" is defined',
|
|
1292
1102
|
);
|
|
1293
1103
|
const width = settings.width > 0 ? settings.width : innerWidth,
|
|
1294
1104
|
height =
|
|
@@ -1324,8 +1134,7 @@
|
|
|
1324
1134
|
const pluginData = callback(instance, config);
|
|
1325
1135
|
DEV: assert(
|
|
1326
1136
|
null == pluginData || "object" === typeof pluginData,
|
|
1327
|
-
|
|
1328
|
-
"litecanvas() plugins should return an object or nothing",
|
|
1137
|
+
"litecanvas() plugins should return an object or nothing",
|
|
1329
1138
|
);
|
|
1330
1139
|
for (const key in pluginData) {
|
|
1331
1140
|
instance.def(key, pluginData[key]);
|
|
@@ -1342,8 +1151,8 @@
|
|
|
1342
1151
|
Object.assign(root, instance);
|
|
1343
1152
|
root.ENGINE = instance;
|
|
1344
1153
|
}
|
|
1345
|
-
DEV: console.info(
|
|
1346
|
-
DEV: console.debug(
|
|
1154
|
+
DEV: console.info(`[litecanvas] version ${version} started`);
|
|
1155
|
+
DEV: console.debug(`[litecanvas] litecanvas() options =`, settings);
|
|
1347
1156
|
setupCanvas();
|
|
1348
1157
|
if (_loop) {
|
|
1349
1158
|
for (const eventName in _loop) {
|