littlejsengine 1.15.9 → 1.16.1

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.
Files changed (48) hide show
  1. package/dist/littlejs.d.ts +66 -83
  2. package/dist/littlejs.esm.js +318 -330
  3. package/dist/littlejs.esm.min.js +1 -1
  4. package/dist/littlejs.js +306 -319
  5. package/dist/littlejs.min.js +1 -1
  6. package/dist/littlejs.release.js +229 -242
  7. package/examples/box2d/game.js +1 -1
  8. package/examples/breakout/game.js +3 -3
  9. package/examples/electron/game.js +1 -2
  10. package/examples/electron/index.html +2 -2
  11. package/examples/htmlMenu/game.js +0 -1
  12. package/examples/index.html +1 -1
  13. package/examples/module/game.js +1 -2
  14. package/examples/particles/index.html +1 -1
  15. package/examples/platformer/game.js +4 -4
  16. package/examples/puzzle/game.js +2 -2
  17. package/examples/shorts/base.html +3 -3
  18. package/examples/shorts/box2dPool.js +2 -2
  19. package/examples/shorts/empty.js +1 -1
  20. package/examples/shorts/{systemFont.js → fontImage.js} +3 -3
  21. package/examples/shorts/fps.js +1 -1
  22. package/examples/shorts/helloWorld.js +2 -2
  23. package/examples/shorts/nineSlice.js +2 -2
  24. package/examples/shorts/slidingPuzzle.js +1 -1
  25. package/examples/starter/game.js +1 -2
  26. package/examples/starter/index.html +2 -2
  27. package/examples/stress/index.html +1 -1
  28. package/examples/typescript/game.js +1 -2
  29. package/examples/typescript/game.ts +1 -2
  30. package/package.json +1 -1
  31. package/plugins/box2d.js +8 -8
  32. package/plugins/drawUtilities.js +6 -6
  33. package/plugins/postProcess.js +13 -20
  34. package/plugins/uiSystem.js +15 -3
  35. package/reference.md +4 -6
  36. package/src/engine.js +35 -37
  37. package/src/engineAudio.js +3 -3
  38. package/src/engineDebug.js +78 -78
  39. package/src/engineDraw.js +107 -109
  40. package/src/engineExport.js +12 -11
  41. package/src/engineInput.js +1 -1
  42. package/src/engineMedals.js +3 -3
  43. package/src/engineObject.js +4 -2
  44. package/src/engineRelease.js +1 -1
  45. package/src/engineSettings.js +20 -30
  46. package/src/engineTileLayer.js +5 -4
  47. package/src/engineUtilities.js +2 -10
  48. package/src/engineWebGL.js +6 -5
@@ -74,15 +74,7 @@ let canvasFixedSize = vec2();
74
74
  * @type {boolean}
75
75
  * @default
76
76
  * @memberof Settings */
77
- let canvasPixelated = true;
78
-
79
- /** Use nearest canvas scaling for more pixelated look
80
- * - If enabled sets css image-rendering:pixelated
81
- * - This defaults to false because text looks better with smoothing
82
- * @type {boolean}
83
- * @default
84
- * @memberof Settings */
85
- let overlayCanvasPixelated = false;
77
+ let canvasPixelated = false;
86
78
 
87
79
  /** Disables texture filtering for crisper pixel art
88
80
  * @type {boolean}
@@ -130,13 +122,19 @@ let glCircleSides = 32;
130
122
  * @type {Vector2}
131
123
  * @default Vector2(16,16)
132
124
  * @memberof Settings */
133
- let tileSizeDefault = vec2(16);
125
+ let tileDefaultSize = vec2(16);
134
126
 
135
- /** How many pixels smaller to draw tiles to prevent bleeding from neighbors
127
+ /** Default padding pixels around tiles
136
128
  * @type {number}
137
129
  * @default
138
130
  * @memberof Settings */
139
- let tileFixBleedScale = 0;
131
+ let tileDefaultPadding = 0;
132
+
133
+ /** Default amount of pixels smaller to draw tiles to prevent neighbor bleeding
134
+ * @type {number}
135
+ * @default
136
+ * @memberof Settings */
137
+ let tileDefaultBleed = 0;
140
138
 
141
139
  ///////////////////////////////////////////////////////////////////////////////
142
140
  // Object settings
@@ -374,7 +372,6 @@ function setCanvasMaxAspect(aspect) { canvasMaxAspect = aspect; }
374
372
  function setCanvasFixedSize(size) { canvasFixedSize = size.copy(); }
