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.
- package/README.md +80 -0
- package/build.bat +7 -3
- package/engine/engine.all.js +276 -295
- package/engine/engine.all.min.js +1 -1
- package/engine/engine.all.module.js +286 -318
- package/engine/engine.all.module.min.js +1 -0
- package/engine/engine.all.release.js +276 -295
- package/engine/engine.js +28 -30
- package/engine/engineAudio.js +8 -15
- package/engine/engineBuild.bat +10 -3
- package/engine/engineDraw.js +14 -18
- package/engine/engineExport.js +10 -23
- package/engine/engineFont.png +0 -0
- package/engine/engineInput.js +86 -69
- package/engine/engineMedals.js +25 -32
- package/engine/engineObject.js +2 -2
- package/engine/engineParticles.js +7 -6
- package/engine/engineSettings.js +28 -28
- package/engine/engineTileLayer.js +15 -16
- package/engine/engineUtilities.js +26 -13
- package/engine/engineWebGL.js +38 -67
- package/engine/index.d.ts +52 -43
- 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 -4457
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
|
|
|
@@ -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
|
|
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;'+
|
|
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;'+
|
|
60
|
-
'varying
|
|
61
|
-
'
|
|
62
|
-
'
|
|
63
|
-
'
|
|
64
|
-
'
|
|
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
|
-
|
|
66
|
+
const vertexData = new ArrayBuffer(gl_VERTEX_BUFFER_SIZE);
|
|
70
67
|
glArrayBuffer = glContext.createBuffer();
|
|
71
|
-
glPositionData = new Float32Array(
|
|
72
|
-
glColorData = new Uint32Array(
|
|
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
|
-
|
|
148
|
-
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);
|
|
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(
|
|
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,
|
|
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*
|
|
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
|
|
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
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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);
|
|
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
|
|
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,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?
|
|
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>
|