litecanvas 0.207.0 → 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 +149 -339
- package/dist/dist.js +4 -7
- package/dist/dist.min.js +1 -1
- package/package.json +1 -1
- package/src/dev.js +1 -1
- package/src/index.js +157 -208
- 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 ||
|
|
@@ -861,9 +689,9 @@
|
|
|
861
689
|
return false;
|
|
862
690
|
}
|
|
863
691
|
zzfxParams ||= _defaultSound;
|
|
864
|
-
if (pitchSlide || volumeFactor) {
|
|
692
|
+
if (pitchSlide || volumeFactor >= 0) {
|
|
865
693
|
zzfxParams = zzfxParams.slice();
|
|
866
|
-
zzfxParams[0] =
|
|
694
|
+
zzfxParams[0] = volumeFactor * (zzfxParams[0] || 1);
|
|
867
695
|
zzfxParams[10] = ~~zzfxParams[10] + pitchSlide;
|
|
868
696
|
}
|
|
869
697
|
zzfx.apply(0, zzfxParams);
|
|
@@ -872,7 +700,7 @@
|
|
|
872
700
|
volume(value) {
|
|
873
701
|
DEV: assert(
|
|
874
702
|
isNumber(value) && value >= 0,
|
|
875
|
-
|
|
703
|
+
"volume() 1st parameter must be a positive number or zero",
|
|
876
704
|
);
|
|
877
705
|
root.zzfxV = value;
|
|
878
706
|
},
|
|
@@ -880,23 +708,22 @@
|
|
|
880
708
|
use(callback, config = {}) {
|
|
881
709
|
DEV: assert(
|
|
882
710
|
"function" === typeof callback,
|
|
883
|
-
|
|
884
|
-
"use() 1st param must be a function (instance, config) => any",
|
|
711
|
+
"use() 1st parameter must be a function (instance, config) => any",
|
|
885
712
|
);
|
|
886
713
|
DEV: assert(
|
|
887
714
|
"object" === typeof config,
|
|
888
|
-
|
|
715
|
+
"use() 2nd parameter must be an object",
|
|
889
716
|
);
|
|
890
717
|
loadPlugin(callback, config);
|
|
891
718
|
},
|
|
892
719
|
listen: (eventName, callback) => {
|
|
893
720
|
DEV: assert(
|
|
894
721
|
"string" === typeof eventName,
|
|
895
|
-
|
|
722
|
+
"listen() 1st parameter must be a string",
|
|
896
723
|
);
|
|
897
724
|
DEV: assert(
|
|
898
725
|
"function" === typeof callback,
|
|
899
|
-
|
|
726
|
+
"listen() 2nd parameter must be a function",
|
|
900
727
|
);
|
|
901
728
|
eventName = lowerCase(eventName);
|
|
902
729
|
_eventListeners[eventName] = _eventListeners[eventName] || new Set();
|
|
@@ -905,11 +732,11 @@
|
|
|
905
732
|
unlisten: (eventName, callback) => {
|
|
906
733
|
DEV: assert(
|
|
907
734
|
"string" === typeof eventName,
|
|
908
|
-
|
|
735
|
+
"unlisten() 1st parameter must be a string",
|
|
909
736
|
);
|
|
910
737
|
DEV: assert(
|
|
911
738
|
"function" === typeof callback,
|
|
912
|
-
|
|
739
|
+
"unlisten() 2nd parameter must be a function",
|
|
913
740
|
);
|
|
914
741
|
eventName = lowerCase(eventName);
|
|
915
742
|
if (_eventListeners[eventName]) {
|
|
@@ -919,7 +746,7 @@
|
|
|
919
746
|
emit(eventName, arg1, arg2, arg3, arg4) {
|
|
920
747
|
DEV: assert(
|
|
921
748
|
"string" === typeof eventName,
|
|
922
|
-
|
|
749
|
+
"emit() 1st parameter must be a string",
|
|
923
750
|
);
|
|
924
751
|
if (_initialized) {
|
|
925
752
|
eventName = lowerCase(eventName);
|
|
@@ -939,11 +766,11 @@
|
|
|
939
766
|
pal(colors, textColor = 3) {
|
|
940
767
|
DEV: assert(
|
|
941
768
|
null == colors || (Array.isArray(colors) && colors.length > 0),
|
|
942
|
-
|
|
769
|
+
"pal() 1st parameter must be null or an array of colors",
|
|
943
770
|
);
|
|
944
771
|
DEV: assert(
|
|
945
772
|
isNumber(textColor) && textColor >= 0,
|
|
946
|
-
|
|
773
|
+
"pal() 2nd parameter must be a positive number or zero",
|
|
947
774
|
);
|
|
948
775
|
_colorPalette = colors || defaultPalette;
|
|
949
776
|
_colorPaletteState = [];
|
|
@@ -953,11 +780,11 @@
|
|
|
953
780
|
palc(a, b) {
|
|
954
781
|
DEV: assert(
|
|
955
782
|
null == a || (isNumber(a) && a >= 0),
|
|
956
|
-
|
|
783
|
+
"palc() 1st parameter must be a positive number",
|
|
957
784
|
);
|
|
958
785
|
DEV: assert(
|
|
959
786
|
isNumber(a) ? isNumber(b) && b >= 0 : null == b,
|
|
960
|
-
|
|
787
|
+
"palc() 2nd parameter must be a positive number",
|
|
961
788
|
);
|
|
962
789
|
if (a == null) {
|
|
963
790
|
_colorPaletteState = [];
|
|
@@ -968,12 +795,11 @@
|
|
|
968
795
|
def(key, value) {
|
|
969
796
|
DEV: assert(
|
|
970
797
|
"string" === typeof key,
|
|
971
|
-
|
|
798
|
+
"def() 1st parameter must be a string",
|
|
972
799
|
);
|
|
973
800
|
DEV: if (null == value) {
|
|
974
801
|
console.warn(
|
|
975
|
-
|
|
976
|
-
`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]})`,
|
|
977
803
|
);
|
|
978
804
|
}
|
|
979
805
|
instance[key] = value;
|
|
@@ -984,23 +810,19 @@
|
|
|
984
810
|
timescale(value) {
|
|
985
811
|
DEV: assert(
|
|
986
812
|
isNumber(value) && value >= 0,
|
|
987
|
-
|
|
988
|
-
"timescale() 1st param must be a positive number or zero",
|
|
813
|
+
"timescale() 1st parameter must be a positive number or zero",
|
|
989
814
|
);
|
|
990
815
|
_timeScale = value;
|
|
991
816
|
},
|
|
992
817
|
framerate(value) {
|
|
993
818
|
DEV: assert(
|
|
994
819
|
isNumber(value) && value >= 1,
|
|
995
|
-
|
|
820
|
+
"framerate() 1st parameter must be a positive number",
|
|
996
821
|
);
|
|
997
822
|
_fpsInterval = 1e3 / ~~value;
|
|
998
823
|
},
|
|
999
824
|
stat(index) {
|
|
1000
|
-
DEV: assert(
|
|
1001
|
-
isNumber(index),
|
|
1002
|
-
loggerPrefix + "stat() 1st param must be a number",
|
|
1003
|
-
);
|
|
825
|
+
DEV: assert(isNumber(index), "stat() 1st parameter must be a number");
|
|
1004
826
|
const internals = [
|
|
1005
827
|
settings,
|
|
1006
828
|
_initialized,
|
|
@@ -1019,8 +841,7 @@
|
|
|
1019
841
|
];
|
|
1020
842
|
DEV: assert(
|
|
1021
843
|
index >= 0 && index < internals.length,
|
|
1022
|
-
|
|
1023
|
-
"stat() 1st param must be a number between 0 and " +
|
|
844
|
+
"stat() 1st parameter must be a number between 0 and " +
|
|
1024
845
|
(internals.length - 1),
|
|
1025
846
|
);
|
|
1026
847
|
return internals[index];
|
|
@@ -1035,8 +856,7 @@
|
|
|
1035
856
|
resume() {
|
|
1036
857
|
DEV: assert(
|
|
1037
858
|
_initialized,
|
|
1038
|
-
|
|
1039
|
-
'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',
|
|
1040
860
|
);
|
|
1041
861
|
if (_initialized && _paused) {
|
|
1042
862
|
startGameLoop();
|
|
@@ -1062,7 +882,7 @@
|
|
|
1062
882
|
delete root.ENGINE;
|
|
1063
883
|
}
|
|
1064
884
|
DEV: console.warn(
|
|
1065
|
-
|
|
885
|
+
"[litecanvas] quit() terminated a Litecanvas instance.",
|
|
1066
886
|
);
|
|
1067
887
|
},
|
|
1068
888
|
};
|
|
@@ -1152,10 +972,8 @@
|
|
|
1152
972
|
const _touchEndHandler = (ev) => {
|
|
1153
973
|
preventDefault(ev);
|
|
1154
974
|
const existing = [];
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
existing.push(touch.identifier + 1);
|
|
1158
|
-
}
|
|
975
|
+
for (const touch of ev.targetTouches) {
|
|
976
|
+
existing.push(touch.identifier + 1);
|
|
1159
977
|
}
|
|
1160
978
|
for (const [id, tap] of _taps) {
|
|
1161
979
|
if (existing.includes(id)) continue;
|
|
@@ -1202,16 +1020,14 @@
|
|
|
1202
1020
|
instance.def("iskeydown", (key) => {
|
|
1203
1021
|
DEV: assert(
|
|
1204
1022
|
null == key || "string" === typeof key,
|
|
1205
|
-
|
|
1206
|
-
"iskeydown() 1st param must be a string or undefined",
|
|
1023
|
+
"iskeydown() 1st parameter must be a string or undefined",
|
|
1207
1024
|
);
|
|
1208
1025
|
return keyCheck(_keysDown, key);
|
|
1209
1026
|
});
|
|
1210
1027
|
instance.def("iskeypressed", (key) => {
|
|
1211
1028
|
DEV: assert(
|
|
1212
1029
|
null == key || "string" === typeof key,
|
|
1213
|
-
|
|
1214
|
-
"iskeypressed() 1st param must be a string or undefined",
|
|
1030
|
+
"iskeypressed() 1st parameter must be a string or undefined",
|
|
1215
1031
|
);
|
|
1216
1032
|
return keyCheck(_keysPress, key);
|
|
1217
1033
|
});
|
|
@@ -1250,8 +1066,7 @@
|
|
|
1250
1066
|
_canvas = d.querySelector(settings.canvas);
|
|
1251
1067
|
DEV: assert(
|
|
1252
1068
|
null != _canvas,
|
|
1253
|
-
|
|
1254
|
-
'litecanvas() option "canvas" is an invalid CSS selector',
|
|
1069
|
+
'litecanvas() option "canvas" is an invalid CSS selector',
|
|
1255
1070
|
);
|
|
1256
1071
|
} else {
|
|
1257
1072
|
_canvas = settings.canvas;
|
|
@@ -1259,8 +1074,7 @@
|
|
|
1259
1074
|
_canvas = _canvas || d.createElement("canvas");
|
|
1260
1075
|
DEV: assert(
|
|
1261
1076
|
_canvas instanceof HTMLElement && "CANVAS" === _canvas.tagName,
|
|
1262
|
-
|
|
1263
|
-
'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)',
|
|
1264
1078
|
);
|
|
1265
1079
|
_ctx = _canvas.getContext("2d");
|
|
1266
1080
|
on(_canvas, "click", () => focus());
|
|
@@ -1275,19 +1089,16 @@
|
|
|
1275
1089
|
DEV: assert(
|
|
1276
1090
|
null == settings.width ||
|
|
1277
1091
|
(isNumber(settings.width) && settings.width > 0),
|
|
1278
|
-
|
|
1279
|
-
'litecanvas() option "width" should be a positive number when defined',
|
|
1092
|
+
'litecanvas() option "width" should be a positive number when defined',
|
|
1280
1093
|
);
|
|
1281
1094
|
DEV: assert(
|
|
1282
1095
|
null == settings.height ||
|
|
1283
1096
|
(isNumber(settings.height) && settings.height > 0),
|
|
1284
|
-
|
|
1285
|
-
'litecanvas() option "height" should be a positive number when defined',
|
|
1097
|
+
'litecanvas() option "height" should be a positive number when defined',
|
|
1286
1098
|
);
|
|
1287
1099
|
DEV: assert(
|
|
1288
1100
|
null == settings.height || (settings.width > 0 && settings.height > 0),
|
|
1289
|
-
|
|
1290
|
-
'litecanvas() option "width" is required when the option "height" is defined',
|
|
1101
|
+
'litecanvas() option "width" is required when the option "height" is defined',
|
|
1291
1102
|
);
|
|
1292
1103
|
const width = settings.width > 0 ? settings.width : innerWidth,
|
|
1293
1104
|
height =
|
|
@@ -1323,8 +1134,7 @@
|
|
|
1323
1134
|
const pluginData = callback(instance, config);
|
|
1324
1135
|
DEV: assert(
|
|
1325
1136
|
null == pluginData || "object" === typeof pluginData,
|
|
1326
|
-
|
|
1327
|
-
"litecanvas() plugins should return an object or nothing",
|
|
1137
|
+
"litecanvas() plugins should return an object or nothing",
|
|
1328
1138
|
);
|
|
1329
1139
|
for (const key in pluginData) {
|
|
1330
1140
|
instance.def(key, pluginData[key]);
|
|
@@ -1341,8 +1151,8 @@
|
|
|
1341
1151
|
Object.assign(root, instance);
|
|
1342
1152
|
root.ENGINE = instance;
|
|
1343
1153
|
}
|
|
1344
|
-
DEV: console.info(
|
|
1345
|
-
DEV: console.debug(
|
|
1154
|
+
DEV: console.info(`[litecanvas] version ${version} started`);
|
|
1155
|
+
DEV: console.debug(`[litecanvas] litecanvas() options =`, settings);
|
|
1346
1156
|
setupCanvas();
|
|
1347
1157
|
if (_loop) {
|
|
1348
1158
|
for (const eventName in _loop) {
|