littlejsengine 1.12.6 → 1.13.4

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 (102) hide show
  1. package/README.md +15 -12
  2. package/dist/littlejs.d.ts +466 -236
  3. package/dist/littlejs.esm.js +6126 -5370
  4. package/dist/littlejs.esm.min.js +4 -1
  5. package/dist/littlejs.js +6093 -5359
  6. package/dist/littlejs.min.js +4 -1
  7. package/dist/littlejs.release.js +5614 -4907
  8. package/examples/box2d/game.js +2 -2
  9. package/examples/box2d/gameObjects.js +8 -7
  10. package/examples/box2d/index.html +1 -1
  11. package/examples/box2d/scenes.js +8 -8
  12. package/examples/breakout/game.js +1 -1
  13. package/examples/breakout/gameObjects.js +2 -2
  14. package/examples/breakout/index.html +1 -1
  15. package/examples/breakoutTutorial/README.md +46 -43
  16. package/examples/breakoutTutorial/game.js +3 -3
  17. package/examples/breakoutTutorial/index.html +1 -1
  18. package/examples/electron/build.bat +7 -0
  19. package/examples/electron/build.js +124 -0
  20. package/examples/electron/electron.js +35 -0
  21. package/examples/electron/game.js +140 -0
  22. package/examples/electron/index.html +13 -0
  23. package/examples/electron/package.json +12 -0
  24. package/examples/electron/tiles.png +0 -0
  25. package/examples/empty/game.js +1 -0
  26. package/examples/empty/index.html +1 -1
  27. package/examples/htmlMenu/game.js +1 -1
  28. package/examples/htmlMenu/index.html +1 -1
  29. package/examples/index.html +486 -182
  30. package/examples/module/game.js +6 -3
  31. package/examples/module/index.html +1 -1
  32. package/examples/particles/index.html +12 -3
  33. package/examples/platformer/game.js +4 -4
  34. package/examples/platformer/gameCharacter.js +6 -6
  35. package/examples/platformer/gameEffects.js +74 -57
  36. package/examples/platformer/gameLevel.js +61 -70
  37. package/examples/platformer/gameObjects.js +4 -4
  38. package/examples/platformer/index.html +1 -1
  39. package/examples/puzzle/index.html +1 -1
  40. package/examples/shorts/base.html +23 -3
  41. package/examples/shorts/blending.js +9 -5
  42. package/examples/shorts/box2d.js +1 -1
  43. package/examples/shorts/box2dCar.js +9 -13
  44. package/examples/shorts/clock.js +1 -1
  45. package/examples/shorts/colors.js +2 -2
  46. package/examples/shorts/flappyGame.js +52 -0
  47. package/examples/shorts/helloWorld.js +6 -3
  48. package/examples/shorts/hillGlideGame.js +56 -0
  49. package/examples/shorts/landerGame.js +32 -0
  50. package/examples/shorts/maze.js +47 -0
  51. package/examples/shorts/medals.js +42 -0
  52. package/examples/shorts/nineSlice.js +21 -0
  53. package/examples/shorts/piano.js +52 -0
  54. package/examples/shorts/platformer.js +24 -20
  55. package/examples/shorts/{pong.js → pongGame.js} +1 -1
  56. package/examples/shorts/raycasting.js +71 -0
  57. package/examples/shorts/shapes.js +9 -9
  58. package/examples/shorts/slidingPuzzle.js +42 -0
  59. package/examples/shorts/spaceGame.js +56 -0
  60. package/examples/shorts/starfield.js +15 -0
  61. package/examples/shorts/systemFont.js +1 -1
  62. package/examples/shorts/tileLayer.js +3 -5
  63. package/examples/shorts/tiles.png +0 -0
  64. package/examples/shorts/tiltedView.js +8 -7
  65. package/examples/shorts/topDown.js +18 -26
  66. package/examples/shorts/uiSystem.js +5 -7
  67. package/examples/starter/build.bat +6 -1
  68. package/examples/starter/build.js +9 -8
  69. package/examples/starter/game.js +7 -4
  70. package/examples/starter/index.html +23 -13
  71. package/examples/stress/index.html +7 -8
  72. package/examples/style.css +139 -0
  73. package/examples/typescript/build.js +2 -3
  74. package/examples/typescript/game.js +4 -4
  75. package/examples/typescript/game.ts +6 -3
  76. package/examples/typescript/index.html +1 -1
  77. package/examples/uiSystem/game.js +10 -25
  78. package/examples/uiSystem/index.html +1 -1
  79. package/package.json +2 -2
  80. package/plugins/box2d.js +22 -97
  81. package/plugins/drawUtilities.js +132 -0
  82. package/plugins/newgrounds.js +1 -1
  83. package/plugins/pluginExport.js +7 -1
  84. package/plugins/postProcess.js +9 -2
  85. package/plugins/uiSystem.js +155 -67
  86. package/plugins/zzfxm.js +1 -1
  87. package/reference.md +10 -10
  88. package/src/engine.js +56 -30
  89. package/src/engineAudio.js +15 -6
  90. package/src/engineBuild.bat +6 -1
  91. package/src/engineBuild.js +20 -5
  92. package/src/engineDebug.js +55 -28
  93. package/src/engineDraw.js +321 -177
  94. package/src/engineExport.js +27 -9
  95. package/src/engineInput.js +110 -38
  96. package/src/engineMedals.js +4 -4
  97. package/src/engineObject.js +71 -70
  98. package/src/engineParticles.js +33 -9
  99. package/src/engineSettings.js +69 -23
  100. package/src/engineTileLayer.js +312 -153
  101. package/src/engineUtilities.js +187 -135
  102. package/src/engineWebGL.js +70 -39