375
373
 
376
374
  /** Use nearest scaling algorithm for canvas for more pixelated look
377
- * - If enabled sets css image-rendering:pixelated
378
375
  * @param {boolean} pixelated
379
376
  * @memberof Settings */
380
377
  function setCanvasPixelated(pixelated)
@@ -386,18 +383,6 @@ function setCanvasPixelated(pixelated)
386
383
  glCanvas.style.imageRendering = pixelated ? 'pixelated' : '';
387
384
  }
388
385
 
389
- /** Use nearest scaling algorithm for canvas for more pixelated look
390
- * - If enabled sets css image-rendering:pixelated
391
- * - This defaults to false because text looks better with smoothing
392
- * @param {boolean} pixelated
393
- * @memberof Settings */
394
- function setOverlayCanvasPixelated(pixelated)
395
- {
396
- overlayCanvasPixelated = pixelated;
397
- if (overlayCanvas)
398
- overlayCanvas.style.imageRendering = pixelated ? 'pixelated' : '';
399
- }
400
-
401
386
  /** Disables texture filtering for crisper pixel art
402
387
  * @param {boolean} pixelated
403
388
  * @memberof Settings */
@@ -441,12 +426,17 @@ function setGLCircleSides(sides) { glCircleSides = sides; }
441
426
  /** Set default size of tiles in pixels
442
427
  * @param {Vector2} size
443
428
  * @memberof Settings */
444
- function setTileSizeDefault(size) { tileSizeDefault = size.copy(); }
429
+ function setTileDefaultSize(size) { tileDefaultSize = size.copy(); }
445
430
 
446
- /** Set to prevent tile bleeding from neighbors in pixels
447
- * @param {number} scale
431
+ /** Default padding pixels around tiles
432
+ * @param {number} padding
433
+ * @memberof Settings */
434
+ function setTileDefaultPadding(padding) { tileDefaultPadding = padding; }
435
+
436
+ /** Default amount of pixels smaller to draw tiles to prevent neighbor bleeding
437
+ * @param {number} bleed
448
438
  * @memberof Settings */
449
- function setTileFixBleedScale(scale) { tileFixBleedScale = scale; }
439
+ function setTileDefaultBleed(bleed) { tileDefaultBleed = bleed; }
450
440
 
451
441
  /** Set if collisions between objects are enabled
452
442
  * @param {boolean} enable
@@ -597,7 +587,7 @@ function setMedalsPreventUnlock(preventUnlock) { medalsPreventUnlock = preventUn
597
587
  /** Set if watermark with FPS should be shown
598
588
  * @param {boolean} show
599
589
  * @memberof Debug */
600
- function setShowWatermark(show) { showWatermark = show; }
590
+ function setDebugWatermark(show) { debugWatermark = show; }
601
591
 
602
592
  /** Set key code used to toggle debug mode, Esc by default
603
593
  * @param {string} key
@@ -443,8 +443,8 @@ class TileLayer extends CanvasLayer
443
443
  if (!this.context) return;
444
444
 
445
445
  // save current render settings
446
- /** @type {[HTMLCanvasElement|OffscreenCanvas, CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D, Vector2, Vector2, number]} */
447
- this.savedRenderSettings = [drawCanvas, drawContext, mainCanvasSize, cameraPos, cameraScale];
446
+ /** @type {[HTMLCanvasElement|OffscreenCanvas, CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D, Vector2, Vector2, number, Color]} */
447
+ this.savedRenderSettings = [drawCanvas, drawContext, mainCanvasSize, cameraPos, cameraScale, canvasClearColor];
448
448
 
449
449
  // set the draw canvas and context to this layer
450
450
  // use camera settings to match this layer's canvas
@@ -453,6 +453,7 @@ class TileLayer extends CanvasLayer
453
453
  cameraPos = this.size.scale(.5);
454
454
  const tileSize = this.tileInfo ? this.tileInfo.size : vec2(1);
455
455
  cameraScale = tileSize.x;
456
+ canvasClearColor = CLEAR_BLACK;
456
457
  mainCanvasSize = this.size.multiply(tileSize);
457
458
  if (clear)
458
459
  {
@@ -462,7 +463,7 @@ class TileLayer extends CanvasLayer
462
463
  }
463
464
 
464
465
  // disable smoothing for pixel art
465
- this.context.imageSmoothingEnabled = !tilesPixelated;
466
+ drawContext.imageSmoothingEnabled = !tilesPixelated;
466
467
 
