littlejsengine 1.4.7 → 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.
- package/README.md +6 -1
- package/build.bat +7 -3
- package/engine/engine.all.js +266 -295
- package/engine/engine.all.min.js +1 -1
- package/engine/engine.all.module.js +276 -315
- package/engine/engine.all.module.min.js +1 -0
- package/engine/engine.all.release.js +266 -295
- package/engine/engine.js +21 -30
- package/engine/engineAudio.js +8 -15
- package/engine/engineBuild.bat +10 -3
- package/engine/engineDraw.js +14 -18
- package/engine/engineExport.js +10 -20
- package/engine/engineInput.js +84 -71
- package/engine/engineMedals.js +25 -32
- package/engine/engineObject.js +2 -2
- package/engine/engineParticles.js +7 -6
- package/engine/engineSettings.js +27 -27
- package/engine/engineTileLayer.js +15 -16
- package/engine/engineUtilities.js +26 -13
- package/engine/engineWebGL.js +38 -66
- package/engine/index.d.ts +52 -39
- package/examples/breakout/index.html +3 -3
- package/examples/module/index.html +1 -1
- package/examples/particles/index.html +12 -12
- package/examples/platformer/index.html +6 -6
- package/examples/puzzle/index.html +2 -2
- package/examples/stress/index.html +1 -1
- package/favicon.png +0 -0
- package/game.js +6 -8
- package/index.html +13 -13
- package/package.json +1 -1
- package/engine/engine.all.release.module.js +0 -4464
package/engine/engineWebGL.js
CHANGED
|
@@ -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,
|
|
30
|
+
let glActiveTexture, glShader, glArrayBuffer, glPositionData, glColorData, glBatchCount, glBatchAdditive, glAdditive;
|
|
31
31
|
|
|
32
32
|
///////////////////////////////////////////////////////////////////////////////
|
|
33
33
|
|
|
@@ -48,27 +48,25 @@ function glInit()
|
|
|
48
48
|
'uniform mat4 m;'+ // transform matrix
|
|
49
49
|
'attribute vec2 p,t;'+ // position, uv
|
|
50
50
|
'attribute vec4 c,a;'+ // color, additiveColor
|
|
51
|
-
'varying
|
|
52
|
-
'varying vec4 d,e;'+ // return color, additiveColor
|
|
51
|
+
'varying vec4 v,d,e;'+ // return uv, color, additiveColor
|
|
53
52
|
'void main(){'+ // shader entry point
|
|
54
53
|
'gl_Position=m*vec4(p,1,1);'+ // transform position
|
|
55
|
-
'v=t;d=c;e=a;'+
|
|
54
|
+
'v=vec4(t,p);d=c;e=a;'+ // pass stuff to fragment shader
|
|
56
55
|
'}' // end of shader
|
|
57
56
|
,
|
|
58
|
-
'precision highp float;'+
|
|
59
|
-
'varying
|
|
60
|
-
'
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'}' // 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
|
|
65
63
|
);
|
|
66
64
|
|
|
67
65
|
// init buffers
|
|
68
|
-
|
|
66
|
+
const vertexData = new ArrayBuffer(gl_VERTEX_BUFFER_SIZE);
|
|
69
67
|
glArrayBuffer = glContext.createBuffer();
|
|
70
|
-
glPositionData = new Float32Array(
|
|
71
|
-
glColorData = new Uint32Array(
|
|
68
|
+
glPositionData = new Float32Array(vertexData);
|
|
69
|
+
glColorData = new Uint32Array(vertexData);
|
|
72
70
|
glBatchCount = 0;
|
|
73
71
|
}
|
|
74
72
|
|
|
@@ -143,18 +141,19 @@ function glCreateTexture(image)
|
|
|
143
141
|
image && image.width && glContext.texImage2D(gl_TEXTURE_2D, 0, gl_RGBA, gl_RGBA, gl_UNSIGNED_BYTE, image);
|
|
144
142
|
|
|
145
143
|
// use point filtering for pixelated rendering
|
|
146
|
-
|
|
147
|
-
glContext.texParameteri(gl_TEXTURE_2D,
|
|
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);
|
|
148
147
|
glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_WRAP_S, gl_CLAMP_TO_EDGE);
|
|
149
148
|
glContext.texParameteri(gl_TEXTURE_2D, gl_TEXTURE_WRAP_T, gl_CLAMP_TO_EDGE);
|
|
150
149
|
return texture;
|
|
151
150
|
}
|
|
152
151
|
|
|
153
152
|
// called automatically by engine before render
|
|
154
|
-
function glPreRender(
|
|
153
|
+
function glPreRender()
|
|
155
154
|
{
|
|
156
155
|
// clear and set to same size as main canvas
|
|
157
|
-
glContext.viewport(0, 0, glCanvas.width = width, glCanvas.height = height);
|
|
156
|
+
glContext.viewport(0, 0, glCanvas.width = mainCanvas.width, glCanvas.height = mainCanvas.height);
|
|
158
157
|
glContext.clear(gl_COLOR_BUFFER_BIT);
|
|
159
158
|
|
|
160
159
|
// set up the shader
|
|
@@ -162,7 +161,7 @@ function glPreRender(width, height, cameraX, cameraY, cameraScale)
|
|
|
162
161
|
glContext.activeTexture(gl_TEXTURE0);
|
|
163
162
|
glContext.bindTexture(gl_TEXTURE_2D, glActiveTexture = glTileTexture);
|
|
164
163
|
glContext.bindBuffer(gl_ARRAY_BUFFER, glArrayBuffer);
|
|
165
|
-
glContext.bufferData(gl_ARRAY_BUFFER,
|
|
164
|
+
glContext.bufferData(gl_ARRAY_BUFFER, gl_VERTEX_BUFFER_SIZE, gl_DYNAMIC_DRAW);
|
|
166
165
|
glSetBlendMode();
|
|
167
166
|
|
|
168
167
|
// set vertex attributes
|
|
@@ -180,14 +179,14 @@ function glPreRender(width, height, cameraX, cameraY, cameraScale)
|
|
|
180
179
|
initVertexAttribArray('a', gl_UNSIGNED_BYTE, 1, 4, 1); // additiveColor
|
|
181
180
|
|
|
182
181
|
// build the transform matrix
|
|
183
|
-
const sx = 2 * cameraScale / width;
|
|
184
|
-
const sy = 2 * cameraScale / height;
|
|
182
|
+
const sx = 2 * cameraScale / mainCanvas.width;
|
|
183
|
+
const sy = 2 * cameraScale / mainCanvas.height;
|
|
185
184
|
glContext.uniformMatrix4fv(glContext.getUniformLocation(glShader, 'm'), 0,
|
|
186
185
|
new Float32Array([
|
|
187
186
|
sx, 0, 0, 0,
|
|
188
187
|
0, sy, 0, 0,
|
|
189
188
|
1, 1, -1, 1,
|
|
190
|
-
-1-sx*
|
|
189
|
+
-1-sx*cameraPos.x, -1-sy*cameraPos.y, 0, 0
|
|
191
190
|
])
|
|
192
191
|
);
|
|
193
192
|
}
|
|
@@ -235,10 +234,10 @@ function glCopyToContext(context, forceDraw)
|
|
|
235
234
|
* @param uv0Y
|
|
236
235
|
* @param uv1X
|
|
237
236
|
* @param uv1Y
|
|
238
|
-
* @param
|
|
237
|
+
* @param rgba
|
|
239
238
|
* @param [rgbaAdditive=0]
|
|
240
239
|
* @memberof WebGL */
|
|
241
|
-
function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba
|
|
240
|
+
function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba, rgbaAdditive=0)
|
|
242
241
|
{
|
|
243
242
|
// flush if there is no room for more verts or if different blend mode
|
|
244
243
|
if (glBatchCount == gl_MAX_BATCH || glBatchAdditive != glAdditive)
|
|
@@ -249,43 +248,16 @@ function glDraw(x, y, sizeX, sizeY, angle, uv0X, uv0Y, uv1X, uv1Y, rgba=0xffffff
|
|
|
249
248
|
const cx = c*sizeX, cy = c*sizeY, sx = s*sizeX, sy = s*sizeY;
|
|
250
249
|
|
|
251
250
|
// setup 2 triangles to form a quad
|
|
252
|
-
let offset = glBatchCount++ * gl_VERTICES_PER_QUAD * gl_INDICIES_PER_VERT;
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
glPositionData[offset++] = y + cy - sx;
|
|
263
|
-
glPositionData[offset++] = uv1X; glPositionData[offset++] = uv0Y;
|
|
264
|
-
glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
|
|
265
|
-
|
|
266
|
-
// vertex 2
|
|
267
|
-
glPositionData[offset++] = x - cx + sy;
|
|
268
|
-
glPositionData[offset++] = y + cy + sx;
|
|
269
|
-
glPositionData[offset++] = uv0X; glPositionData[offset++] = uv0Y;
|
|
270
|
-
glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
|
|
271
|
-
|
|
272
|
-
// vertex 0
|
|
273
|
-
glPositionData[offset++] = x - cx - sy;
|
|
274
|
-
glPositionData[offset++] = y - cy + sx;
|
|
275
|
-
glPositionData[offset++] = uv0X; glPositionData[offset++] = uv1Y;
|
|
276
|
-
glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
|
|
277
|
-
|
|
278
|
-
// vertex 3
|
|
279
|
-
glPositionData[offset++] = x + cx - sy;
|
|
280
|
-
glPositionData[offset++] = y - cy - sx;
|
|
281
|
-
glPositionData[offset++] = uv1X; glPositionData[offset++] = uv1Y;
|
|
282
|
-
glColorData[offset++] = rgba; glColorData[offset++] = rgbaAdditive;
|
|
283
|
-
|
|
284
|
-
// vertex 1
|
|
285
|
-
glPositionData[offset++] = x + cx + sy;
|
|
286
|
-
glPositionData[offset++] = y + cy - sx;
|
|
287
|
-
glPositionData[offset++] = uv1X; glPositionData[offset++] = uv0Y;
|
|
288
|
-
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
|
+
}
|
|
289
261
|
}
|
|
290
262
|
|
|
291
263
|
///////////////////////////////////////////////////////////////////////////////
|
|
@@ -337,14 +309,13 @@ function glRenderPostProcess()
|
|
|
337
309
|
return;
|
|
338
310
|
|
|
339
311
|
// prepare to render post process shader
|
|
340
|
-
const width = mainCanvas.width, height = mainCanvas.height;
|
|
341
312
|
if (glEnable)
|
|
342
313
|
{
|
|
343
314
|
glFlush(); // clear out the buffer
|
|
344
315
|
mainContext.drawImage(glCanvas, 0, 0); // copy to the main canvas
|
|
345
316
|
}
|
|
346
|
-
else
|
|
347
|
-
glContext.viewport(0, 0, glCanvas.width = width, glCanvas.height = height);
|
|
317
|
+
else // set viewport
|
|
318
|
+
glContext.viewport(0, 0, glCanvas.width = mainCanvas.width, glCanvas.height = mainCanvas.height);
|
|
348
319
|
|
|
349
320
|
// setup shader program to draw one triangle
|
|
350
321
|
glContext.useProgram(glPostShader);
|
|
@@ -368,7 +339,7 @@ function glRenderPostProcess()
|
|
|
368
339
|
const uniformLocation = (name)=>glContext.getUniformLocation(glPostShader, name);
|
|
369
340
|
glContext.uniform1i(uniformLocation('iChannel0'), 0);
|
|
370
341
|
glContext.uniform1f(uniformLocation('iTime'), time);
|
|
371
|
-
glContext.uniform3f(uniformLocation('iResolution'), width, height, 1);
|
|
342
|
+
glContext.uniform3f(uniformLocation('iResolution'), mainCanvas.width, mainCanvas.height, 1);
|
|
372
343
|
glContext.drawArrays(gl_TRIANGLES, 0, 3);
|
|
373
344
|
}
|
|
374
345
|
|
|
@@ -408,4 +379,5 @@ gl_UNPACK_FLIP_Y_WEBGL = 37440,
|
|
|
408
379
|
gl_VERTICES_PER_QUAD = 6,
|
|
409
380
|
gl_INDICIES_PER_VERT = 6,
|
|
410
381
|
gl_MAX_BATCH = 1<<16,
|
|
411
|
-
gl_VERTEX_BYTE_STRIDE = (4 * 2) * 2 + (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
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
/**
|
|
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
|
-
/**
|
|
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:
|
|
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(
|
|
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.
|
|
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,9 +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 tileImageSize: any;
|
|
1687
|
-
declare let tileImageFixBleed: any;
|
|
1688
|
-
declare let averageFPS: any;
|
|
1689
|
-
declare let drawCount: any;
|
|
@@ -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?
|
|
9
|
-
<script src=gameObjects.js?
|
|
10
|
-
<script src=game.js?
|
|
8
|
+
<script src=../../engine/engine.all.js?121></script>
|
|
9
|
+
<script src=gameObjects.js?121></script>
|
|
10
|
+
<script src=game.js?121></script>
|
|
@@ -15,18 +15,18 @@ button
|
|
|
15
15
|
</style>
|
|
16
16
|
</head><body>
|
|
17
17
|
|
|
18
|
-
<script src=../../engine/engineDebug.js?
|
|
19
|
-
<script src=../../engine/engineUtilities.js?
|
|
20
|
-
<script src=../../engine/engineSettings.js?
|
|
21
|
-
<script src=../../engine/engineObject.js?
|
|
22
|
-
<script src=../../engine/engineDraw.js?
|
|
23
|
-
<script src=../../engine/engineInput.js?
|
|
24
|
-
<script src=../../engine/engineAudio.js?
|
|
25
|
-
<script src=../../engine/engineTileLayer.js?
|
|
26
|
-
<script src=../../engine/engineParticles.js?
|
|
27
|
-
<script src=../../engine/engineMedals.js?
|
|
28
|
-
<script src=../../engine/engineWebGL.js?
|
|
29
|
-
<script src=../../engine/engine.js?
|
|
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?
|
|
9
|
-
<script src=gameObjects.js?
|
|
10
|
-
<script src=gamePlayer.js?
|
|
11
|
-
<script src=gameEffects.js?
|
|
12
|
-
<script src=gameLevel.js?
|
|
13
|
-
<script src=game.js?
|
|
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>
|
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([
|
|
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
|
|
32
|
-
if (
|
|
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
|
-
|
|
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?
|
|
10
|
-
<script src=engine/engineUtilities.js?
|
|
11
|
-
<script src=engine/engineSettings.js?
|
|
12
|
-
<script src=engine/engineObject.js?
|
|
13
|
-
<script src=engine/engineDraw.js?
|
|
14
|
-
<script src=engine/engineInput.js?
|
|
15
|
-
<script src=engine/engineAudio.js?
|
|
16
|
-
<script src=engine/engineTileLayer.js?
|
|
17
|
-
<script src=engine/engineParticles.js?
|
|
18
|
-
<script src=engine/engineMedals.js?
|
|
19
|
-
<script src=engine/engineWebGL.js?
|
|
20
|
-
<script src=engine/engine.js?
|
|
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?
|
|
26
|
+
<script src=game.js?121></script>
|