@@ -59,18 +59,32 @@ declare module "littlejsengine" {
59
59
  * @default false
60
60
  * @memberof Engine */
61
61
  export let paused: boolean;
62
+ /** Get if game is paused
63
+ * @return {boolean}
64
+ * @memberof Engine */
65
+ export function getPaused(): boolean;
62
66
  /** Set if game is paused
63
- * @param {boolean} isPaused
67
+ * @param {boolean} [isPaused]
64
68
  * @memberof Engine */
65
- export function setPaused(isPaused: boolean): void;
69
+ export function setPaused(isPaused?: boolean): void;
66
70
  /** Startup LittleJS engine with your callback functions
67
- * @param {Function|function():Promise} gameInit - Called once after the engine starts up
68
- * @param {Function} gameUpdate - Called every frame before objects are updated
69
- * @param {Function} gameUpdatePost - Called after physics and objects are updated, even when paused
70
- * @param {Function} gameRender - Called before objects are rendered, for drawing the background
71
- * @param {Function} gameRenderPost - Called after objects are rendered, useful for drawing UI
72
- * @param {Array<string>} [imageSources=[]] - List of images to load
73
- * @param {HTMLElement} [rootElement] - Root element to attach to, the document body by default
71
+ * @param {Function|function():Promise} gameInit - Called once after the engine starts up, can be async for loading
72
+ * @param {Function} gameUpdate - Called every frame before objects are updated (60fps), use for game logic
73
+ * @param {Function} gameUpdatePost - Called after physics and objects are updated, even when paused, use for UI updates
74
+ * @param {Function} gameRender - Called before objects are rendered, use for drawing backgrounds/world elements
75
+ * @param {Function} gameRenderPost - Called after objects are rendered, use for drawing UI/overlays
76
+ * @param {Array<string>} [imageSources=[]] - List of image file paths to preload (e.g., ['player.png', 'tiles.png'])
77
+ * @param {HTMLElement} [rootElement] - Root DOM element to attach canvas to, defaults to document.body
78
+ * @example
79
+ * // Basic engine startup
80
+ * engineInit(
81
+ * () => { console.log('Game initialized!'); }, // gameInit
82
+ * () => { updatePlayer(); }, // gameUpdate
83
+ * () => { updateUI(); }, // gameUpdatePost
84
+ * () => { drawBackground(); }, // gameRender
85
+ * () => { drawHUD(); }, // gameRenderPost
86
+ * ['tiles.png', 'tilesLevel.png'] // images to load
87
+ * );
74
88
  * @memberof Engine */
75
89
  export function engineInit(gameInit: Function | (() => Promise<any>), gameUpdate: Function, gameUpdatePost: Function, gameRender: Function, gameRenderPost: Function, imageSources?: Array<string>, rootElement?: HTMLElement): Promise<void>;
76
90
  /** Update each engine object, remove destroyed objects, and update time
@@ -131,9 +145,9 @@ declare module "littlejsengine" {
131
145
  export let showWatermark: boolean;
132
146
  /** Asserts if the expression is false, does not do anything in release builds
133
147
  * @param {boolean} assert
134
- * @param {Object} [output]
148
+ * @param {...Object} [output] - error message output
135
149
  * @memberof Debug */
136
- export function ASSERT(assert: boolean, output?: any): void;
150
+ export function ASSERT(assert: boolean, ...output?: any[]): void;
137
151
  /** Draw a debug rectangle in world space
138
152
  * @param {Vector2} pos
139
153
  * @param {Vector2} [size=Vector2()]
@@ -176,13 +190,13 @@ declare module "littlejsengine" {
176
190
  * @memberof Debug */
177
191
  export function debugLine(posA: Vector2, posB: Vector2, color?: string, thickness?: number, time?: number): void;
178
192
  /** Draw a debug combined axis aligned bounding box in world space
179
- * @param {Vector2} pA - position A
180
- * @param {Vector2} sA - size A
181
- * @param {Vector2} pB - position B
182
- * @param {Vector2} sB - size B
193
+ * @param {Vector2} posA
194
+ * @param {Vector2} sizeA
195
+ * @param {Vector2} posB
196
+ * @param {Vector2} sizeB
183
197
  * @param {string} [color]
184
198
  * @memberof Debug */
185
- export function debugOverlap(pA: Vector2, sA: Vector2, pB: Vector2, sB: Vector2, color?: string): void;
199
+ export function debugOverlap(posA: Vector2, sizeA: Vector2, posB: Vector2, sizeB: Vector2, color?: string): void;
186
200
  /** Draw a debug axis aligned bounding box in world space
187
201
  * @param {string} text
188
202
  * @param {Vector2} pos
@@ -200,11 +214,11 @@ declare module "littlejsengine" {
200
214
  * @memberof Debug */
201
215
  export function debugScreenshot(): void;
202
216
  /** Save a canvas to disk
203
- * @param {HTMLCanvasElement} canvas
204
- * @param {string} [filename]
205
- * @param {string} [type]
217
+ * @param {HTMLCanvasElement|OffscreenCanvas} canvas
218
+ * @param {string} [filename]
219
+ * @param {string} [type]
206
220
  * @memberof Debug */
207
- export function debugSaveCanvas(canvas: HTMLCanvasElement, filename?: string, type?: string): void;
221
+ export function debugSaveCanvas(canvas: HTMLCanvasElement | OffscreenCanvas, filename?: string, type?: string): void;
208
222
  /** Save a text file to disk
209
223
  * @param {string} text
210
224
  * @param {string} [filename]
@@ -238,11 +252,22 @@ declare module "littlejsengine" {
238
252
  * @default Vector2()
239
253
  * @memberof Settings */
240
254
  export let cameraPos: Vector2;
255
+ /** Rotation angle of camera in world space
256
+ * @type {number}
257
+ * @default
258
+ * @memberof Settings */
259
+ export let cameraAngle: number;
241
260
  /** Scale of camera in world space
242
261
  * @type {number}
243
262
  * @default
244
263
  * @memberof Settings */
245
264
  export let cameraScale: number;
265
+ /** Enable applying color to tiles when using canvas2d
266
+ * - This is slower but should be the same as webgl rendering
267
+ * @type {boolean}
268
+ * @default
269
+ * @memberof Settings */
270
+ export let canvasColorTiles: boolean;
246
271
  /** The max size of the canvas, centered if window is larger
247
272
  * @type {Vector2}
248
273
  * @default Vector2(1920,1080)
@@ -254,13 +279,19 @@ declare module "littlejsengine" {
254
279
  * @default Vector2()
255
280
  * @memberof Settings */
256
281
  export let canvasFixedSize: Vector2;
257
- /** Use nearest neighbor canvas scaling for more pixelated look
258
- * - Must be set before startup to take effect
282
+ /** Use nearest canvas scaling for more pixelated look
259
283
  * - If enabled sets css image-rendering:pixelated
260
284
  * @type {boolean}
261
285
  * @default
262
286
  * @memberof Settings */
263
287
  export let canvasPixelated: boolean;
288
+ /** Use nearest canvas scaling for more pixelated look
289
+ * - If enabled sets css image-rendering:pixelated
290
+ * - This defaults to false because text looks better with smoothing
291
+ * @type {boolean}
292
+ * @default
293
+ * @memberof Settings */
294
+ export let overlayCanvasPixelated: boolean;
264
295
  /** Disables texture filtering for crisper pixel art
265
296
  * @type {boolean}
266
297
  * @default
@@ -316,7 +347,7 @@ declare module "littlejsengine" {
316
347
  * @type {number}
317
348
  * @default
318
349
  * @memberof Settings */
319
- export let objectDefaultElasticity: number;
350
+ export let objectDefaultRestitution: number;
320
351
  /** How much to slow when touching (0-1)
321
352
  * @type {number}
322
353
  * @default
@@ -343,12 +374,6 @@ declare module "littlejsengine" {
343
374
  * @default
344
375
  * @memberof Settings */
345
376
  export let glEnable: boolean;
346
- /** Fixes slow rendering in some browsers by not compositing the WebGL canvas
347
- * - Must be set before startup to take effect
348
- * @type {boolean}
349
- * @default
350
- * @memberof Settings */
351
- export let glOverlay: boolean;
352
377
  /** Should gamepads be allowed
353
378
  * @type {boolean}
354
379
  * @default
@@ -430,10 +455,21 @@ declare module "littlejsengine" {
430
455
  * @param {Vector2} pos
431
456
  * @memberof Settings */
432
457
  export function setCameraPos(pos: Vector2): void;
458
+ /** Set angle of camera in world space
459
+ * @param {number} angle
460
+ * @memberof Settings */
461
+ export function setCameraAngle(angle: number): void;
433
462
  /** Set scale of camera in world space
434
463
  * @param {number} scale
435
464
  * @memberof Settings */
436
465
  export function setCameraScale(scale: number): void;
466
+ /** Set if tiles should be colorized when using canvas2d
467
+ * This can be slower but results should look nearly identical to webgl rendering
468
+ * It can be enabled/disabled at any time
469
+ * Optimized for performance, and will use faster method if color is white or untextured
470
+ * @param {boolean} colorTiles
471
+ * @memberof Settings */
472
+ export function setCanvasColorTiles(colorTiles: boolean): void;
437
473
  /** Set max size of the canvas
438
474
  * @param {Vector2} size
439
475
  * @memberof Settings */
@@ -442,10 +478,17 @@ declare module "littlejsengine" {
442
478
  * @param {Vector2} size
443
479
  * @memberof Settings */
444
480
  export function setCanvasFixedSize(size: Vector2): void;
445
- /** Use nearest neighbor scaling algorithm for canvas for more pixelated look
481
+ /** Use nearest scaling algorithm for canvas for more pixelated look
482
+ * - If enabled sets css image-rendering:pixelated
446
483
  * @param {boolean} pixelated
447
484
  * @memberof Settings */
448
485
  export function setCanvasPixelated(pixelated: boolean): void;
486
+ /** Use nearest scaling algorithm for canvas for more pixelated look
487
+ * - If enabled sets css image-rendering:pixelated
488
+ * - This defaults to false because text looks better with smoothing
489
+ * @param {boolean} pixelated
490
+ * @memberof Settings */
491
+ export function setOverlayCanvasPixelated(pixelated: boolean): void;
449
492
  /** Disables texture filtering for crisper pixel art
450
493
  * @param {boolean} pixelated
451
494
  * @memberof Settings */
@@ -465,11 +508,7 @@ declare module "littlejsengine" {
465
508
  /** Set if webgl rendering is enabled
466
509
  * @param {boolean} enable
467
510
  * @memberof Settings */
468
- export function setGlEnable(enable: boolean): void;
469
- /** Set to not composite the WebGL canvas
470
- * @param {boolean} overlay
471
- * @memberof Settings */
472
- export function setGlOverlay(overlay: boolean): void;
511
+ export function setGLEnable(enable: boolean): void;
473
512
  /** Set default size of tiles in pixels
474
513
  * @param {Vector2} size
475
514
  * @memberof Settings */
@@ -495,9 +534,9 @@ declare module "littlejsengine" {
495
534
  * @memberof Settings */
496
535
  export function setObjectDefaultAngleDamping(damp: number): void;
497
536
  /** Set how much to bounce when a collision occur
498
- * @param {number} elasticity
537
+ * @param {number} restitution
499
538
  * @memberof Settings */
500
- export function setObjectDefaultElasticity(elasticity: number): void;
539
+ export function setObjectDefaultRestitution(restitution: number): void;
501
540
  /** Set how much to slow when touching
502
541
  * @param {number} friction
503
542
  * @memberof Settings */
@@ -609,18 +648,16 @@ declare module "littlejsengine" {
609
648
  * @return {number}
610
649
  * @memberof Utilities */
611
650
  export function abs(value: number): number;
612
- /** Returns lowest of two values passed in
613
- * @param {number} valueA
614
- * @param {number} valueB
651
+ /** Returns lowest value passed in
652
+ * @param {...number} values
615
653
  * @return {number}
616
654
  * @memberof Utilities */
617
- export function min(valueA: number, valueB: number): number;
618
- /** Returns highest of two values passed in
619
- * @param {number} valueA
620
- * @param {number} valueB
655
+ export function min(...values: number[]): number;
656
+ /** Returns highest value passed in
657
+ * @param {...number} values
621
658
  * @return {number}
622
659
  * @memberof Utilities */
623
- export function max(valueA: number, valueB: number): number;
660
+ export function max(...values: number[]): number;
624
661
  /** Returns the sign of value passed in
625
662
  * @param {number} value
626
663
  * @return {number}
@@ -654,13 +691,13 @@ declare module "littlejsengine" {
654
691
  * @memberof Utilities */
655
692
  export function distanceWrap(valueA: number, valueB: number, wrapSize?: number): number;
656
693
  /** Linearly interpolates between values passed in with wrapping
657
- * @param {number} percent
658
694
  * @param {number} valueA
659
695
  * @param {number} valueB
696
+ * @param {number} percent
660
697
  * @param {number} [wrapSize]
661
698
  * @returns {number}
662
699
  * @memberof Utilities */
663
- export function lerpWrap(percent: number, valueA: number, valueB: number, wrapSize?: number): number;
700
+ export function lerpWrap(valueA: number, valueB: number, percent: number, wrapSize?: number): number;
664
701
  /** Returns signed wrapped distance between the two angles passed in
665
702
  * @param {number} angleA
666
703
  * @param {number} angleB
@@ -668,19 +705,19 @@ declare module "littlejsengine" {
668
705
  * @memberof Utilities */
669
706
  export function distanceAngle(angleA: number, angleB: number): number;
670
707
  /** Linearly interpolates between the angles passed in with wrapping
671
- * @param {number} percent
672
708
  * @param {number} angleA
673
709
  * @param {number} angleB
710
+ * @param {number} percent
674
711
  * @returns {number}
675
712
  * @memberof Utilities */
676
- export function lerpAngle(percent: number, angleA: number, angleB: number): number;
713
+ export function lerpAngle(angleA: number, angleB: number, percent: number): number;
677
714
  /** Linearly interpolates between values passed in using percent
678
- * @param {number} percent
679
715
  * @param {number} valueA
680
716
  * @param {number} valueB
717
+ * @param {number} percent
681
718
  * @return {number}
682
719
  * @memberof Utilities */
683
- export function lerp(percent: number, valueA: number, valueB: number): number;
720
+ export function lerp(valueA: number, valueB: number, percent: number): number;
684
721
  /** Applies smoothstep function to the percentage value
685
722
  * @param {number} percent
686
723
  * @return {number}
@@ -692,10 +729,11 @@ declare module "littlejsengine" {
692
729
  * @memberof Utilities */
693
730
  export function nearestPowerOfTwo(value: number): number;
694
731
  /** Returns true if two axis aligned bounding boxes are overlapping
732
+ * this can be used for simple collision detection between objects
695
733
  * @param {Vector2} posA - Center of box A
696
734
  * @param {Vector2} sizeA - Size of box A
697
735
  * @param {Vector2} posB - Center of box B
698
- * @param {Vector2} [sizeB=(0,0)] - Size of box B, a point if undefined
736
+ * @param {Vector2} [sizeB=(0,0)] - Size of box B, uses a point if undefined
699
737
  * @return {boolean} - True if overlapping
700
738
  * @memberof Utilities */
701
739
  export function isOverlapping(posA: Vector2, sizeA: Vector2, posB: Vector2, sizeB?: Vector2): boolean;
@@ -711,9 +749,10 @@ declare module "littlejsengine" {
711
749
  * @param {number} [frequency] - Frequency of the wave in Hz
712
750
  * @param {number} [amplitude] - Amplitude (max height) of the wave
713
751
  * @param {number} [t=time] - Value to use for time of the wave
752
+ * @param {number} [offset] - Value to use for time offset of the wave
714
753
  * @return {number} - Value waving between 0 and amplitude
715
754
  * @memberof Utilities */
716
- export function wave(frequency?: number, amplitude?: number, t?: number): number;
755
+ export function wave(frequency?: number, amplitude?: number, t?: number, offset?: number): number;
717
756
  /** Formats seconds to mm:ss style for display purposes
718
757
  * @param {number} t - time in seconds
719
758
  * @return {string}
@@ -753,7 +792,7 @@ declare module "littlejsengine" {
753
792
  * @param {number} [length]
754
793
  * @return {Vector2}
755
794
  * @memberof Random */
756
- export function randVector(length?: number): Vector2;
795
+ export function randVec2(length?: number): Vector2;
757
796
  /** Returns a random color between the two passed in colors, combine components if linear
758
797
  * @param {Color} [colorA=(1,1,1,1)]
759
798
  * @param {Color} [colorB=(0,0,0,1)]
@@ -773,8 +812,8 @@ declare module "littlejsengine" {
773
812
  */
774
813
  export class RandomGenerator {
775
814
  /** Create a random number generator with the seed passed in
776
- * @param {number} seed - Starting seed */
777
- constructor(seed: number);
815
+ * @param {number} [seed] - Starting seed or engine default seed */
816
+ constructor(seed?: number);
778
817
  /** @property {number} - random seed */
779
818
  seed: number;
780
819
  /** Returns a seeded random value between the two values passed in
@@ -787,6 +826,10 @@ declare module "littlejsengine" {
787
826
  * @param {number} [valueB]
788
827
  * @return {number} */
789
828
  int(valueA: number, valueB?: number): number;
829
+ /** Randomly returns true or false given the chance of true passed in
830
+ * @param {number} [chance]
831
+ * @return {boolean} */
832
+ bool(chance?: number): boolean;
790
833
  /** Randomly returns either -1 or 1 deterministically
791
834
  * @return {number} */
792
835
  sign(): number;
@@ -795,6 +838,14 @@ declare module "littlejsengine" {
795
838
  * @param {number} [valueB]
796
839
  * @return {number} */
797
840
  floatSign(valueA?: number, valueB?: number): number;
841
+ /** Returns a random angle between -PI and PI
842
+ * @return {number} */
843
+ angle(): number;
844
+ /** Returns a seeded vec2 with size between the two values passed in
845
+ * @param {number} valueA
846
+ * @param {number} [valueB]
847
+ * @return {Vector2} */
848
+ vec2(valueA?: number, valueB?: number): Vector2;
798
849
  }
799
850
  /**
800
851
  * 2D Vector object with vector math library
@@ -872,6 +923,11 @@ declare module "littlejsengine" {
872
923
  * @param {Vector2} v - other vector
873
924
  * @return {number} */
874
925
  cross(v: Vector2): number;
926
+ /** Returns a copy this vector reflected by the surface normal
927
+ * @param {Vector2} normal - surface normal (should be normalized)
928
+ * @param {number} restitution - how much to bounce, 1 is perfect bounce, 0 is no bounce
929
+ * @return {Vector2} */
930
+ reflect(normal: Vector2, restitution?: number): Vector2;
875
931
  /** Returns the clockwise angle of this vector, up is angle 0
876
932
  * @return {number} */
877
933
  angle(): number;
@@ -894,9 +950,16 @@ declare module "littlejsengine" {
894
950
  /** Returns a copy of this vector that has been inverted
895
951
  * @return {Vector2} */
896
952
  invert(): Vector2;
953
+ /** Returns a copy of this vector absolute values
954
+ * @return {Vector2} */
955
+ abs(): Vector2;
897
956
  /** Returns a copy of this vector with each axis floored
898
957
  * @return {Vector2} */
899
958
  floor(): Vector2;
959
+ /** Returns new vec2 with modded values
960
+ * @param {number} [divisor]
961
+ * @return {Vector2} */
962
+ mod(divisor?: number): Vector2;
900
963
  /** Returns the area this vector covers as a rectangle
901
964
  * @return {number} */
902
965
  area(): number;
@@ -923,7 +986,7 @@ declare module "littlejsengine" {
923
986
  * let a = new Color; // white
924
987
  * let b = new Color(1, 0, 0); // red
925
988
  * let c = new Color(0, 0, 0, 0); // transparent black
926
- * let d = rgb(0, 0, 1); // blue using rgb color
989
+ * let d = rgb(0, 0, 1); // blue using rgb color
927
990
  * let e = hsl(.3, 1, .5); // green using hsl color
928
991
  */
929
992
  export class Color {
@@ -1091,14 +1154,36 @@ declare module "littlejsengine" {
1091
1154
  * @memberof Utilities
1092
1155
  */
1093
1156
  export function isColor(c: any): boolean;
1157
+ /**
1158
+ * Check if object is a valid Vector2
1159
+ * @param {any} v
1160
+ * @return {boolean}
1161
+ * @memberof Utilities
1162
+ */
1163
+ export function isVector2(v: any): boolean;
1164
+ /**
1165
+ * Check if object is a valid number, not NaN or undefined, but it may be infinite
1166
+ * @param {any} n
1167
+ * @return {boolean}
1168
+ * @memberof Utilities
1169
+ */
1170
+ export function isNumber(n: any): boolean;
1094
1171
  /** Color - White #ffffff
1095
1172
  * @type {Color}
1096
1173
  * @memberof Utilities */
1097
1174
  export const WHITE: Color;
1175
+ /** Color - Clear White #ffffff with 0 alpha
1176
+ * @type {Color}
1177
+ * @memberof Utilities */
1178
+ export const CLEAR_WHITE: Color;
1098
1179
  /** Color - Black #000000
1099
1180
  * @type {Color}
1100
1181
  * @memberof Utilities */
1101
1182
  export const BLACK: Color;
1183
+ /** Color - Clear Black #000000 with 0 alpha
1184
+ * @type {Color}
1185
+ * @memberof Utilities */
1186
+ export const CLEAR_BLACK: Color;
1102
1187
  /** Color - Gray #808080
1103
1188
  * @type {Color}
1104
1189
  * @memberof Utilities */
@@ -1143,10 +1228,10 @@ declare module "littlejsengine" {
1143
1228
  * Create a tile info object using a grid based system
1144
1229
  * - This can take vecs or floats for easier use and conversion
1145
1230
  * - If an index is passed in, the tile size and index will determine the position
1146
- * @param {Vector2|number} [pos=0] - Index of tile in sheet
1231
+ * @param {Vector2|number} [pos=0] - Index of tile in sheet
1147
1232
  * @param {Vector2|number} [size=tileSizeDefault] - Size of tile in pixels
1148
- * @param {number} [textureIndex] - Texture index to use
1149
- * @param {number} [padding] - How many pixels padding around tiles
1233
+ * @param {number} [textureIndex] - Texture index to use
1234
+ * @param {number} [padding] - How many pixels padding around tiles
1150
1235
  * @return {TileInfo}
1151
1236
  * @example
1152
1237
  * tile(2) // a tile at index 2 using the default tile size of 16
@@ -1175,6 +1260,8 @@ declare module "littlejsengine" {
1175
1260
  textureIndex: number;
1176
1261
  /** @property {number} - How many pixels padding around tiles */
1177
1262
  padding: number;
1263
+ /** @property {TextureInfo} - The texture info for this tile */
1264
+ textureInfo: TextureInfo;
1178
1265
  /** Returns a copy of this tile offset by a vector
1179
1266
  * @param {Vector2} offset - Offset to apply in pixels
1180
1267
  * @return {TileInfo}
@@ -1185,26 +1272,31 @@ declare module "littlejsengine" {
1185
1272
  * @return {TileInfo}
1186
1273
  */
1187
1274
  frame(frame: number): TileInfo;
1188
- /** Returns the texture info for this tile
1189
- * @return {TextureInfo}
1190
- */
1191
- getTextureInfo(): TextureInfo;
1275
+ /**
1276
+ * Set this tile to use a full image
1277
+ * @param {HTMLImageElement|OffscreenCanvas} image
1278
+ * @param {WebGLTexture} [glTexture] - webgl texture
1279
+ * @return {TileInfo}
1280
+ */
1281
+ setFullImage(image: HTMLImageElement | OffscreenCanvas, glTexture?: WebGLTexture): TileInfo;
1192
1282
  }
1193
1283
  /** Texture Info - Stores info about each texture */
1194
1284
  export class TextureInfo {
1195
1285
  /**
1196
1286
  * Create a TextureInfo, called automatically by the engine
1197
- * @param {HTMLImageElement} image
1287
+ * @param {HTMLImageElement|OffscreenCanvas} image
1288
+ * @param {WebGLTexture} [glTexture] - webgl texture
1198
1289
  */
1199
- constructor(image: HTMLImageElement);
1290
+ constructor(image: HTMLImageElement | OffscreenCanvas, glTexture?: WebGLTexture);
1200
1291
  /** @property {HTMLImageElement} - image source */
1201
- image: HTMLImageElement;
1292
+ image: OffscreenCanvas | HTMLImageElement;
1202
1293
  /** @property {Vector2} - size of the image */
1203
1294
  size: Vector2;
1204
1295
  /** @property {Vector2} - inverse of the size, cached for rendering */
1205
1296
  sizeInverse: Vector2;
1206
1297
  /** @property {WebGLTexture} - webgl texture */
1207
1298
  glTexture: WebGLTexture;
1299
+ createWebGLTexture(): void;
1208
1300
  }
1209
1301
  /**
1210
1302
  * LittleJS Drawing System
@@ -1276,7 +1368,7 @@ declare module "littlejsengine" {
1276
1368
  * @param {Color} [color=(1,1,1,1)]
1277
1369
  * @param {number} [angle]
1278
1370
  * @param {boolean} [useWebGL=glEnable]
1279
- * @param {boolean} [screenSpace=false]
1371
+ * @param {boolean} [screenSpace]
1280
1372
  * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context]
1281
1373
  * @memberof Draw */
1282
1374
  export function drawRect(pos: Vector2, size?: Vector2, color?: Color, angle?: number, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
@@ -1285,52 +1377,58 @@ declare module "littlejsengine" {
1285
1377
  * @param {Vector2} posB
1286
1378
  * @param {number} [thickness]
1287
1379
  * @param {Color} [color=(1,1,1,1)]
1380
+ * @param {Vector2} [pos=(0,0)] - Offset to apply
1381
+ * @param {number} [angle] - Angle to rotate by
1288
1382
  * @param {boolean} [useWebGL=glEnable]
1289
- * @param {boolean} [screenSpace=false]
1383
+ * @param {boolean} [screenSpace]
1290
1384
  * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context]
1291
1385
  * @memberof Draw */
1292
- export function drawLine(posA: Vector2, posB: Vector2, thickness?: number, color?: Color, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1386
+ export function drawLine(posA: Vector2, posB: Vector2, thickness?: number, color?: Color, pos?: Vector2, angle?: number, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1293
1387
  /** Draw colored polygon using passed in points
1294
- * @param {Array<Vector2>} points - Array of Vector2 points
1388
+ * @param {Array<Vector2>} points - Array of Vector2 points
1295
1389
  * @param {Color} [color=(1,1,1,1)]
1296
- * @param {number} [lineWidth=0]
1390
+ * @param {number} [lineWidth]
1297
1391
  * @param {Color} [lineColor=(0,0,0,1)]
1298
- * @param {boolean} [screenSpace=false]
1299
- * @param {CanvasRenderingContext2D} [context=mainContext]
1392
+ * @param {Vector2} [pos=(0,0)] - Offset to apply
1393
+ * @param {number} [angle] - Angle to rotate by
1394
+ * @param {boolean} [useWebGL] - Webgl not supported
1395
+ * @param {boolean} [screenSpace]
1396
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=drawContext]
1300
1397
  * @memberof Draw */
1301
- export function drawPoly(points: Array<Vector2>, color?: Color, lineWidth?: number, lineColor?: Color, screenSpace?: boolean, context?: CanvasRenderingContext2D): void;
1398
+ export function drawPoly(points: Array<Vector2>, color?: Color, lineWidth?: number, lineColor?: Color, pos?: Vector2, angle?: number, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1302
1399
  /** Draw colored ellipse using passed in point
1303
1400
  * @param {Vector2} pos
1304
- * @param {number} [width=1]
1305
- * @param {number} [height=1]
1306
- * @param {number} [angle=0]
1401
+ * @param {Vector2} [size=(1,1)]
1307
1402
  * @param {Color} [color=(1,1,1,1)]
1308
- * @param {number} [lineWidth=0]
1403
+ * @param {number} [angle]
1404
+ * @param {number} [lineWidth]
1309
1405
  * @param {Color} [lineColor=(0,0,0,1)]
1310
- * @param {boolean} [screenSpace=false]
1311
- * @param {CanvasRenderingContext2D} [context=mainContext]
1406
+ * @param {boolean} [useWebGL] - Webgl not supported
1407
+ * @param {boolean} [screenSpace]
1408
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=drawContext]
1312
1409
  * @memberof Draw */
1313
- export function drawEllipse(pos: Vector2, width?: number, height?: number, angle?: number, color?: Color, lineWidth?: number, lineColor?: Color, screenSpace?: boolean, context?: CanvasRenderingContext2D): void;
1410
+ export function drawEllipse(pos: Vector2, size?: Vector2, color?: Color, angle?: number, lineWidth?: number, lineColor?: Color, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1314
1411
  /** Draw colored circle using passed in point
1315
1412
  * @param {Vector2} pos
1316
1413
  * @param {number} [radius=1]
1317
1414
  * @param {Color} [color=(1,1,1,1)]
1318
1415
  * @param {number} [lineWidth=0]
1319
1416
  * @param {Color} [lineColor=(0,0,0,1)]
1417
+ * @param {boolean} [useWebGL] - Webgl not supported
1320
1418
  * @param {boolean} [screenSpace=false]
1321
- * @param {CanvasRenderingContext2D} [context=mainContext]
1419
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=drawContext]
1322
1420
  * @memberof Draw */
1323
- export function drawCircle(pos: Vector2, radius?: number, color?: Color, lineWidth?: number, lineColor?: Color, screenSpace?: boolean, context?: CanvasRenderingContext2D): void;
1421
+ export function drawCircle(pos: Vector2, radius?: number, color?: Color, lineWidth?: number, lineColor?: Color, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1324
1422
  /** Draw directly to a 2d canvas context in world space
1325
1423
  * @param {Vector2} pos
1326
1424
  * @param {Vector2} size
1327
1425
  * @param {number} angle
1328
- * @param {boolean} mirror
1329
- * @param {Function} drawFunction
1426
+ * @param {boolean} [mirror]
1427
+ * @param {Function} [drawFunction]
1330
1428
  * @param {boolean} [screenSpace=false]
1331
- * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=mainContext]
1429
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=drawContext]
1332
1430
  * @memberof Draw */
1333
- export function drawCanvas2D(pos: Vector2, size: Vector2, angle: number, mirror: boolean, drawFunction: Function, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1431
+ export function drawCanvas2D(pos: Vector2, size: Vector2, angle?: number, mirror?: boolean, drawFunction?: Function, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1334
1432
  /** Draw text on main canvas in world space
1335
1433
  * Automatically splits new lines into rows
1336
1434
  * @param {string} text
@@ -1342,7 +1440,7 @@ declare module "littlejsengine" {
1342
1440
  * @param {CanvasTextAlign} [textAlign='center']
1343
1441
  * @param {string} [font=fontDefault]
1344
1442
  * @param {number} [maxWidth]
1345
- * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=mainContext]
1443
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=drawContext]
1346
1444
  * @memberof Draw */
1347
1445
  export function drawText(text: string, pos: Vector2, size?: number, color?: Color, lineWidth?: number, lineColor?: Color, textAlign?: CanvasTextAlign, font?: string, maxWidth?: number, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1348
1446
  /** Draw text on overlay canvas in world space
@@ -1374,10 +1472,9 @@ declare module "littlejsengine" {
1374
1472
  export function drawTextScreen(text: string, pos: Vector2, size?: number, color?: Color, lineWidth?: number, lineColor?: Color, textAlign?: CanvasTextAlign, font?: string, maxWidth?: number, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1375
1473
  /** Enable normal or additive blend mode
1376
1474
  * @param {boolean} [additive]
1377
- * @param {boolean} [useWebGL=glEnable]
1378
- * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context=mainContext]
1475
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context]
1379
1476
  * @memberof Draw */
1380
- export function setBlendMode(additive?: boolean, useWebGL?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1477
+ export function setBlendMode(additive?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1381
1478
  /** Combines all LittleJS canvases onto the main canvas and clears them
1382
1479
  * This is necessary for things like saving a screenshot
1383
1480
  * @memberof Draw */
@@ -1440,12 +1537,13 @@ declare module "littlejsengine" {
1440
1537
  /**
1441
1538
  * LittleJS WebGL Interface
1442
1539
  * - All webgl used by the engine is wrapped up here
1540
+ * - Will fall back to 2D canvas rendering if webgl is not supported
1443
1541
  * - For normal stuff you won't need to see or call anything in this file
1444
1542
  * - For advanced stuff there are helper functions to create shaders, textures, etc
1445
1543
  * - Can be disabled with glEnable to revert to 2D canvas rendering
1446
1544
  * - Batches sprite rendering on GPU for incredibly fast performance
1447
1545
  * - Sprite transform math is done in the shader where possible
1448
- * - Supports shadertoy style post processing shaders
1546
+ * - Supports shadertoy style post processing shaders via plugin
1449
1547
  * @namespace WebGL
1450
1548
  */
1451
1549
  /** The WebGL canvas which appears above the main canvas and below the overlay canvas
@@ -1462,11 +1560,10 @@ declare module "littlejsengine" {
1462
1560
  * @return {WebGLShader}
1463
1561
  * @memberof WebGL */
1464
1562
  export function glCompileShader(source: string, type: number): WebGLShader;
1465
- /** Draw any sprites still in the buffer and copy to main canvas
1563
+ /** Flush any sprites still in the buffer and copy to main canvas
1466
1564
  * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} context
1467
- * @param {boolean} [forceDraw]
1468
1565
  * @memberof WebGL */
1469
- export function glCopyToContext(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, forceDraw?: boolean): void;
1566
+ export function glCopyToContext(context: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
1470
1567
  /** Create WebGL program with given shaders
1471
1568
  * @param {String} vsSource
1472
1569
  * @param {String} fsSource
@@ -1474,37 +1571,42 @@ declare module "littlejsengine" {
1474
1571
  * @memberof WebGL */
1475
1572
  export function glCreateProgram(vsSource: string, fsSource: string): WebGLProgram;
1476
1573
  /** Create WebGL texture from an image and init the texture settings
1477
- * @param {HTMLImageElement} image
1574
+ * @param {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas} [image]
1478
1575
  * @return {WebGLTexture}
1479
1576
  * @memberof WebGL */
1480
- export function glCreateTexture(image: HTMLImageElement): WebGLTexture;
1577
+ export function glCreateTexture(image?: HTMLImageElement | HTMLCanvasElement | OffscreenCanvas): WebGLTexture;
1578
+ /** Deletes a WebGL texture
1579
+ * @param {WebGLTexture} [texture]
1580
+ * @memberof WebGL */
1581
+ export function glDeleteTexture(texture?: WebGLTexture): void;
1481
1582
  /** Set WebGL texture data from an image
1482
1583
  * @param {WebGLTexture} texture
1483
- * @param {HTMLImageElement} image
1584
+ * @param {HTMLImageElement|HTMLCanvasElement|OffscreenCanvas} image
1484
1585
  * @memberof WebGL */
1485
- export function glSetTextureData(texture: WebGLTexture, image: HTMLImageElement): void;
1586
+ export function glSetTextureData(texture: WebGLTexture, image: HTMLImageElement | HTMLCanvasElement | OffscreenCanvas): void;
1486
1587
  /** Add a sprite to the gl draw list, used by all gl draw functions
1487
1588
  * @param {Number} x
1488
1589
  * @param {Number} y
1489
1590
  * @param {Number} sizeX
1490
1591
  * @param {Number} sizeY
1491
- * @param {Number} angle
1492
- * @param {Number} uv0X
1493
- * @param {Number} uv0Y
1494
- * @param {Number} uv1X
1495
- * @param {Number} uv1Y
1592
+ * @param {Number} [angle]
1593
+ * @param {Number} [uv0X]
1594
+ * @param {Number} [uv0Y]
1595
+ * @param {Number} [uv1X]
1596
+ * @param {Number} [uv1Y]
1496
1597
  * @param {Number} [rgba=-1] - white is -1
1497
1598
  * @param {Number} [rgbaAdditive=0] - black is 0
1498
1599
  * @memberof WebGL */
1499
- export function glDraw(x: number, y: number, sizeX: number, sizeY: number, angle: number, uv0X: number, uv0Y: number, uv1X: number, uv1Y: number, rgba?: number, rgbaAdditive?: number): void;
1600
+ export function glDraw(x: number, y: number, sizeX: number, sizeY: number, angle?: number, uv0X?: number, uv0Y?: number, uv1X?: number, uv1Y?: number, rgba?: number, rgbaAdditive?: number): void;
1500
1601
  /** Draw all sprites and clear out the buffer, called automatically by the system whenever necessary
1501
1602
  * @memberof WebGL */
1502
1603
  export function glFlush(): void;
1503
1604
  /** Set the WebGl texture, called automatically if using multiple textures
1504
1605
  * - This may also flush the gl buffer resulting in more draw calls and worse performance
1505
1606
  * @param {WebGLTexture} texture
1607
+ * @param {boolean} wrap - Should the texture wrap or clamp
1506
1608
  * @memberof WebGL */
1507
- export function glSetTexture(texture: WebGLTexture): void;
1609
+ export function glSetTexture(texture: WebGLTexture, wrap?: boolean): void;
1508
1610
  /** Set anti-aliasing for webgl canvas
1509
1611
  * @param {boolean} [antialias]
1510
1612
  * @memberof WebGL */
@@ -1558,7 +1660,15 @@ declare module "littlejsengine" {
1558
1660
  export function keyDirection(up?: string, down?: string, left?: string, right?: string): Vector2;
1559
1661
  /** Clears all input
1560
1662
  * @memberof Input */
1561
- export function clearInput(): void;
1663
+ export function inputClear(): void;
1664
+ /** Clears an input key state
1665
+ * @param {string|number} key
1666
+ * @param {number} [device]
1667
+ * @param {boolean} [clearDown=true]
1668
+ * @param {boolean} [clearPressed=true]
1669
+ * @param {boolean} [clearReleased=true]
1670
+ * @memberof Input */
1671
+ export function inputClearKey(key: string | number, device?: number, clearDown?: boolean, clearPressed?: boolean, clearReleased?: boolean): void;
1562
1672
  /** Returns true if mouse button is down
1563
1673
  * @function
1564
1674
  * @param {number} button
@@ -1585,6 +1695,14 @@ declare module "littlejsengine" {
1585
1695
  * @type {Vector2}
1586
1696
  * @memberof Input */
1587
1697
  export let mousePosScreen: Vector2;
1698
+ /** Mouse movement delta in world space
1699
+ * @type {Vector2}
1700
+ * @memberof Input */
1701
+ export let mouseDelta: Vector2;
1702
+ /** Mouse movement delta in screen space
1703
+ * @type {Vector2}
1704
+ * @memberof Input */
1705
+ export let mouseDeltaScreen: Vector2;
1588
1706
  /** Mouse wheel delta this frame
1589
1707
  * @type {number}
1590
1708
  * @memberof Input */
@@ -1637,6 +1755,16 @@ declare module "littlejsengine" {
1637
1755
  /** True if a touch device has been detected
1638
1756
  * @memberof Input */
1639
1757
  export const isTouchDevice: boolean;
1758
+ /** Request to lock the pointer, does not work on touch devices
1759
+ * @memberof Input */
1760
+ export function pointerLockRequest(): void;
1761
+ /** Request to unlock the pointer
1762
+ * @memberof Input */
1763
+ export function pointerLockExit(): void;
1764
+ /** Check if pointer is locked (true if locked)
1765
+ * @return {boolean}
1766
+ * @memberof Input */
1767
+ export function pointerLockIsActive(): boolean;
1640
1768
  /**
1641
1769
  * Sound Object - Stores a sound for later use and can be played positionally
1642
1770
  *
@@ -1678,8 +1806,10 @@ declare module "littlejsengine" {
1678
1806
  * @param {number} [volume] - How much to scale volume by
1679
1807
  */
1680
1808
  setVolume(volume?: number): void;
1681
- /** Stop the last instance of this sound that was played */
1682
- stop(): void;
1809
+ /** Stop the last instance of this sound that was played
1810
+ * @param {number} [fadeTime] - How long to fade out (seconds)
1811
+ */
1812
+ stop(fadeTime?: number): void;
1683
1813
  /** Get source of most recent instance of this sound that was played
1684
1814
  * @return {AudioBufferSourceNode}
1685
1815
  */
@@ -1859,45 +1989,45 @@ declare module "littlejsengine" {
1859
1989
  drawSize: any;
1860
1990
  /** @property {TileInfo} - Tile info to render object (undefined is untextured) */
1861
1991
  tileInfo: TileInfo;
1862
- /** @property {number} - Angle to rotate the object */
1992
+ /** @property {number} - Angle to rotate the object */
1863
1993
  angle: number;
1864
- /** @property {Color} - Color to apply when rendered */
1994
+ /** @property {Color} - Color to apply when rendered */
1865
1995
  color: Color;
1866
- /** @property {Color} - Additive color to apply when rendered */
1996
+ /** @property {Color} - Additive color to apply when rendered */
1867
1997
  additiveColor: any;
1868
1998
  /** @property {boolean} - Should it flip along y axis when rendered */
1869
1999
  mirror: boolean;
1870
- /** @property {number} [mass=objectDefaultMass] - How heavy the object is, static if 0 */
2000
+ /** @property {number} [mass=objectDefaultMass] - How heavy the object is, static if 0 */
1871
2001
  mass: number;
1872
- /** @property {number} [damping=objectDefaultDamping] - How much to slow down velocity each frame (0-1) */
2002
+ /** @property {number} [damping=objectDefaultDamping] - How much to slow down velocity each frame (0-1) */
1873
2003
  damping: number;
1874
2004
  /** @property {number} [angleDamping=objectDefaultAngleDamping] - How much to slow down rotation each frame (0-1) */
1875
2005
  angleDamping: number;
1876
- /** @property {number} [elasticity=objectDefaultElasticity] - How bouncy the object is when colliding (0-1) */
1877
- elasticity: number;
1878
- /** @property {number} [friction=objectDefaultFriction] - How much friction to apply when sliding (0-1) */
2006
+ /** @property {number} [restitution=objectDefaultRestitution] - How bouncy the object is when colliding (0-1) */
2007
+ restitution: number;
2008
+ /** @property {number} [friction=objectDefaultFriction] - How much friction to apply when sliding (0-1) */
1879
2009
  friction: number;
1880
- /** @property {number} - How much to scale gravity by for this object */
2010
+ /** @property {number} - How much to scale gravity by for this object */
1881
2011
  gravityScale: number;
1882
- /** @property {number} - Objects are sorted by render order */
2012
+ /** @property {number} - Objects are sorted by render order */
1883
2013
  renderOrder: number;
1884
2014
  /** @property {Vector2} - Velocity of the object */
1885
2015
  velocity: Vector2;
1886
- /** @property {number} - Angular velocity of the object */
2016
+ /** @property {number} - Angular velocity of the object */
1887
2017
  angleVelocity: number;
1888
- /** @property {number} - Track when object was created */
2018
+ /** @property {number} - Track when object was created */
1889
2019
  spawnTime: number;
1890
- /** @property {Array<EngineObject>} - List of children of this object */
2020
+ /** @property {Array<EngineObject>} - List of children of this object */
1891
2021
  children: any[];
1892
- /** @property {boolean} - Limit object speed using linear or circular math */
1893
- clampSpeedLinear: boolean;
2022
+ /** @property {boolean} - Limit object speed along x and y axis */
2023
+ clampSpeed: boolean;
1894
2024
  /** @property {EngineObject} - Object we are standing on, if any */
1895
2025
  groundObject: EngineObject | TileCollisionLayer;
1896
2026
  /** @property {EngineObject} - Parent of object if in local space */
1897
2027
  parent: any;
1898
- /** @property {Vector2} - Local position if child */
2028
+ /** @property {Vector2} - Local position if child */
1899
2029
  localPos: Vector2;
1900
- /** @property {number} - Local angle if child */
2030
+ /** @property {number} - Local angle if child */
1901
2031
  localAngle: number;
1902
2032
  /** @property {boolean} - Object collides with the tile collision */
1903
2033
  collideTiles: boolean;
@@ -1913,7 +2043,7 @@ declare module "littlejsengine" {
1913
2043
  update(): void;
1914
2044
  /** Render the object, draws a tile by default, automatically called each frame, sorted by renderOrder */
1915
2045
  render(): void;
1916
- /** Destroy this object, destroy it's children, detach it's parent, and mark it for removal */
2046
+ /** Destroy this object, destroy its children, detach it's parent, and mark it for removal */
1917
2047
  destroy(): void;
1918
2048
  destroyed: number;
1919
2049
  /** Convert from local space to world space
@@ -1944,6 +2074,9 @@ declare module "littlejsengine" {
1944
2074
  /** Apply acceleration to this object (adjust velocity, not affected by mass)
1945
2075
  * @param {Vector2} acceleration */
1946
2076
  applyAcceleration(acceleration: Vector2): void;
2077
+ /** Apply angular acceleration to this object
2078
+ * @param {number} acceleration */
2079
+ applyAngularAcceleration(acceleration: number): void;
1947
2080
  /** Apply force to this object (adjust velocity, affected by mass)
1948
2081
  * @param {Vector2} force */
1949
2082
  applyForce(force: Vector2): void;
@@ -1987,22 +2120,34 @@ declare module "littlejsengine" {
1987
2120
  * @param {Vector2} pos
1988
2121
  * @return {number}
1989
2122
  * @memberof TileCollision */
1990
- export function getTileCollisionData(pos: Vector2): number;
2123
+ export function tileCollisionGetData(pos: Vector2): number;
1991
2124
  /** Check if a tile layer collides with another object
1992
2125
  * @param {Vector2} pos
1993
2126
  * @param {Vector2} [size=(0,0)]
1994
- * @param {EngineObject} [object]
2127
+ * @param {EngineObject} [object] - An object or undefined for generic test
2128
+ * @param {boolean} [solidOnly] - Only check solid layers if true
1995
2129
  * @return {TileCollisionLayer}
1996
2130
  * @memberof TileCollision */
1997
- export function tileCollisionTest(pos: Vector2, size?: Vector2, object?: EngineObject): TileCollisionLayer;
2131
+ export function tileCollisionTest(pos: Vector2, size?: Vector2, object?: EngineObject, solidOnly?: boolean): TileCollisionLayer;
1998
2132
  /** Return the center of first tile hit, undefined if nothing was hit.
1999
2133
  * This does not return the exact intersection, but the center of the tile hit.
2000
2134
  * @param {Vector2} posStart
2001
2135
  * @param {Vector2} posEnd
2002
- * @param {EngineObject} [object]
2136
+ * @param {EngineObject} [object] - An object or undefined for generic test
2137
+ * @param {boolean} [solidOnly=true] - Only check solid layers if true
2003
2138
  * @return {Vector2}
2004
2139
  * @memberof TileCollision */
2005
- export function tileCollisionRaycast(posStart: Vector2, posEnd: Vector2, object?: EngineObject): Vector2;
2140
+ export function tileCollisionRaycast(posStart: Vector2, posEnd: Vector2, object?: EngineObject, solidOnly?: boolean): Vector2;
2141
+ /**
2142
+ * Load tile layers from exported data
2143
+ * @param {Object} tileMapData - Level data from exported data
2144
+ * @param {TileInfo} [tileInfo] - Default tile info (used for size and texture)
2145
+ * @param {number} [renderOrder] - Render order of the top layer
2146
+ * @param {number} [collisionLayer] - Layer to use for collision if any
2147
+ * @param {boolean} [draw] - Should the layer be drawn automatically
2148
+ * @return {Array<TileCollisionLayer>}
2149
+ * @memberof TileCollision */
2150
+ export function tileCollisionLoad(tileMapData: any, tileInfo?: TileInfo, renderOrder?: number, collisionLayer?: number, draw?: boolean): Array<TileCollisionLayer>;
2006
2151
  /**
2007
2152
  * Tile layer data object stores info about how to draw a tile
2008
2153
  * @example
@@ -2031,33 +2176,85 @@ declare module "littlejsengine" {
2031
2176
  /** Set this tile to clear, it will not be rendered */
2032
2177
  clear(): void;
2033
2178
  }
2179
+ /**
2180
+ * Canvas Layer - cached off screen rendering system
2181
+ * - Contains an offscreen canvas that can be rendered to
2182
+ * - Webgl rendering is optional, call useWebGL to enable
2183
+ * @extends EngineObject
2184
+ * @example
2185
+ * const canvasLayer = new CanvasLayer(vec2(), vec2(200,100));
2186
+ */
2187
+ export class CanvasLayer extends EngineObject {
2188
+ /** Create a canvas layer object
2189
+ * @param {Vector2} [position] - World space position of the layer
2190
+ * @param {Vector2} [size] - World space size of the layer
2191
+ * @param {number} [angle] - Angle the layer is rotated by
2192
+ * @param {number} [renderOrder] - Objects sorted by renderOrder
2193
+ * @param {Vector2} [canvasSize] - Default size of canvas, can be changed later
2194
+ */
2195
+ constructor(position?: Vector2, size?: Vector2, angle?: number, renderOrder?: number, canvasSize?: Vector2);
2196
+ /** @property {HTMLCanvasElement} - The canvas used by this layer */
2197
+ canvas: OffscreenCanvas;
2198
+ /** @property {OffscreenCanvasRenderingContext2D} - The 2D canvas context used by this layer */
2199
+ context: OffscreenCanvasRenderingContext2D;
2200
+ /** @property {WebGLTexture} - Texture if using webgl for this layer, call useWebGL to enable */
2201
+ glTexture: WebGLTexture;
2202
+ /** Draw this canvas layer centered in world space, with color applied if using WebGL
2203
+ * @param {Vector2} pos - Center in world space
2204
+ * @param {Vector2} [size] - Size in world space
2205
+ * @param {Color} [color] - Color to modulate with
2206
+ * @param {number} [angle] - Angle to rotate by
2207
+ * @param {boolean} [mirror] - If true image is flipped along the Y axis
2208
+ * @param {Color} [additiveColor] - Additive color to be applied if any
2209
+ * @param {boolean} [screenSpace] - If true the pos and size are in screen space
2210
+ * @param {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} [context] - Canvas 2D context to draw to
2211
+ * @memberof Draw */
2212
+ draw(pos: Vector2, size?: Vector2, angle?: number, color?: Color, mirror?: boolean, additiveColor?: Color, screenSpace?: boolean, context?: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D): void;
2213
+ /** Draw onto the layer canvas in world space (bypass webgl)
2214
+ * @param {Vector2} pos
2215
+ * @param {Vector2} size
2216
+ * @param {number} angle
2217
+ * @param {boolean} mirror
2218
+ * @param {Function} drawFunction */
2219
+ drawCanvas2D(pos: Vector2, size: Vector2, angle: number, mirror: boolean, drawFunction: Function): void;
2220
+ /** Draw a tile onto the layer canvas in world space
2221
+ * @param {Vector2} pos
2222
+ * @param {Vector2} [size=(1,1)]
2223
+ * @param {TileInfo} [tileInfo]
2224
+ * @param {Color} [color=(1,1,1,1)]
2225
+ * @param {number} [angle=0]
2226
+ * @param {boolean} [mirror=0] */
2227
+ drawTile(pos: Vector2, size?: Vector2, tileInfo?: TileInfo, color?: Color, angle?: number, mirror?: boolean): void;
2228
+ /** Draw a rectangle onto the layer canvas in world space
2229
+ * @param {Vector2} pos
2230
+ * @param {Vector2} [size=(1,1)]
2231
+ * @param {Color} [color=(1,1,1,1)]
2232
+ * @param {number} [angle=0] */
2233
+ drawRect(pos: Vector2, size?: Vector2, color?: Color, angle?: number): void;
2234
+ /** Create or update the webgl texture for this layer
2235
+ * @param {boolean} [enable] - enable webgl rendering and update the texture */
2236
+ useWebGL(enable?: boolean): void;
2237
+ }
2034
2238
  /**
2035
2239
  * Tile Layer - cached rendering system for tile layers
2036
2240
  * - Each Tile layer is rendered to an off screen canvas
2037
2241
  * - To allow dynamic modifications, layers are rendered using canvas 2d
2038
2242
  * - Some devices like mobile phones are limited to 4k texture resolution
2039
2243
  * - For with 16x16 tiles this limits layers to 256x256 on mobile devices
2040
- * @extends EngineObject
2244
+ * @extends CanvasLayer
2041
2245
  * @example
2042
2246
  * const tileLayer = new TileLayer(vec2(), vec2(200,100));
2043
2247
  */
2044
- export class TileLayer extends EngineObject {
2248
+ export class TileLayer extends CanvasLayer {
2045
2249
  /** Create a tile layer object
2046
- * @param {Vector2} [position=(0,0)] - World space position
2047
- * @param {Vector2} [size=(1,1)] - World space size
2048
- * @param {TileInfo} [tileInfo] - Tile info for layer
2049
- * @param {Vector2} [scale=(1,1)] - How much to scale this layer when rendered
2050
- * @param {number} [renderOrder] - Objects are sorted by renderOrder
2250
+ * @param {Vector2} position - World space position
2251
+ * @param {Vector2} size - World space size
2252
+ * @param {TileInfo} [tileInfo] - Default tile info for layer (used for size and texture)
2253
+ * @param {Vector2} [scale=(1,1)] - How much to scale this layer when rendered
2254
+ * @param {number} [renderOrder] - Objects are sorted by renderOrder
2255
+ * @param {boolean} [useWebGL=glEnable] - Use accelerated WebGL rendering
2051
2256
  */
2052
- constructor(position?: Vector2, size?: Vector2, tileInfo?: TileInfo, scale?: Vector2, renderOrder?: number);
2053
- /** @property {HTMLCanvasElement} - The canvas used by this tile layer */
2054
- canvas: HTMLCanvasElement;
2055
- /** @property {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} - The 2D canvas context used by this tile layer */
2056
- context: CanvasRenderingContext2D;
2057
- /** @property {Vector2} - How much to scale this layer when rendered */
2058
- scale: Vector2;
2059
- /** @property {boolean} - If true this layer will render to overlay canvas and appear above all objects */
2060
- isOverlay: boolean;
2257
+ constructor(position: Vector2, size: Vector2, tileInfo?: TileInfo, scale?: Vector2, renderOrder?: number, useWebGL?: boolean);
2061
2258
  data: TileLayerData[];
2062
2259
  /** Draw all the tile data to an offscreen canvas
2063
2260
  * - This may be slow in some browsers but only needs to be done once */
@@ -2075,13 +2272,6 @@ declare module "littlejsengine" {
2075
2272
  * @param {boolean} [clear] - should the old tile be cleared out
2076
2273
  */
2077
2274
  drawTileData(layerPos: Vector2, clear?: boolean): void;
2078
- /** Draw directly to the 2D canvas in world space (bypass webgl)
2079
- * @param {Vector2} pos
2080
- * @param {Vector2} size
2081
- * @param {number} angle
2082
- * @param {boolean} mirror
2083
- * @param {Function} drawFunction */
2084
- drawCanvas2D(pos: Vector2, size: Vector2, angle: number, mirror: boolean, drawFunction: Function): void;
2085
2275
  /** Set data at a given position in the array
2086
2276
  * @param {Vector2} layerPos - Local position in array
2087
2277
  * @param {TileLayerData} data - Data to set
@@ -2091,22 +2281,8 @@ declare module "littlejsengine" {
2091
2281
  * @param {Vector2} layerPos - Local position in array
2092
2282
  * @return {TileLayerData} */
2093
2283
  getData(layerPos: Vector2): TileLayerData;
2094
- /** @type {[HTMLCanvasElement, CanvasRenderingContext2D, Vector2, Vector2, number]} */
2095
- savedRenderSettings: [HTMLCanvasElement, CanvasRenderingContext2D, Vector2, Vector2, number];
2096
- /** Draw a tile directly onto the layer canvas in world space
2097
- * @param {Vector2} pos
2098
- * @param {Vector2} [size=(1,1)]
2099
- * @param {TileInfo} [tileInfo]
2100
- * @param {Color} [color=(1,1,1,1)]
2101
- * @param {number} [angle=0]
2102
- * @param {boolean} [mirror=0] */
2103
- drawTile(pos: Vector2, size?: Vector2, tileInfo?: TileInfo, color?: Color, angle?: number, mirror?: boolean): void;
2104
- /** Draw a rectangle directly onto the layer canvas in world space
2105
- * @param {Vector2} pos
2106
- * @param {Vector2} [size=(1,1)]
2107
- * @param {Color} [color=(1,1,1,1)]
2108
- * @param {number} [angle=0] */
2109
- drawRect(pos: Vector2, size?: Vector2, color?: Color, angle?: number): void;
2284
+ /** @type {[HTMLCanvasElement|OffscreenCanvas, CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D, Vector2, Vector2, number]} */
2285
+ savedRenderSettings: [HTMLCanvasElement | OffscreenCanvas, CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D, Vector2, Vector2, number];
2110
2286
  }
2111
2287
  /**
2112
2288
  * Tile Collision Layer - a tile layer with collision
@@ -2117,25 +2293,26 @@ declare module "littlejsengine" {
2117
2293
  */
2118
2294
  export class TileCollisionLayer extends TileLayer {
2119
2295
  /** Create a tile layer object
2120
- * @param {Vector2} [position=(0,0)] - World space position
2121
- * @param {Vector2} [size=(0,0)] - World space size
2122
- * @param {TileInfo} [tileInfo] - Tile info for layer
2123
- * @param {number} [renderOrder] - Objects are sorted by renderOrder
2296
+ * @param {Vector2} position - World space position
2297
+ * @param {Vector2} size - World space size
2298
+ * @param {TileInfo} [tileInfo] - Tile info for layer
2299
+ * @param {number} [renderOrder] - Objects are sorted by renderOrder
2300
+ * @param {boolean} [useWebGL=glEnable] - Use accelerated WebGL rendering
2124
2301
  */
2125
- constructor(position?: Vector2, size?: Vector2, tileInfo?: TileInfo, renderOrder?: number);
2302
+ constructor(position: Vector2, size: Vector2, tileInfo?: TileInfo, renderOrder?: number, useWebGL?: boolean);
2126
2303
  /** @property {Array<number>} - The tile collision grid */
2127
2304
  collisionData: any[];
2128
2305
  /** Clear and initialize tile collision to new size
2129
2306
  * @param {Vector2} size - width and height of tile collision 2d grid */
2130
2307
  initCollision(size: Vector2): void;
2131
2308
  /** Set tile collision data for a given cell in the grid
2132
- * @param {Vector2} pos
2309
+ * @param {Vector2} gridPos
2133
2310
  * @param {number} [data] */
2134
- setCollisionData(pos: Vector2, data?: number): void;
2311
+ setCollisionData(gridPos: Vector2, data?: number): void;
2135
2312
  /** Get tile collision data for a given cell in the grid
2136
- * @param {Vector2} pos
2313
+ * @param {Vector2} gridPos
2137
2314
  * @return {number} */
2138
- getCollisionData(pos: Vector2): number;
2315
+ getCollisionData(gridPos: Vector2): number;
2139
2316
  /** Check if collision with another object should occur
2140
2317
  * @param {Vector2} pos
2141
2318
  * @param {Vector2} [size=(0,0)]
@@ -2163,7 +2340,7 @@ declare module "littlejsengine" {
2163
2340
  * (
2164
2341
  * pos, 0, 1, 0, 500, PI, // pos, angle, emitSize, emitTime, emitRate, emitCone
2165
2342
  * tile(0, 16), // tileInfo
2166
- * rgb(1,1,1), rgb(0,0,0), // colorStartA, colorStartB
2343
+ * rgb(1,1,1,1), rgb(0,0,0,1), // colorStartA, colorStartB
2167
2344
  * rgb(1,1,1,0), rgb(0,0,0,0), // colorEndA, colorEndB
2168
2345
  * 2, .2, .2, .1, .05, // particleTime, sizeStart, sizeEnd, particleSpeed, particleAngleSpeed
2169
2346
  * .99, 1, 1, PI, .05, // damping, angleDamping, gravityScale, particleCone, fadeRate,
@@ -2535,10 +2712,20 @@ declare module "littlejsengine" {
2535
2712
  defaultButtonColor: Color;
2536
2713
  /** @property {Color} - Default hover color for UI elements */
2537
2714
  defaultHoverColor: Color;
2715
+ /** @property {Color} - Default color for disabled UI elements */
2716
+ defaultDisabledColor: Color;
2538
2717
  /** @property {number} - Default line width for UI elements */
2539
2718
  defaultLineWidth: number;
2719
+ /** @property {number} - Default rounded rect corner radius for UI elements */
2720
+ defaultCornerRadius: number;
2540
2721
  /** @property {string} - Default font for UI elements */
2541
2722
  defaultFont: string;
2723
+ /** @property {Sound} - Default sound when interactive UI element is pressed */
2724
+ defaultSoundPress: any;
2725
+ /** @property {Sound} - Default sound when interactive UI element is released */
2726
+ defaultSoundRelease: any;
2727
+ /** @property {Sound} - Default sound when interactive UI element is clicked */
2728
+ defaultSoundClick: any;
2542
2729
  /** @property {Array<UIObject>} - List of all UI elements */
2543
2730
  uiObjects: any[];
2544
2731
  /** @property {CanvasRenderingContext2D|OffscreenCanvasRenderingContext2D} - Context to render UI elements to */
@@ -2548,8 +2735,9 @@ declare module "littlejsengine" {
2548
2735
  * @param {Vector2} size
2549
2736
  * @param {Color} [color=uiSystem.defaultColor]
2550
2737
  * @param {number} [lineWidth=uiSystem.defaultLineWidth]
2551
- * @param {Color} [lineColor=uiSystem.defaultLineColor] */
2552
- drawRect(pos: Vector2, size: Vector2, color?: Color, lineWidth?: number, lineColor?: Color): void;
2738
+ * @param {Color} [lineColor=uiSystem.defaultLineColor]
2739
+ * @param {number} [lineWidth=uiSystem.defaultCornerRadius] */
2740
+ drawRect(pos: Vector2, size: Vector2, color?: Color, lineWidth?: number, lineColor?: Color, cornerRadius?: number): void;
2553
2741
  /** Draw a line to the UI context
2554
2742
  * @param {Vector2} posA
2555
2743
  * @param {Vector2} posB
@@ -2590,26 +2778,40 @@ declare module "littlejsengine" {
2590
2778
  pos: Vector2;
2591
2779
  /** @property {Vector2} - Screen space size of the object */
2592
2780
  size: Vector2;
2593
- /** @property {Color} */
2781
+ /** @property {Color} - color of the object */
2594
2782
  color: Color;
2595
- /** @property {Color} */
2596
- lineColor: Color;
2597
- /** @property {Color} */
2783
+ /** @property {Color} - color for text */
2598
2784
  textColor: Color;
2599
- /** @property {Color} */
2785
+ /** @property {Color} - color used when hovering over the object */
2600
2786
  hoverColor: Color;
2601
- /** @property {number} */
2787
+ /** @property {Color} - color for line drawing */
2788
+ lineColor: Color;
2789
+ /** @property {number} - width for line drawing */
2602
2790
  lineWidth: number;
2603
- /** @property {string} */
2791
+ /** @property {string} - font for this objecct */
2604
2792
  font: string;
2605
2793
  /** @property {number} - override for text height */
2606
2794
  textHeight: any;
2607
- /** @property {boolean} */
2795
+ /** @property {boolean} - should this object be drawn */
2608
2796
  visible: boolean;
2609
- /** @property {Array<UIObject>} */
2797
+ /** @property {Array<UIObject>} - a list of this object's children */
2610
2798
  children: any[];
2611
- /** @property {UIObject} */
2799
+ /** @property {UIObject} - this object's parent, position is in parent space */
2612
2800
  parent: any;
2801
+ /** @property {number} - Extra size added when checking if element is touched */
2802
+ extraTouchSize: number;
2803
+ /** @property {Sound} - Sound when interactive element is pressed */
2804
+ soundPress: any;
2805
+ /** @property {Sound} - Sound when interactive element is released */
2806
+ soundRelease: any;
2807
+ /** @property {Sound} - Sound when interactive element is clicked */
2808
+ soundClick: any;
2809
+ /** @property {boolean} - Is the mouse over this element */
2810
+ mouseIsOver: boolean;
2811
+ /** @property {boolean} - Is this element interactive */
2812
+ interactive: boolean;
2813
+ /** @property {boolean} - Is the mouse held on this element (was pressed while over and hasn't been released) */
2814
+ mouseIsHeld: boolean;
2613
2815
  /** Add a child UIObject to this object
2614
2816
  * @param {UIObject} child
2615
2817
  */
@@ -2620,10 +2822,10 @@ declare module "littlejsengine" {
2620
2822
  removeChild(child: UIObject): void;
2621
2823
  /** Update the object, called automatically by plugin once each frame */
2622
2824
  update(): void;
2623
- mouseIsOver: boolean;
2624
- mouseIsHeld: boolean;
2625
2825
  /** Render the object, called automatically by plugin once each frame */
2626
2826
  render(): void;
2827
+ /** Special update for when object is invisible */
2828
+ updateInvisible(): void;
2627
2829
  /** Called when the mouse enters the object */
2628
2830
  onEnter(): void;
2629
2831
  /** Called when the mouse leaves the object */
@@ -2632,6 +2834,8 @@ declare module "littlejsengine" {
2632
2834
  onPress(): void;
2633
2835
  /** Called when the mouse is released while over the object */
2634
2836
  onRelease(): void;
2837
+ /** Called when user clicks on this object */
2838
+ onClick(): void;
2635
2839
  /** Called when the state of this object changes */
2636
2840
  onChange(): void;
2637
2841
  }
@@ -2688,6 +2892,10 @@ declare module "littlejsengine" {
2688
2892
  constructor(pos?: Vector2, size?: Vector2, text?: string, color?: Color);
2689
2893
  /** @property {string} */
2690
2894
  text: string;
2895
+ /** @property {Color} */
2896
+ disabledColor: Color;
2897
+ /** @property {boolean} */
2898
+ disabled: boolean;
2691
2899
  }
2692
2900
  /**
2693
2901
  * UICheckbox - A UI object that acts as a checkbox
@@ -2721,6 +2929,7 @@ declare module "littlejsengine" {
2721
2929
  value: number;
2722
2930
  /** @property {string} */
2723
2931
  text: string;
2932
+ /** @property {Color} */
2724
2933
  handleColor: Color;
2725
2934
  }
2726
2935
  /**
@@ -2811,42 +3020,10 @@ declare module "littlejsengine" {
2811
3020
  * @param {Vector2} pos
2812
3021
  * @param {number} angle
2813
3022
  * @param {Color} [color]
2814
- * @param {Color} [outlineColor]
3023
+ * @param {Color} [lineColor]
2815
3024
  * @param {number} [lineWidth]
2816
3025
  * @param {CanvasRenderingContext2D} [context] */
2817
- drawFixture(fixture: any, pos: Vector2, angle: number, color?: Color, outlineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2818
- /** draws a circle
2819
- * @param {Vector2} pos
2820
- * @param {number} radius
2821
- * @param {Color} [color]
2822
- * @param {Color} [outlineColor]
2823
- * @param {number} [lineWidth]
2824
- * @param {CanvasRenderingContext2D} [context] */
2825
- drawCircle(pos: Vector2, radius: number, color?: Color, outlineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2826
- /** draws a polygon
2827
- * @param {Vector2} pos
2828
- * @param {number} angle
2829
- * @param {Array<Vector2>} points
2830
- * @param {Color} [color]
2831
- * @param {Color} [outlineColor]
2832
- * @param {number} [lineWidth]
2833
- * @param {CanvasRenderingContext2D} [context] */
2834
- drawPoly(pos: Vector2, angle: number, points: Array<Vector2>, color?: Color, outlineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2835
- /** draws a line
2836
- * @param {Vector2} pos
2837
- * @param {number} angle
2838
- * @param {Vector2} posA
2839
- * @param {Vector2} posB
2840
- * @param {Color} [color]
2841
- * @param {number} [lineWidth]
2842
- * @param {CanvasRenderingContext2D} [context] */
2843
- drawLine(pos: Vector2, angle: number, posA: Vector2, posB: Vector2, color?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2844
- /** performs a fill or stroke as a helper to the other draw functions
2845
- * @param {Color} [color]
2846
- * @param {Color} [outlineColor]
2847
- * @param {number} [lineWidth]
2848
- * @param {CanvasRenderingContext2D} [context] */
2849
- drawFillStroke(color?: Color, outlineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
3026
+ drawFixture(fixture: any, pos: Vector2, angle: number, color?: Color, lineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2850
3027
  /** converts a box2d vec2 to a Vector2
2851
3028
  * @param {Object} v */
2852
3029
  vec2From(v: any): Vector2;
@@ -2881,13 +3058,13 @@ declare module "littlejsengine" {
2881
3058
  * @param {number} [renderOrder] */
2882
3059
  constructor(pos?: Vector2, size?: Vector2, tileInfo?: TileInfo, angle?: number, color?: Color, bodyType?: number, renderOrder?: number);
2883
3060
  body: any;
2884
- outlineColor: Color;
3061
+ lineColor: Color;
2885
3062
  /** Draws all this object's fixtures
2886
3063
  * @param {Color} [color]
2887
- * @param {Color} [outlineColor]
3064
+ * @param {Color} [lineColor]
2888
3065
  * @param {number} [lineWidth]
2889
3066
  * @param {CanvasRenderingContext2D} [context] */
2890
- drawFixtures(color?: Color, outlineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
3067
+ drawFixtures(color?: Color, lineColor?: Color, lineWidth?: number, context?: CanvasRenderingContext2D): void;
2891
3068
  /** Called when a contact begins
2892
3069
  * @param {Box2dObject} otherObject */
2893
3070
  beginContact(otherObject: Box2dObject): void;
@@ -3058,9 +3235,6 @@ declare module "littlejsengine" {
3058
3235
  /** Apply torque to this object
3059
3236
  * @param {number} torque */
3060
3237
  applyTorque(torque: number): void;
3061
- /** Apply angular acceleration to this object
3062
- * @param {number} acceleration */
3063
- applyAngularAcceleration(acceleration: number): void;
3064
3238
  /** Check if this object has any fixtures
3065
3239
  * @return {boolean} */
3066
3240
  hasFixtures(): boolean;
@@ -3633,4 +3807,60 @@ declare module "littlejsengine" {
3633
3807
  * @return {number} */
3634
3808
  getCorrectionFactor(): number;
3635
3809
  }
3810
+ /** Draw a scalable nine-slice UI element in world space
3811
+ * This function can apply color and additive color if webgl is enabled
3812
+ * @param {Vector2} pos - World space position
3813
+ * @param {Vector2} size - World space size
3814
+ * @param {TileInfo} startTile - Starting tile for the nine-slice pattern
3815
+ * @param {Color} [color] - Color to modulate with
3816
+ * @param {number} [borderSize] - Width of the border sections
3817
+ * @param {Color} [additiveColor] - Additive color
3818
+ * @param {number} [extraSpace] - Extra spacing adjustment
3819
+ * @param {number} [angle] - Angle to rotate by
3820
+ * @param {boolean} [useWebGL=glEnable] - Use WebGL for rendering
3821
+ * @param {boolean} [screenSpace] - Use screen space coordinates
3822
+ * @param {CanvasRenderingContext2D} [context] - Canvas context to use
3823
+ * @memberof DrawUtilities */
3824
+ export function drawNineSlice(pos: Vector2, size: Vector2, startTile: TileInfo, color?: Color, borderSize?: number, additiveColor?: Color, extraSpace?: number, angle?: number, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D): void;
3825
+ /**
3826
+ * LittleJS Drawing Utilities Plugin
3827
+ * - Extra drawing functions for LittleJS
3828
+ * - Nine slice and three slice drawing
3829
+ * @namespace DrawUtilities
3830
+ */
3831
+ /** Draw a scalable nine-slice UI element to the overlay canvas in screen space
3832
+ * This function can not apply color because it draws using the overlay 2d context
3833
+ * @param {Vector2} pos - Screen space position
3834
+ * @param {Vector2} size - Screen space size
3835
+ * @param {TileInfo} startTile - Starting tile for the nine-slice pattern
3836
+ * @param {number} [borderSize] - Width of the border sections
3837
+ * @param {number} [extraSpace] - Extra spacing adjustment
3838
+ * @param {number} [angle] - Angle to rotate by
3839
+ * @memberof DrawUtilities */
3840
+ export function drawNineSliceScreen(pos: Vector2, size: Vector2, startTile: TileInfo, borderSize?: number, extraSpace?: number, angle?: number): void;
3841
+ /** Draw a scalable three-slice UI element in world space
3842
+ * This function can apply color and additive color if webgl is enabled
3843
+ * @param {Vector2} pos - World space position
3844
+ * @param {Vector2} size - World space size
3845
+ * @param {TileInfo} startTile - Starting tile for the three-slice pattern
3846
+ * @param {Color} [color] - Color to modulate with
3847
+ * @param {number} [borderSize] - Width of the border sections
3848
+ * @param {Color} [additiveColor] - Additive color
3849
+ * @param {number} [extraSpace] - Extra spacing adjustment
3850
+ * @param {number} [angle] - Angle to rotate by
3851
+ * @param {boolean} [useWebGL=glEnable] - Use WebGL for rendering
3852
+ * @param {boolean} [screenSpace] - Use screen space coordinates
3853
+ * @param {CanvasRenderingContext2D} [context] - Canvas context to use
3854
+ * @memberof DrawUtilities */
3855
+ export function drawThreeSlice(pos: Vector2, size: Vector2, startTile: TileInfo, color?: Color, borderSize?: number, additiveColor?: Color, extraSpace?: number, angle?: number, useWebGL?: boolean, screenSpace?: boolean, context?: CanvasRenderingContext2D): void;
3856
+ /** Draw a scalable three-slice UI element to the overlay canvas in screen space
3857
+ * This function can not apply color because it draws using the overlay 2d context
3858
+ * @param {Vector2} pos - Screen space position
3859
+ * @param {Vector2} size - Screen space size
3860
+ * @param {TileInfo} startTile - Starting tile for the three-slice pattern
3861
+ * @param {number} [borderSize] - Width of the border sections
3862
+ * @param {number} [extraSpace] - Extra spacing adjustment
3863
+ * @param {number} [angle] - Angle to rotate by
3864
+ * @memberof DrawUtilities */
3865
+ export function drawThreeSliceScreen(pos: Vector2, size: Vector2, startTile: TileInfo, borderSize?: number, extraSpace?: number, angle?: number): void;
3636
3866
  }