467
468
  // setup gl rendering if enabled
468
469
  glPreRender();
@@ -478,7 +479,7 @@ class TileLayer extends CanvasLayer
478
479
  //debugSaveCanvas(this.canvas);
479
480
 
480
481
  // set stuff back to normal
481
- [drawCanvas, drawContext, mainCanvasSize, cameraPos, cameraScale] = this.savedRenderSettings;
482
+ [drawCanvas, drawContext, mainCanvasSize, cameraPos, cameraScale, canvasClearColor] = this.savedRenderSettings;
482
483
  }
483
484
 
484
485
  /** Draw the tile at a given position in the tile grid
@@ -126,11 +126,7 @@ function percent(value, valueA, valueB)
126
126
  * @return {number}
127
127
  * @memberof Utilities */
128
128
  function lerp(valueA, valueB, percent)
129
- {
130
- if (valueA >= 0 && valueA <= 1 && ((valueB < 0 || valueB > 1) && (percent < 0 || percent > 1)))
131
- console.warn('lerp() parameter order changed! use lerp(start, end, p)');
132
- return valueA + clamp(percent) * (valueB-valueA);
133
- }
129
+ { return valueA + clamp(percent) * (valueB-valueA); }
134
130
 
135
131
  /** Gets percent between percentA and percentB and linearly interpolates between lerpA and lerpB
136
132
  * A shortcut for lerp(lerpA, lerpB, percent(value, percentA, percentB))
@@ -161,11 +157,7 @@ function distanceWrap(valueA, valueB, wrapSize=1)
161
157
  * @return {number}
162
158
  * @memberof Utilities */
163
159
  function lerpWrap(valueA, valueB, percent, wrapSize=1)
164
- {
165
- if (valueA >= 0 && valueA <= 1 && ((valueB < 0 || valueB > 1) && (percent < 0 || percent > 1)))
166
- console.warn('lerpWrap() parameter order changed! use lerpWrap(start, end, p)');
167
- return valueA + clamp(percent) * distanceWrap(valueB, valueA, wrapSize);
168
- }
160
+ { return valueA + clamp(percent) * distanceWrap(valueB, valueA, wrapSize); }
169
161
 
170
162
  /** Returns signed wrapped distance between the two angles passed in
171
163
  * @param {number} angleA
@@ -13,7 +13,7 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- /** The WebGL canvas which appears above the main canvas and below the overlay canvas
16
+ /** The WebGL canvas which appears below the main canvas
17
17
  * @type {HTMLCanvasElement}
18
18
  * @memberof WebGL */
19
19
  let glCanvas;
@@ -43,7 +43,7 @@ const gl_MAX_POLY_VERTEXES = gl_ARRAY_BUFFER_SIZE / gl_POLY_VERTEX_BYTE_STRIDE |
43
43
  ///////////////////////////////////////////////////////////////////////////////
44
44
 
45
45
  // Initialize WebGL, called automatically by the engine
46
- function glInit()
46
+ function glInit(rootElement)
47
47
  {
48
48
  // keep set of texture infos so they can be restored if context is lost
49
49
  glTextureInfos = new Set;
@@ -67,8 +67,7 @@ function glInit()
67
67
  return;
68
68
  }
69
69
 
70
- // attach the WebGL canvas
71
- const rootElement = mainCanvas.parentElement;
70
+ // attach the WebGL canvas;
72
71
  rootElement.appendChild(glCanvas);
73
72
 
74
73
  // startup webgl
@@ -286,6 +285,9 @@ function glClearCanvas()
286
285
  glCanvas.width = drawCanvas.width;
287
286
  glCanvas.height = drawCanvas.height;
288
287
  glContext.viewport(0, 0, glCanvas.width, glCanvas.height);
288
+ const color = canvasClearColor;
289
+ if (color.a > 0)
290
+ glContext.clearColor(color.r, color.g, color.b, color.a);
289
291
  glContext.clear(glContext.COLOR_BUFFER_BIT);
290
292
  }
291
293
 
@@ -515,7 +517,6 @@ function glDraw(x, y, sizeX, sizeY, angle=0, uv0X=0, uv0Y=0, uv1X=1, uv1Y=1, rgb
515
517
  glFlush();
516
518
  glSetInstancedMode();
517
519
 
518
- glPolyMode = false;
519
520
  let offset = glBatchCount++ * gl_INDICES_PER_INSTANCE;
520
521
  glPositionData[offset++] = x;
521
522
  glPositionData[offset++] = y;