littlejsengine 1.4.6 → 1.4.8

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.
@@ -27,7 +27,7 @@ let glContext;
27
27
  let glTileTexture;
28
28
 
29
29
  // WebGL internal variables not exposed to documentation
30
- let glActiveTexture, glShader, glArrayBuffer, glVertexData, glPositionData, glColorData, glBatchCount, glBatchAdditive, glAdditive;
30
+ let glActiveTexture, glShader, glArrayBuffer, glPositionData, glColorData, glBatchCount, glBatchAdditive, glAdditive;
31
31
 
32
32
  ///////////////////////////////////////////////////////////////////////////////
33
33
 
@@ -37,7 +37,6 @@ function glInit()
37
37
  // create the canvas and tile texture
38
38
  glCanvas = document.createElement('canvas');
39
39
  glContext = glCanvas.getContext('webgl', {antialias: false});
40
- glCanvas.style = styleCanvas;
41
40
  glTileTexture = glCreateTexture(tileImage);
42
41
 
43
42
  // some browsers are much faster without copying the gl buffer so we just overlay it instead
@@ -49,27 +48,25 @@ function glInit()
49
48
  'uniform mat4 m;'+ // transform matrix
50
49
  'attribute vec2 p,t;'+ // position, uv
51
50
  'attribute vec4 c,a;'+ // color, additiveColor
52
- 'varying vec2 v;'+ // return uv
53
- 'varying vec4 d,e;'+ // return color, additiveColor
51
+ 'varying vec4 v,d,e;'+ // return uv, color, additiveColor
54
52
  'void main(){'+ // shader entry point
55
53
  'gl_Position=m*vec4(p,1,1);'+ // transform position
56
- 'v=t;d=c;e=a;'+ // pass stuff to fragment shader
54
+ 'v=vec4(t,p);d=c;e=a;'+ // pass stuff to fragment shader
57
55
  '}' // end of shader
58
56
  ,
59
- 'precision highp float;'+ // use highp for better accuracy
60
- 'varying vec2 v;'+ // uv
61
- 'varying vec4 d,e;'+ // color, additiveColor
62
- 'uniform sampler2D s;'+ // texture
63
- 'void main(){'+ // shader entry point
64
- 'gl_FragColor=texture2D(s,v)*d+e;'+ // modulate texture by color plus additive
65
- '}' // end of shader
57
+ 'precision highp float;'+ // use highp for better accuracy
58
+ 'varying vec4 v,d,e;'+ // uv, color, additiveColor
59
+ 'uniform sampler2D s;'+ // texture
60
+ 'void main(){'+ // shader entry point
61
+ 'gl_FragColor=texture2D(s,v.xy)*d+e;'+ // modulate texture by color plus additive
62
+ '}' // end of shader
66
63
  );
67
64
 
68
65
  // init buffers
69
- glVertexData = new ArrayBuffer(gl_MAX_BATCH * gl_VERTICES_PER_QUAD * gl_VERTEX_BYTE_STRIDE);
66
+ const vertexData = new ArrayBuffer(gl_VERTEX_BUFFER_SIZE);
70
67
  glArrayBuffer = glContext.createBuffer();
71
- glPositionData = new Float32Array(glVertexData);
72
- glColorData = new Uint32Array(glVertexData);
68
+ glPositionData = new Float32Array(vertexData);
69
+ glColorData = new Uint32Array(vertexData);
73
70
  glBatchCount = 0;
74
71
  }
75
72
 
@@ -144,18 +141,19 @@ function glCreateTexture(image)
144
141
  image && image.width && glContext.texImage2D(gl_TEXTURE_2D, 0, gl_RGBA, gl_RGBA, gl_UNSIGNED_BYTE, image);
145
142
 
146
143
  // use point filtering for pixelated rendering
147
- glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_MIN_FILTER, cavasPixelated ? gl_NEAREST : gl_LINEAR);
148
- glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_MAG_FILTER, cavasPixelated ? gl_NEAREST : gl_LINEAR);
144
+ const filter = cavasPixelated ? gl_NEAREST : gl_LINEAR;
145
+ glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_MIN_FILTER, filter);
146
+ glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_MAG_FILTER, filter);
149
147
  glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_WRAP_S, gl_CLAMP_TO_EDGE);
