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 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("[litecanvas] " + message);
116
+ if (!condition) throw new Error("[Litecanvas] " + message);
117
117
  };
118
- var version = "0.207.1";
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
- isNumber(start),
181
- loggerPrefix + "lerp() 1st param must be a number",
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 param must be a number");
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 param must be a number");
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
- loggerPrefix + "round() 2nd param must be a positive number or zero",
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
- isNumber(value),
219
- loggerPrefix + "clamp() 1st param must be a number",
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
- loggerPrefix +
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
- isNumber(x1),
241
- loggerPrefix + "dist() 1st param must be a number",
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
- isNumber(value),
260
- loggerPrefix + "wrap() 1st param must be a number",
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
- loggerPrefix + "wrap() the 2nd param must be less than the 3rd param",
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
- isNumber(value),
279
- loggerPrefix + "map() 1st param must be a number",
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
- loggerPrefix +
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
- isNumber(value),
309
- loggerPrefix + "norm() 1st param must be a number",
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
- loggerPrefix +
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
- isNumber(min),
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
- loggerPrefix + "rand() the 1st param must be less than the 2nd param",
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
- isNumber(min),
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
- loggerPrefix +
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
- loggerPrefix + "rseed() 1st param must be a positive integer or zero",
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
- loggerPrefix +
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
- isNumber(x),
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
- loggerPrefix + "rect() 3rd param must be a positive number",
305
+ "rect() 3rd parameter must be a positive number",
392
306
  );
393
307
  DEV: assert(
394
308
  isNumber(height) && height >= 0,
395
- loggerPrefix + "rect() 4th param must be a positive number or zero",
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
- loggerPrefix + "rect() 5th param must be a positive number or zero",
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
- loggerPrefix +
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
- isNumber(x),
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- isNumber(x),
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
- loggerPrefix + "oval() 3rd param must be a positive number or zero",
361
+ "oval() 3rd parameter must be a positive number or zero",
465
362
  );
466
363
  DEV: assert(
467
364
  isNumber(radiusY) && radiusY >= 0,
468
- loggerPrefix + "oval() 4th param must be a positive number or zero",
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
- loggerPrefix + "oval() 5th param must be a positive number or zero",
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
- isNumber(x),
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- isNumber(x),
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
- loggerPrefix + "circ() 3rd param must be a positive number or zero",
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
- loggerPrefix + "circ() 4th param must be a positive number or zero",
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
- isNumber(x),
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix + "shape() 1st param must be an array of numbers",
423
+ "shape() 1st parameter must be an array of numbers",
550
424
  );
551
425
  DEV: assert(
552
426
  points.length >= 6,
553
- loggerPrefix +
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
- isNumber(x1),
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
- loggerPrefix + "line() 3rd param must be a positive number or zero",
444
+ "line() 3rd parameter must be a positive number or zero",
578
445
  );
579
446
  DEV: assert(
580
447
  isNumber(y2),
581
- loggerPrefix + "line() 4th param must be a positive number or zero",
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
- loggerPrefix + "line() 5th param must be a positive number or zero",
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
- loggerPrefix +
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
- loggerPrefix + "linedash() 1st param must be an array of numbers",
472
+ "linedash() 1st parameter must be an array of numbers",
607
473
  );
608
474
  DEV: assert(
609
475
  isNumber(offset),
610
- loggerPrefix + "linedash() 2nd param must be a number",
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
- isNumber(x),
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
- loggerPrefix + "text() 4th param must be a positive number or zero",
486
+ "text() 4th parameter must be a positive number or zero",
627
487
  );
628
488
  DEV: assert(
629
489
  "string" === typeof fontStyle,
630
- loggerPrefix + "text() 5th param must be a string",
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
- loggerPrefix + "textgap() 1st param must be a number",
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
- loggerPrefix + "textfont() 1st param must be a string",
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
- loggerPrefix + "textsize() 1st param must be a number",
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
- loggerPrefix +
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
- loggerPrefix +
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
- isNumber(x),
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
- isNumber(x),
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
- loggerPrefix + "spr() 3rd param must be a string",
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
- loggerPrefix + "paint() 1st param must be a positive number",
577
+ "paint() 1st parameter must be a positive number",
732
578
  );
733
579
  DEV: assert(
734
580
  isNumber(height) && height >= 1,
735
- loggerPrefix + "paint() 2nd param must be a positive number",
581
+ "paint() 2nd parameter must be a positive number",
736
582
  );
737
583
  DEV: assert(
738
584
  "function" === typeof callback,
739
- loggerPrefix + "paint() 3rd param must be a function",
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- isNumber(x),
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
- isNumber(x),
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
- loggerPrefix + "rotate() 1st param must be a number",
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
- loggerPrefix + "fill() 1st param must be a positive number or zero",
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
- loggerPrefix + "stroke() 1st param must be a positive number or zero",
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
- loggerPrefix + "clip() 1st param must be a function (ctx) => void",
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
- loggerPrefix + "sfx() 1st param must be an array",
675
+ "sfx() 1st parameter must be an array",
848
676
  );
849
677
  DEV: assert(
850
678
  null == pitchSlide || isNumber(pitchSlide),
851
- loggerPrefix + "sfx() 2nd param must be a number",
679
+ "sfx() 2nd parameter must be a number",
852
680
  );
853
681
  DEV: assert(
854
682
  null == volumeFactor || isNumber(volumeFactor),
855
- loggerPrefix + "sfx() 3rd param must be a number",
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
- loggerPrefix + "volume() 1st param must be a positive number or zero",
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
- loggerPrefix +
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
- loggerPrefix + "use() 2nd param must be an object",
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
- loggerPrefix + "listen() 1st param must be a string",
722
+ "listen() 1st parameter must be a string",
897
723
  );
898
724
  DEV: assert(
899
725
  "function" === typeof callback,
900
- loggerPrefix + "listen() 2nd param must be a function",
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
- loggerPrefix + "unlisten() 1st param must be a string",
735
+ "unlisten() 1st parameter must be a string",
910
736
  );
911
737
  DEV: assert(
912
738
  "function" === typeof callback,
913
- loggerPrefix + "unlisten() 2nd param must be a function",
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
- loggerPrefix + "emit() 1st param must be a string",
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
- loggerPrefix + "pal() 1st param must be a array of color strings",
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
- loggerPrefix + "pal() 2nd param must be a positive number or zero",
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
- loggerPrefix + "palc() 1st param must be a positive number",
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
- loggerPrefix + "palc() 2nd param must be a positive number",
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
- loggerPrefix + "def() 1st param must be a string",
798
+ "def() 1st parameter must be a string",
973
799
  );
974
800
  DEV: if (null == value) {
975
801
  console.warn(
976
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix + "framerate() 1st param must be a positive number",
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix + "quit() terminated a Litecanvas instance.",
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
- if (ev.targetTouches.length > 0) {
1157
- for (const touch of ev.targetTouches) {
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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(loggerPrefix + `version ${version} started`);
1346
- DEV: console.debug(loggerPrefix + `litecanvas() options =`, settings);
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) {