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 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.0";
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 ||
@@ -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] = (volumeFactor || 1) * (zzfxParams[0] || 1);
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
- loggerPrefix + "volume() 1st param must be a positive number or zero",
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
- loggerPrefix +
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
- loggerPrefix + "use() 2nd param must be an object",
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
- loggerPrefix + "listen() 1st param must be a string",
722
+ "listen() 1st parameter must be a string",
896
723
  );
897
724
  DEV: assert(
898
725
  "function" === typeof callback,
899
- loggerPrefix + "listen() 2nd param must be a function",
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
- loggerPrefix + "unlisten() 1st param must be a string",
735
+ "unlisten() 1st parameter must be a string",
909
736
  );
910
737
  DEV: assert(
911
738
  "function" === typeof callback,
912
- loggerPrefix + "unlisten() 2nd param must be a function",
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
- loggerPrefix + "emit() 1st param must be a string",
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
- loggerPrefix + "pal() 1st param must be a array of color strings",
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
- loggerPrefix + "pal() 2nd param must be a positive number or zero",
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
- loggerPrefix + "palc() 1st param must be a positive number",
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
- loggerPrefix + "palc() 2nd param must be a positive number",
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
- loggerPrefix + "def() 1st param must be a string",
798
+ "def() 1st parameter must be a string",
972
799
  );
973
800
  DEV: if (null == value) {
974
801
  console.warn(
975
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix + "framerate() 1st param must be a positive number",
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix + "quit() terminated a Litecanvas instance.",
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
- if (ev.targetTouches.length > 0) {
1156
- for (const touch of ev.targetTouches) {
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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
- loggerPrefix +
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(loggerPrefix + `version ${version} started`);
1345
- DEV: console.debug(loggerPrefix + `litecanvas() options =`, settings);
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) {