150
148
  glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_WRAP_T, gl_CLAMP_TO_EDGE);
151
149
  return texture;
152
150
  }
153
151
 
154
152
  // called automatically by engine before render
155
- function glPreRender(width, height, cameraX, cameraY, cameraScale)
153
+ function glPreRender()
156
154
  {
157
155
  // clear and set to same size as main canvas
158
- glContext.viewport(0, 0, glCanvas.width = width, glCanvas.height = height);
156
+ glContext.viewport(0, 0, glCanvas.width = mainCanvas.width, glCanvas.height = mainCanvas.height);
159
157
  glContext.clear(gl_COLOR_BUFFER_BIT);
160
158
 
161
159
  // set up the shader
@@ -163,7 +161,7 @@ function glPreRender(width, height, cameraX, cameraY, cameraScale)
163
161
  glContext.activeTexture(gl_TEXTURE0);
164
162
  glContext.bindTexture(gl_TEXTURE_2D, glActiveTexture = glTileTexture);
165
163
  glContext.bindBuffer(gl_ARRAY_BUFFER, glArrayBuffer);
166
- glContext.bufferData(gl_ARRAY_BUFFER, glVertexData.byteLength, gl_DYNAMIC_DRAW);
164
+ glContext.bufferData(gl_ARRAY_BUFFER, gl_VERTEX_BUFFER_SIZE, gl_DYNAMIC_DRAW);
167
165
  glSetBlendMode();
168
166
 
169
167
  // set vertex attributes
@@ -181,14 +179,14 @@ function glPreRender(width, height, cameraX, cameraY, cameraScale)
181
179
  initVertexAttribArray('a', gl_UNSIGNED_BYTE, 1, 4, 1); // additiveColor
182
180
 
183
181
  // build the transform matrix
184
- const sx = 2 * cameraScale / width;
185
- const sy = 2 * cameraScale / height;
182
+ const sx = 2 * cameraScale / mainCanvas.width;
183
+ const sy = 2 * cameraScale / mainCanvas.height;
186
184
  glContext.uniformMatrix4fv(glContext.getUniformLocation(glShader, 'm'), 0,
187
185
  new Float32Array([
188
186
  sx, 0, 0, 0,
189
187
  0, sy, 0, 0,
190
188
  1, 1, -1, 1,
191
- -1-sx*cameraX, -1-sy*cameraY, 0, 0
189
+ -1-sx*cameraPos.x, -1-sy*cameraPos.y, 0, 0
192
190
  ])
193
191
  );
194
192
  }
@@ -236,10 +234,10 @@ function glCopyToContext(context, forceDraw)
236
234
  * @param uv0Y
237
235
  * @param uv1X
238
236
  * @param uv1Y
239
- * @param [rgba=0xffffffff]
237
+ * @param rgba
240
238
  * @param [rgbaAdditive=0]
241
239
  * @memberof WebGL */
