melonjs 10.7.1 → 10.10.0
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/LICENSE.md +1 -1
- package/README.md +29 -23
- package/dist/melonjs.js +2220 -1070
- package/dist/melonjs.min.js +4 -4
- package/dist/melonjs.module.d.ts +1395 -485
- package/dist/melonjs.module.js +2244 -1131
- package/package.json +17 -14
- package/src/camera/camera2d.js +1 -1
- package/src/entity/entity.js +6 -7
- package/src/game.js +2 -2
- package/src/geometries/ellipse.js +20 -21
- package/src/geometries/line.js +7 -7
- package/src/geometries/path2d.js +319 -0
- package/src/geometries/poly.js +27 -27
- package/src/geometries/rectangle.js +19 -19
- package/src/geometries/roundrect.js +164 -0
- package/src/index.js +12 -2
- package/src/input/gamepad.js +2 -2
- package/src/input/pointerevent.js +1 -1
- package/src/lang/deprecated.js +8 -6
- package/src/level/tiled/TMXLayer.js +1 -1
- package/src/level/tiled/TMXObject.js +9 -12
- package/src/level/tiled/TMXTileMap.js +23 -4
- package/src/level/tiled/TMXUtils.js +1 -1
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -1
- package/src/loader/loader.js +4 -4
- package/src/loader/loadingscreen.js +17 -6
- package/src/math/color.js +6 -5
- package/src/math/matrix2.js +1 -1
- package/src/math/matrix3.js +1 -1
- package/src/math/observable_vector2.js +1 -1
- package/src/math/observable_vector3.js +1 -1
- package/src/math/vector2.js +1 -1
- package/src/math/vector3.js +1 -1
- package/src/particles/emitter.js +34 -26
- package/src/particles/particle.js +3 -2
- package/src/physics/body.js +67 -51
- package/src/physics/bounds.js +8 -9
- package/src/physics/world.js +1 -1
- package/src/polyfill/index.js +1 -0
- package/src/polyfill/roundrect.js +235 -0
- package/src/renderable/GUI.js +5 -5
- package/src/renderable/collectable.js +9 -2
- package/src/renderable/colorlayer.js +1 -1
- package/src/renderable/container.js +27 -27
- package/src/renderable/imagelayer.js +3 -3
- package/src/renderable/light2d.js +115 -0
- package/src/renderable/renderable.js +23 -22
- package/src/renderable/sprite.js +15 -16
- package/src/renderable/trigger.js +10 -4
- package/src/state/stage.js +73 -3
- package/src/state/state.js +1 -1
- package/src/system/device.js +10 -8
- package/src/system/pooling.js +156 -149
- package/src/text/bitmaptext.js +1 -1
- package/src/text/text.js +14 -18
- package/src/utils/utils.js +2 -2
- package/src/video/canvas/canvas_renderer.js +144 -81
- package/src/video/renderer.js +64 -37
- package/src/video/{texture.js → texture/atlas.js} +8 -8
- package/src/video/{texture_cache.js → texture/cache.js} +4 -4
- package/src/video/texture/canvas_texture.js +87 -0
- package/src/video/webgl/glshader.js +29 -193
- package/src/video/webgl/utils/attributes.js +16 -0
- package/src/video/webgl/utils/precision.js +11 -0
- package/src/video/webgl/utils/program.js +58 -0
- package/src/video/webgl/utils/string.js +16 -0
- package/src/video/webgl/utils/uniforms.js +87 -0
- package/src/video/webgl/webgl_compositor.js +1 -14
- package/src/video/webgl/webgl_renderer.js +191 -231
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ignore
|
|
3
|
+
*/
|
|
4
|
+
function compileShader(gl, type, source) {
|
|
5
|
+
var shader = gl.createShader(type);
|
|
6
|
+
gl.shaderSource(shader, source);
|
|
7
|
+
gl.compileShader(shader);
|
|
8
|
+
|
|
9
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
10
|
+
throw new Error(gl.getShaderInfoLog(shader));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return shader;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Compile GLSL into a shader object
|
|
18
|
+
* @ignore
|
|
19
|
+
*/
|
|
20
|
+
export function compileProgram(gl, vertex, fragment, attributes) {
|
|
21
|
+
var vertShader = compileShader(gl, gl.VERTEX_SHADER, vertex);
|
|
22
|
+
var fragShader = compileShader(gl, gl.FRAGMENT_SHADER, fragment);
|
|
23
|
+
|
|
24
|
+
var program = gl.createProgram();
|
|
25
|
+
|
|
26
|
+
gl.attachShader(program, vertShader);
|
|
27
|
+
gl.attachShader(program, fragShader);
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// force vertex attributes to use location 0 as starting location to prevent
|
|
31
|
+
// browser to do complicated emulation when running on desktop OpenGL (e.g. on macOS)
|
|
32
|
+
for (var location in attributes) {
|
|
33
|
+
gl.bindAttribLocation(program, attributes[location], location);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
gl.linkProgram(program);
|
|
37
|
+
|
|
38
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
39
|
+
var error_msg =
|
|
40
|
+
"Error initializing Shader " + this + "\n" +
|
|
41
|
+
"gl.VALIDATE_STATUS: " + gl.getProgramParameter(program, gl.VALIDATE_STATUS) + "\n" +
|
|
42
|
+
"gl.getError()" + gl.getError() + "\n" +
|
|
43
|
+
"gl.getProgramInfoLog()" + gl.getProgramInfoLog(program);
|
|
44
|
+
// house cleaning
|
|
45
|
+
gl.deleteProgram(program);
|
|
46
|
+
program = null;
|
|
47
|
+
// throw the exception
|
|
48
|
+
throw new Error(error_msg);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
gl.useProgram(program);
|
|
52
|
+
|
|
53
|
+
// clean-up
|
|
54
|
+
gl.deleteShader(vertShader);
|
|
55
|
+
gl.deleteShader(fragShader);
|
|
56
|
+
|
|
57
|
+
return program;
|
|
58
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* clean the given source from space, comments, etc...
|
|
3
|
+
* @ignore
|
|
4
|
+
*/
|
|
5
|
+
export function minify(src) {
|
|
6
|
+
// remove comments
|
|
7
|
+
src = src.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*$/gm, "$1");
|
|
8
|
+
// Remove leading and trailing whitespace from lines
|
|
9
|
+
src = src.replace(/(\\n\s+)|(\s+\\n)/g, "");
|
|
10
|
+
// Remove line breaks
|
|
11
|
+
src = src.replace(/(\\r|\\n)+/g, "");
|
|
12
|
+
// Remove unnecessary whitespace
|
|
13
|
+
src = src.replace(/\s*([;,[\](){}\\\/\-+*|^&!=<>?~%])\s*/g, "$1");
|
|
14
|
+
|
|
15
|
+
return src;
|
|
16
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* Hash map of GLSL data types to WebGL Uniform methods
|
|
4
|
+
* @ignore
|
|
5
|
+
*/
|
|
6
|
+
const fnHash = {
|
|
7
|
+
"bool" : "1i",
|
|
8
|
+
"int" : "1i",
|
|
9
|
+
"float" : "1f",
|
|
10
|
+
"vec2" : "2fv",
|
|
11
|
+
"vec3" : "3fv",
|
|
12
|
+
"vec4" : "4fv",
|
|
13
|
+
"bvec2" : "2iv",
|
|
14
|
+
"bvec3" : "3iv",
|
|
15
|
+
"bvec4" : "4iv",
|
|
16
|
+
"ivec2" : "2iv",
|
|
17
|
+
"ivec3" : "3iv",
|
|
18
|
+
"ivec4" : "4iv",
|
|
19
|
+
"mat2" : "Matrix2fv",
|
|
20
|
+
"mat3" : "Matrix3fv",
|
|
21
|
+
"mat4" : "Matrix4fv",
|
|
22
|
+
"sampler2D" : "1i"
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @ignore
|
|
27
|
+
*/
|
|
28
|
+
export function extractUniforms(gl, shader) {
|
|
29
|
+
var uniforms = {},
|
|
30
|
+
uniRx = /uniform\s+(\w+)\s+(\w+)/g,
|
|
31
|
+
uniformsData = {},
|
|
32
|
+
descriptor = {},
|
|
33
|
+
locations = {},
|
|
34
|
+
match;
|
|
35
|
+
|
|
36
|
+
// Detect all uniform names and types
|
|
37
|
+
[ shader.vertex, shader.fragment ].forEach(function (shader) {
|
|
38
|
+
while ((match = uniRx.exec(shader))) {
|
|
39
|
+
uniformsData[match[2]] = match[1];
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// Get uniform references
|
|
44
|
+
Object.keys(uniformsData).forEach(function (name) {
|
|
45
|
+
var type = uniformsData[name];
|
|
46
|
+
locations[name] = gl.getUniformLocation(shader.program, name);
|
|
47
|
+
|
|
48
|
+
descriptor[name] = {
|
|
49
|
+
"get" : (function (name) {
|
|
50
|
+
/**
|
|
51
|
+
* A getter for the uniform location
|
|
52
|
+
* @ignore
|
|
53
|
+
*/
|
|
54
|
+
return function () {
|
|
55
|
+
return locations[name];
|
|
56
|
+
};
|
|
57
|
+
})(name),
|
|
58
|
+
"set" : (function (name, type, fn) {
|
|
59
|
+
if (type.indexOf("mat") === 0) {
|
|
60
|
+
/**
|
|
61
|
+
* A generic setter for uniform matrices
|
|
62
|
+
* @ignore
|
|
63
|
+
*/
|
|
64
|
+
return function (val) {
|
|
65
|
+
gl[fn](locations[name], false, val);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
/**
|
|
70
|
+
* A generic setter for uniform vectors
|
|
71
|
+
* @ignore
|
|
72
|
+
*/
|
|
73
|
+
return function (val) {
|
|
74
|
+
var fnv = fn;
|
|
75
|
+
if (val.length && fn.slice(-1) !== "v") {
|
|
76
|
+
fnv += "v";
|
|
77
|
+
}
|
|
78
|
+
gl[fnv](locations[name], val);
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
})(name, type, "uniform" + fnHash[type])
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
Object.defineProperties(uniforms, descriptor);
|
|
85
|
+
|
|
86
|
+
return uniforms;
|
|
87
|
+
};
|
|
@@ -384,20 +384,7 @@ class WebGLCompositor {
|
|
|
384
384
|
this.activeShader = shader;
|
|
385
385
|
this.activeShader.bind();
|
|
386
386
|
this.activeShader.setUniform("uProjectionMatrix", this.renderer.projectionMatrix);
|
|
387
|
-
|
|
388
|
-
// set the vertex attributes
|
|
389
|
-
for (var index = 0; index < this.attributes.length; ++index) {
|
|
390
|
-
var gl = this.gl;
|
|
391
|
-
var element = this.attributes[index];
|
|
392
|
-
var location = this.activeShader.getAttribLocation(element.name);
|
|
393
|
-
|
|
394
|
-
if (location !== -1) {
|
|
395
|
-
gl.enableVertexAttribArray(location);
|
|
396
|
-
gl.vertexAttribPointer(location, element.size, element.type, element.normalized, this.vertexByteSize, element.offset);
|
|
397
|
-
} else {
|
|
398
|
-
gl.disableVertexAttribArray(index);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
387
|
+
this.activeShader.setVertexAttributes(this.gl, this.attributes, this.vertexByteSize);
|
|
401
388
|
}
|
|
402
389
|
}
|
|
403
390
|
|