242
- function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba=0xffffffff, rgbaAdditive=0)
240
+ function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba, rgbaAdditive=0)
243
241
  {
244
242
  // flush if there is no room for more verts or if different blend mode
245
243
  if (glBatchCount == gl_MAX_BATCH || glBatchAdditive != glAdditive)
@@ -250,43 +248,16 @@ function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba=0xffffff
250
248
  const cx = c*sizeX, cy = c*sizeY, sx = s*sizeX, sy = s*sizeY;
251
249
 
252
250
  // setup 2 triangles to form a quad
253
- let offset = glBatchCount++ * gl_VERTICES_PER_QUAD * gl_INDICIES_PER_VERT;
254
-
255
- // vertex 0
256
- glPositionData[offset++] = x - cx - sy;
257
- glPositionData[offset++] = y - cy + sx;
258
- glPositionData[offset++] = uv0X; glPositionData[offset++] = uv1Y;
259
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
260
-
261
- // vertex 1
262
- glPositionData[offset++] = x + cx + sy;
263
- glPositionData[offset++] = y + cy - sx;
264
- glPositionData[offset++] = uv1X; glPositionData[offset++] = uv0Y;
265
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
266
-
267
- // vertex 2
268
- glPositionData[offset++] = x - cx + sy;
269
- glPositionData[offset++] = y + cy + sx;
270
- glPositionData[offset++] = uv0X; glPositionData[offset++] = uv0Y;
271
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
272
-
273
- // vertex 0
274
- glPositionData[offset++] = x - cx - sy;
275
- glPositionData[offset++] = y - cy + sx;
276
- glPositionData[offset++] = uv0X; glPositionData[offset++] = uv1Y;
277
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
278
-
279
- // vertex 3
280
- glPositionData[offset++] = x + cx - sy;
281
- glPositionData[offset++] = y - cy - sx;
282
- glPositionData[offset++] = uv1X; glPositionData[offset++] = uv1Y;
283
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
284
-
285
- // vertex 1
286
- glPositionData[offset++] = x + cx + sy;
287
- glPositionData[offset++] = y + cy - sx;
288
- glPositionData[offset++] = uv1X; glPositionData[offset++] = uv0Y;
289
- glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
251
+ for(let i=6, offset = glBatchCount++ * gl_VERTICES_PER_QUAD * gl_INDICIES_PER_VERT; i--;)
252
+ {
253
+ const a = i-4&&i>1, b = i-5&&i-2&&i-1;
254
+ glPositionData[offset++] = x + (a?-cx:cx) + (b?sy:-sy);
255
+ glPositionData[offset++] = y + (b?cy:-cy) + (a?sx:-sx);
256
+ glPositionData[offset++] = a ? uv0X : uv1X;
257
+ glPositionData[offset++] = b ? uv0Y : uv1Y;
258
+ glColorData[offset++] = rgba;
259
+ glColorData[offset++] = rgbaAdditive;
260
+ }
290
261
  }
291
262
 
292
263
  ///////////////////////////////////////////////////////////////////////////////
@@ -338,14 +309,13 @@ function glRenderPostProcess()
338
309
  return;
339
310
 
340
311
  // prepare to render post process shader
341
- const width = mainCanvas.width, height = mainCanvas.height;
342
312
  if (glEnable)
343
313
  {
344
314
  glFlush(); // clear out the buffer
345
315
  mainContext.drawImage(glCanvas, 0, 0); // copy to the main canvas
346
316
  }
347
- else
348
- glContext.viewport(0, 0, glCanvas.width = width, glCanvas.height = height); // set viewport
317
+ else // set viewport
318
+ glContext.viewport(0, 0, glCanvas.width = mainCanvas.width, glCanvas.height = mainCanvas.height);
349
319
 
350
320
  // setup shader program to draw one triangle
351
321
  glContext.useProgram(glPostShader);
@@ -369,7 +339,7 @@ function glRenderPostProcess()
369
339
  const uniformLocation = (name)=>glContext.getUniformLocation(glPostShader, name);
370
340
  glContext.uniform1i(uniformLocation('iChannel0'), 0);
371
341
  glContext.uniform1f(uniformLocation('iTime'), time);
372
- glContext.uniform3f(uniformLocation('iResolution'), width, height, 1);
342
+ glContext.uniform3f(uniformLocation('iResolution'), mainCanvas.width, mainCanvas.height, 1);
373
343
  glContext.drawArrays(gl_TRIANGLES, 0, 3);
374
344
  }
375
345
 
@@ -409,4 +379,5 @@ gl_UNPACK_FLIP_Y_WEBGL = 37440,
409
379
  gl_VERTICES_PER_QUAD = 6,
410
380
  gl_INDICIES_PER_VERT = 6,
411
381
  gl_MAX_BATCH = 1<<16,
412
- gl_VERTEX_BYTE_STRIDE = (4 * 2) * 2 + (4) * 2; // vec2 * 2 + (char * 4) * 2
382
+ gl_VERTEX_BYTE_STRIDE = (4 * 2) * 2 + (4) * 2, // vec2 * 2 + (char * 4) * 2
383
+ gl_VERTEX_BUFFER_SIZE = gl_MAX_BATCH * gl_VERTICES_PER_QUAD * gl_VERTEX_BYTE_STRIDE;
package/engine/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /** Draw textured tile centered in world space, with color applied if using WebGL
2
2
  * @param {Vector2} pos - Center of the tile in world space
3
- * @param {Vector2} [size=new Vector2(1,1)] - Size of the tile in world space, width and height
3
+ * @param {Vector2} [size=new Vector2(1,1)] - Size of the tile in world space
4
4
  * @param {Number} [tileIndex=-1] - Tile index to use, negative is untextured
5
5
  * @param {Vector2} [tileSize=tileSizeDefault] - Tile size in source pixels
6
6
  * @param {Color} [color=new Color(1,1,1)] - Color to modulate with
@@ -183,7 +183,7 @@ declare function glCreateProgram(vsSource: WebGLShader, fsSource: WebGLShader):
183
183
  * @return {WebGLTexture}
184
184
  * @memberof WebGL */
185
185
  declare function glCreateTexture(image: new (width?: number, height?: number) => HTMLImageElement): WebGLTexture;
186
- declare function glPreRender(width: any, height: any, cameraX: any, cameraY: any, cameraScale: any): void;
186
+ declare function glPreRender(): void;
187
187
  /** Draw all sprites and clear out the buffer, called automatically by the system whenever necessary
188
188
  * @memberof WebGL */
189
189
  declare function glFlush(): void;
@@ -202,15 +202,19 @@ declare function glCopyToContext(context: CanvasRenderingContext2D, forceDraw?:
202
202
  * @param uv0Y
203
203
  * @param uv1X
204
204
  * @param uv1Y
205
- * @param [rgba=0xffffffff]
205
+ * @param rgba
206
206
  * @param [rgbaAdditive=0]
207
207
  * @memberof WebGL */
208
- declare function glDraw(x: any, y: any, sizeX: any, sizeY: any, angle: any, uv0X: any, uv0Y: any, uv1X: any, uv1Y: any, rgba?: number, rgbaAdditive?: number): void;
208
+ declare function glDraw(x: any, y: any, sizeX: any, sizeY: any, angle: any, uv0X: any, uv0Y: any, uv1X: any, uv1Y: any, rgba: any, rgbaAdditive?: number): void;
209
209
  /** Set up a post processing shader
210
210
  * @param {String} shaderCode
211
211
  * @memberof WebGL */
212
212
  declare function glInitPostProcess(shaderCode: string): void;
213
213
  declare function glRenderPostProcess(): void;
214
+ /** Set if game is paused
215
+ * @param {Boolean} paused
216
+ */
217
+ declare function setPaused(_paused: any): void;
214
218
  /** Start up LittleJS engine with your callback functions
215
219
  * @param {Function} gameInit - Called once after the engine starts up, setup the game
216
220
  * @param {Function} gameUpdate - Called every frame at 60 frames per second, handle input and update the game state
@@ -221,7 +225,7 @@ declare function glRenderPostProcess(): void;
221
225
  */
222
226
  declare function engineInit(gameInit: Function, gameUpdate: Function, gameUpdatePost: Function, gameRender: Function, gameRenderPost: Function, tileImageSource?: string): void;
223
227
  declare function enginePreRender(): void;
224
- /** Calls update on each engine object (recursively if child), removes destroyed objects, and updated time */
228
+ /** Update each engine object, remove destroyed objects, and update time */
225
229
  declare function engineObjectsUpdate(): void;
226
230
  /** Destroy and remove all objects */
227
231
  declare function engineObjectsDestroy(): void;
@@ -441,9 +445,13 @@ declare function randVector(length?: number): Vector2;
441
445
  * @return {Color}
442
446
  * @memberof Random */
443
447
  declare function randColor(cA?: Color, cB?: Color, linear?: boolean): Color;
444
- /** The seed used by the randSeeded function, should not be 0
448
+ /** Seed used by the randSeeded function
445
449
  * @memberof Random */
446
450
  declare let randSeed: number;
451
+ /** Set seed used by the randSeeded function, should not be 0
452
+ * @param {Number} seed
453
+ * @memberof Random */
454
+ declare function setRandSeed(seed: number): number;
447
455
  /** Returns a seeded random value between the two values passed in using randSeed
448
456
  * @param {Number} [valueA=1]
449
457
  * @param {Number} [valueB=0]
@@ -463,6 +471,13 @@ declare function randSeeded(a?: number, b?: number): number;
463
471
  * @memberof Utilities
464
472
  */
465
473
  declare function vec2(x?: number, y?: number): Vector2;
474
+ /**
475
+ * Check if object is a valid Vector2
476
+ * @param {Vector2} vector
477
+ * @return {Boolean}
478
+ * @memberof Utilities
479
+ */
480
+ declare function isVector2(v: any): boolean;
466
481
  /**
467
482
  * 2D Vector object with vector math library
468
483
  * <br> - Functions do not change this so they can be chained together
@@ -714,6 +729,15 @@ declare class Timer {
714
729
  * @return {Number} */
715
730
  valueOf(): number;
716
731
  }
732
+ /** Position of camera in world space
733
+ * @type {Vector2}
734
+ * @default
735
+ * @memberof Settings */
736
+ declare let cameraPos: Vector2;
737
+ /** Scale of camera in world space
738
+ * @default
739
+ * @memberof Settings */
740
+ declare let cameraScale: number;
717
741
  /** The max size of the canvas, centered if window is larger
718
742
  * @type {Vector2}
719
743
  * @default
@@ -733,6 +757,14 @@ declare let cavasPixelated: number;
733
757
  * @default
734
758
  * @memberof Settings */
735
759
  declare let fontDefault: string;
760
+ /** Enable webgl rendering, webgl can be disabled and removed from build (with some features disabled)
761
+ * @default
762
+ * @memberof Settings */
763
+ declare let glEnable: number;
764
+ /** Fixes slow rendering in some browsers by not compositing the WebGL canvas
765
+ * @default
766
+ * @memberof Settings */
767
+ declare let glOverlay: number;
736
768
  /** Default size of tiles in pixels
737
769
  * @type {Vector2}
738
770
  * @default
@@ -783,23 +815,6 @@ declare let gravity: number;
783
815
  * @default
784
816
  * @memberof Settings */
785
817
  declare let particleEmitRateScale: number;
786
- /** Position of camera in world space
787
- * @type {Vector2}
788
- * @default
789
- * @memberof Settings */
790
- declare let cameraPos: Vector2;
791
- /** Scale of camera in world space
792
- * @default
793
- * @memberof Settings */
794
- declare let cameraScale: number;
795
- /** Enable webgl rendering, webgl can be disabled and removed from build (with some features disabled)
796
- * @default
797
- * @memberof Settings */
798
- declare let glEnable: number;
799
- /** Fixes slow rendering in some browsers by not compositing the WebGL canvas
800
- * @default
801
- * @memberof Settings */
802
- declare let glOverlay: number;
803
818
  /** Should gamepads be allowed
804
819
  * @default
805
820
  * @memberof Settings */
@@ -991,10 +1006,6 @@ declare class EngineObject {
991
1006
  isSolid: boolean;
992
1007
  toString(): string;
993
1008
  }
994
- /** Tile sheet for batch rendering system
995
- * @type {Image}
996
- * @memberof Draw */
997
- declare const tileImage: new (width?: number, height?: number) => HTMLImageElement;
998
1009
  /** The primary 2D canvas visible to the user
999
1010
  * @type {HTMLCanvasElement}
1000
1011
  * @memberof Draw */
@@ -1015,6 +1026,13 @@ declare let overlayContext: CanvasRenderingContext2D;
1015
1026
  * @type {Vector2}
1016
1027
  * @memberof Draw */
1017
1028
  declare let mainCanvasSize: Vector2;
1029
+ /** Tile sheet for batch rendering system
1030
+ * @type {Image}
1031
+ * @memberof Draw */
1032
+ declare const tileImage: new (width?: number, height?: number) => HTMLImageElement;
1033
+ declare let tileImageSize: any;
1034
+ declare let tileImageFixBleed: any;
1035
+ declare let drawCount: any;
1018
1036
  /** Convert from screen to world space coordinates
1019
1037
  * - if calling outside of render, you may need to manually set mainCanvasSize
1020
1038
  * @param {Vector2} screenPos
@@ -1169,8 +1187,8 @@ declare function vibrateStop(): boolean;
1169
1187
  * @memberof Input */
1170
1188
  declare const isTouchDevice: boolean;
1171
1189
  declare let touchGamepadTimer: Timer;
1172
- declare let touchGamepadButtons: any[];
1173
- declare let touchGamepadStick: Vector2;
1190
+ declare let touchGamepadButtons: any;
1191
+ declare let touchGamepadStick: any;
1174
1192
  /**
1175
1193
  * Sound Object - Stores a zzfx sound for later use and can be played positionally
1176
1194
  * <br>
@@ -1554,7 +1572,7 @@ declare class Medal {
1554
1572
  * @param {Number} y - Screen space Y position
1555
1573
  * @param {Number} [size=medalDisplayIconSize] - Screen space size
1556
1574
  */
1557
- renderIcon(x: number, y: number, size?: number): void;
1575
+ renderIcon(pos: any, size?: number): void;
1558
1576
  storageKey(): string;
1559
1577
  }
1560
1578
  declare let newgrounds: any;
@@ -1571,10 +1589,10 @@ declare class Newgrounds {
1571
1589
  * @param {Number} app_id - The newgrounds App ID
1572
1590
  * @param {String} [cipher] - The encryption Key (AES-128/Base64) */
1573
1591
  constructor(app_id: number, cipher?: string);
1592
+ cryptoJS: any;
1574
1593
  app_id: number;
1575
1594
  cipher: string;
1576
1595
  host: string;
1577
- cryptoJS: any;
1578
1596
  session_id: string | number;
1579
1597
  medals: any;
1580
1598
  scoreboards: any;
@@ -1604,7 +1622,6 @@ declare class Newgrounds {
1604
1622
  */
1605
1623
  call(component: string, parameters?: any, async?: boolean): any;
1606
1624
  }
1607
- declare function CryptoJS(): any;
1608
1625
  /** The WebGL canvas which appears above the main canvas and below the overlay canvas
1609
1626
  * @type {HTMLCanvasElement}
1610
1627
  * @memberof WebGL */
@@ -1620,7 +1637,6 @@ declare let glTileTexture: WebGLTexture;
1620
1637
  declare let glActiveTexture: any;
1621
1638
  declare let glShader: any;
1622
1639
  declare let glArrayBuffer: any;
1623
- declare let glVertexData: any;
1624
1640
  declare let glPositionData: any;
1625
1641
  declare let glColorData: any;
1626
1642
  declare let glBatchCount: any;
@@ -1661,10 +1677,11 @@ declare const gl_VERTICES_PER_QUAD: 6;
1661
1677
  declare const gl_INDICIES_PER_VERT: 6;
1662
1678
  declare const gl_MAX_BATCH: number;
1663
1679
  declare const gl_VERTEX_BYTE_STRIDE: number;
1680
+ declare const gl_VERTEX_BUFFER_SIZE: number;
1664
1681
  /** Name of engine */
1665
1682
  declare const engineName: "LittleJS";
1666
1683
  /** Version of engine */
1667
- declare const engineVersion: "1.4.6";
1684
+ declare const engineVersion: "1.4.8";
1668
1685
  /** Frames per second to update objects
1669
1686
  * @default */
1670
1687
  declare const frameRate: 60;
@@ -1681,13 +1698,5 @@ declare let frame: number;
1681
1698
  declare let time: number;
1682
1699
  /** Actual clock time since start in seconds (not affected by pause or frame rate clamping) */
1683
1700
  declare let timeReal: number;
1684
- /** Is the game paused? Causes time and objects to not be updated. */
1701
+ /** Is the game paused? Causes time and objects to not be updated */
1685
1702
  declare let paused: number;
1686
- declare let frameTimeLastMS: number;
1687
- declare let frameTimeBufferMS: number;
1688
- declare let tileImageSize: any;
1689
- declare let tileImageFixBleed: any;
1690
- declare let averageFPS: any;
1691
- declare let drawCount: any;
1692
- declare const styleBody: "margin:0;overflow:hidden;background:#000";
1693
- declare const styleCanvas: "position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)";
@@ -5,6 +5,6 @@
5
5
  <link rel=icon type=image/png href=../../favicon.png>
6
6
  </head><body>
7
7
 
8
- <script src=../../engine/engine.all.js?118></script>
9
- <script src=gameObjects.js?118></script>
10
- <script src=game.js?118></script>
8
+ <script src=../../engine/engine.all.js?121></script>
9
+ <script src=gameObjects.js?121></script>
10
+ <script src=game.js?121></script>
@@ -6,4 +6,4 @@
6
6
  </head><body>
7
7
 
8
8
  <!-- Add your game scripts here -->
9
- <script src=game.js?118 type=module></script>
9
+ <script src=game.js?121 type=module></script>
@@ -15,18 +15,18 @@ button
15
15
  </style>
16
16
  </head><body>
17
17
 
18
- <script src=../../engine/engineDebug.js?118></script>
19
- <script src=../../engine/engineUtilities.js?118></script>
20
- <script src=../../engine/engineSettings.js?118></script>
21
- <script src=../../engine/engineObject.js?118></script>
22
- <script src=../../engine/engineDraw.js?118></script>
23
- <script src=../../engine/engineInput.js?118></script>
24
- <script src=../../engine/engineAudio.js?118></script>
25
- <script src=../../engine/engineTileLayer.js?118></script>
26
- <script src=../../engine/engineParticles.js?118></script>
27
- <script src=../../engine/engineMedals.js?118></script>
28
- <script src=../../engine/engineWebGL.js?118></script>
29
- <script src=../../engine/engine.js?118></script>
18
+ <script src=../../engine/engineDebug.js?121></script>
19
+ <script src=../../engine/engineUtilities.js?121></script>
20
+ <script src=../../engine/engineSettings.js?121></script>
21
+ <script src=../../engine/engineObject.js?121></script>
22
+ <script src=../../engine/engineDraw.js?121></script>
23
+ <script src=../../engine/engineInput.js?121></script>
24
+ <script src=../../engine/engineAudio.js?121></script>
25
+ <script src=../../engine/engineTileLayer.js?121></script>
26
+ <script src=../../engine/engineParticles.js?121></script>
27
+ <script src=../../engine/engineMedals.js?121></script>
28
+ <script src=../../engine/engineWebGL.js?121></script>
29
+ <script src=../../engine/engine.js?121></script>
30
30
  <script>
31
31
 
32
32
  'use strict';
@@ -5,9 +5,9 @@
5
5
  <link rel=icon type=image/png href=../../favicon.png>
6
6
  </head><body>
7
7
 
8
- <script src=../../engine/engine.all.js?118></script>
9
- <script src=gameObjects.js?118></script>
10
- <script src=gamePlayer.js?118></script>
11
- <script src=gameEffects.js?118></script>
12
- <script src=gameLevel.js?118></script>
13
- <script src=game.js?118></script>
8
+ <script src=../../engine/engine.all.js?121></script>
9
+ <script src=gameObjects.js?121></script>
10
+ <script src=gamePlayer.js?121></script>
11
+ <script src=gameEffects.js?121></script>
12
+ <script src=gameLevel.js?121></script>
13
+ <script src=game.js?121></script>
@@ -5,5 +5,5 @@
5
5
  <link rel=icon type=image/png href=../../favicon.png>
6
6
  </head><body>
7
7
 
8
- <script src=../../engine/engine.all.js?118></script>
9
- <script src=game.js?118></script>
8
+ <script src=../../engine/engine.all.js?121></script>
9
+ <script src=game.js?121></script>
@@ -5,7 +5,7 @@
5
5
  <link rel=icon type=image/png href=../../favicon.png>
6
6
  </head><body>
7
7
 
8
- <script src=../../engine/engine.all.min.js?118></script>
8
+ <script src=../../engine/engine.all.min.js?121></script>
9
9
  <script>
10
10
 
11
11
  /*
package/favicon.png CHANGED
Binary file
package/game.js CHANGED
@@ -5,7 +5,7 @@
5
5
  'use strict';
6
6
 
7
7
  // sound effects
8
- const sound_click = new Sound([.5,.5]);
8
+ const sound_click = new Sound([1,.5]);
9
9
 
10
10
  // medals
11
11
  const medal_example = new Medal(0, 'Example Medal', 'Welcome to LittleJS!');
@@ -19,8 +19,8 @@ function gameInit()
19
19
  {
20
20
  // create tile collision and visible tile layer
21
21
  initTileCollision(vec2(32, 16));
22
- const tileLayer = new TileLayer(vec2(), tileCollisionSize);
23
22
  const pos = vec2();
23
+ const tileLayer = new TileLayer(pos, tileCollisionSize);
24
24
 
25
25
  // get level data from the tiles image
26
26
  const imageLevelDataRow = 1;
@@ -28,17 +28,16 @@ function gameInit()
28
28
  for (pos.x = tileCollisionSize.x; pos.x--;)
29
29
  for (pos.y = tileCollisionSize.y; pos.y--;)
30
30
  {
31
- const data = mainContext.getImageData(pos.x, 16*(imageLevelDataRow+1)-pos.y-1, 1, 1).data;
32
- if (data[0])
31
+ const imageData = mainContext.getImageData(pos.x, 16*(imageLevelDataRow+1)-pos.y-1, 1, 1).data;
32
+ if (imageData[0])
33
33
  {
34
- setTileCollisionData(pos, 1);
35
-
36
34
  const tileIndex = 1;
37
35
  const direction = randInt(4)
38
36
  const mirror = randInt(2);
39
37
  const color = randColor();
40
38
  const data = new TileLayerData(tileIndex, direction, mirror, color);
41
39
  tileLayer.setData(pos, data);
40
+ setTileCollisionData(pos, 1);
42
41
  }
43
42
  }
44
43
  tileLayer.redraw();
@@ -51,9 +50,8 @@ function gameInit()
51
50
  gravity = -.01;
52
51
 
53
52
  // create particle emitter
54
- const center = tileCollisionSize.scale(.5).add(vec2(0,9));
55
53
  particleEmiter = new ParticleEmitter(
56
- center, 0, // emitPos, emitAngle
54
+ vec2(16), 0, // emitPos, emitAngle
57
55
  1, 0, 500, PI, // emitSize, emitTime, emitRate, emiteCone
58
56
  0, vec2(16), // tileIndex, tileSize
59
57
  new Color(1,1,1), new Color(0,0,0), // colorStartA, colorStartB
package/index.html CHANGED
@@ -6,21 +6,21 @@
6
6
  </head><body>
7
7
 
8
8
  <!-- LittleJS engine scripts -->
9
- <script src=engine/engineDebug.js?118></script>
10
- <script src=engine/engineUtilities.js?118></script>
11
- <script src=engine/engineSettings.js?118></script>
12
- <script src=engine/engineObject.js?118></script>
13
- <script src=engine/engineDraw.js?118></script>
14
- <script src=engine/engineInput.js?118></script>
15
- <script src=engine/engineAudio.js?118></script>
16
- <script src=engine/engineTileLayer.js?118></script>
17
- <script src=engine/engineParticles.js?118></script>
18
- <script src=engine/engineMedals.js?118></script>
19
- <script src=engine/engineWebGL.js?118></script>
20
- <script src=engine/engine.js?118></script>
9
+ <script src=engine/engineDebug.js?121></script>
10
+ <script src=engine/engineUtilities.js?121></script>
11
+ <script src=engine/engineSettings.js?121></script>
12
+ <script src=engine/engineObject.js?121></script>
13
+ <script src=engine/engineDraw.js?121></script>
14
+ <script src=engine/engineInput.js?121></script>
15
+ <script src=engine/engineAudio.js?121></script>
16
+ <script src=engine/engineTileLayer.js?121></script>
17
+ <script src=engine/engineParticles.js?121></script>
18
+ <script src=engine/engineMedals.js?121></script>
19
+ <script src=engine/engineWebGL.js?121></script>
20
+ <script src=engine/engine.js?121></script>
21
21
 
22
22
  <!-- You can also include all engine scripts like this... -->
23
23
  <!-- <script src=engine/engine.all.js></script> -->
24
24
 
25
25
  <!-- Add your game scripts here -->
26
- <script src=game.js?118></script>
26
+ <script src=game.js?121></script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "littlejsengine",
3
- "version": "1.4.6",
3
+ "version": "1.4.8",
4
4
  "description": "LittleJS - Tiny and Fast HTML5 Game Engine",
5
5
  "main": "engine/engine.all.module.js",
6
6
  "repository": {