melonjs 14.0.1 → 14.1.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/README.md +2 -0
- package/dist/melonjs.mjs/_virtual/_commonjsHelpers.js +10 -0
- package/dist/melonjs.mjs/_virtual/arraymultimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/earcut.js +10 -0
- package/dist/melonjs.mjs/_virtual/howler.js +10 -0
- package/dist/melonjs.mjs/_virtual/index.js +10 -0
- package/dist/melonjs.mjs/_virtual/index2.js +10 -0
- package/dist/melonjs.mjs/_virtual/multimap.js +10 -0
- package/dist/melonjs.mjs/_virtual/setmultimap.js +10 -0
- package/dist/melonjs.mjs/application/application.js +240 -0
- package/dist/melonjs.mjs/audio/audio.js +536 -0
- package/dist/melonjs.mjs/camera/camera2d.js +732 -0
- package/dist/melonjs.mjs/entity/entity.js +248 -0
- package/dist/melonjs.mjs/game.js +29 -0
- package/dist/melonjs.mjs/geometries/ellipse.js +275 -0
- package/dist/melonjs.mjs/geometries/line.js +116 -0
- package/dist/melonjs.mjs/geometries/path2d.js +319 -0
- package/dist/melonjs.mjs/geometries/point.js +89 -0
- package/dist/melonjs.mjs/geometries/poly.js +500 -0
- package/dist/melonjs.mjs/geometries/rectangle.js +375 -0
- package/dist/melonjs.mjs/geometries/roundrect.js +168 -0
- package/dist/melonjs.mjs/index.js +248 -0
- package/dist/melonjs.mjs/input/gamepad.js +501 -0
- package/dist/melonjs.mjs/input/input.js +26 -0
- package/dist/melonjs.mjs/input/keyboard.js +470 -0
- package/dist/melonjs.mjs/input/pointer.js +393 -0
- package/dist/melonjs.mjs/input/pointerevent.js +818 -0
- package/dist/melonjs.mjs/lang/deprecated.js +157 -0
- package/dist/melonjs.mjs/level/level.js +297 -0
- package/dist/melonjs.mjs/level/tiled/TMXGroup.js +141 -0
- package/dist/melonjs.mjs/level/tiled/TMXLayer.js +448 -0
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +194 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +639 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +311 -0
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +83 -0
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +506 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +220 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +157 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +125 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +109 -0
- package/dist/melonjs.mjs/loader/loader.js +801 -0
- package/dist/melonjs.mjs/loader/loadingscreen.js +120 -0
- package/dist/melonjs.mjs/loader/melonjs_logo.png.js +11 -0
- package/dist/melonjs.mjs/math/color.js +618 -0
- package/dist/melonjs.mjs/math/math.js +218 -0
- package/dist/melonjs.mjs/math/matrix2.js +503 -0
- package/dist/melonjs.mjs/math/matrix3.js +681 -0
- package/dist/melonjs.mjs/math/observable_vector2.js +471 -0
- package/dist/melonjs.mjs/math/observable_vector3.js +561 -0
- package/dist/melonjs.mjs/math/vector2.js +528 -0
- package/dist/melonjs.mjs/math/vector3.js +569 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/arraymultimap.js +73 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/index.js +21 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/multimap.js +324 -0
- package/dist/melonjs.mjs/node_modules/@teppeis/multimaps/dist/src/setmultimap.js +69 -0
- package/dist/melonjs.mjs/node_modules/earcut/src/earcut.js +691 -0
- package/dist/melonjs.mjs/node_modules/eventemitter3/index.js +350 -0
- package/dist/melonjs.mjs/node_modules/howler/dist/howler.js +3241 -0
- package/dist/melonjs.mjs/particles/emitter.js +267 -0
- package/dist/melonjs.mjs/particles/particle.js +188 -0
- package/dist/melonjs.mjs/particles/settings.js +319 -0
- package/dist/melonjs.mjs/physics/body.js +704 -0
- package/dist/melonjs.mjs/physics/bounds.js +460 -0
- package/dist/melonjs.mjs/physics/collision.js +132 -0
- package/dist/melonjs.mjs/physics/detector.js +194 -0
- package/dist/melonjs.mjs/physics/quadtree.js +391 -0
- package/dist/melonjs.mjs/physics/response.js +57 -0
- package/dist/melonjs.mjs/physics/sat.js +483 -0
- package/dist/melonjs.mjs/physics/world.js +221 -0
- package/dist/melonjs.mjs/plugin/plugin.js +141 -0
- package/dist/melonjs.mjs/renderable/collectable.js +62 -0
- package/dist/melonjs.mjs/renderable/colorlayer.js +80 -0
- package/dist/melonjs.mjs/renderable/container.js +1018 -0
- package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
- package/dist/melonjs.mjs/renderable/imagelayer.js +306 -0
- package/dist/melonjs.mjs/renderable/light2d.js +156 -0
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +247 -0
- package/dist/melonjs.mjs/renderable/renderable.js +783 -0
- package/dist/melonjs.mjs/renderable/sprite.js +654 -0
- package/dist/melonjs.mjs/renderable/trigger.js +157 -0
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +213 -0
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +226 -0
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +128 -0
- package/dist/melonjs.mjs/state/stage.js +237 -0
- package/dist/melonjs.mjs/state/state.js +596 -0
- package/dist/melonjs.mjs/system/device.js +909 -0
- package/dist/melonjs.mjs/system/dom.js +78 -0
- package/dist/melonjs.mjs/system/event.js +537 -0
- package/dist/melonjs.mjs/system/platform.js +41 -0
- package/dist/melonjs.mjs/system/pooling.js +209 -0
- package/dist/melonjs.mjs/system/save.js +157 -0
- package/dist/melonjs.mjs/system/timer.js +286 -0
- package/dist/melonjs.mjs/text/bitmaptext.js +364 -0
- package/dist/melonjs.mjs/text/bitmaptextdata.js +199 -0
- package/dist/melonjs.mjs/text/glyph.js +66 -0
- package/dist/melonjs.mjs/text/text.js +453 -0
- package/dist/melonjs.mjs/text/textmetrics.js +176 -0
- package/dist/melonjs.mjs/text/textstyle.js +23 -0
- package/dist/melonjs.mjs/tweens/easing.js +336 -0
- package/dist/melonjs.mjs/tweens/interpolation.js +112 -0
- package/dist/melonjs.mjs/tweens/tween.js +480 -0
- package/dist/melonjs.mjs/utils/agent.js +76 -0
- package/dist/melonjs.mjs/utils/array.js +63 -0
- package/dist/melonjs.mjs/utils/file.js +42 -0
- package/dist/melonjs.mjs/utils/function.js +70 -0
- package/dist/melonjs.mjs/utils/string.js +82 -0
- package/dist/melonjs.mjs/utils/utils.js +173 -0
- package/dist/melonjs.mjs/video/canvas/canvas_renderer.js +807 -0
- package/dist/melonjs.mjs/video/renderer.js +411 -0
- package/dist/melonjs.mjs/video/texture/atlas.js +519 -0
- package/dist/melonjs.mjs/video/texture/cache.js +143 -0
- package/dist/melonjs.mjs/video/texture/canvas_texture.js +144 -0
- package/dist/melonjs.mjs/video/video.js +462 -0
- package/dist/melonjs.mjs/video/webgl/buffer/vertex.js +143 -0
- package/dist/melonjs.mjs/video/webgl/glshader.js +168 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/primitive.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.frag.js +10 -0
- package/dist/melonjs.mjs/video/webgl/shaders/quad.vert.js +10 -0
- package/dist/melonjs.mjs/video/webgl/utils/attributes.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/precision.js +20 -0
- package/dist/melonjs.mjs/video/webgl/utils/program.js +67 -0
- package/dist/melonjs.mjs/video/webgl/utils/string.js +25 -0
- package/dist/melonjs.mjs/video/webgl/utils/uniforms.js +92 -0
- package/dist/melonjs.mjs/video/webgl/webgl_compositor.js +495 -0
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1036 -0
- package/dist/melonjs.module.d.ts +1163 -1163
- package/dist/melonjs.module.js +1903 -3274
- package/package.json +22 -17
- package/src/application/application.js +3 -3
- package/src/audio/audio.js +32 -32
- package/src/camera/camera2d.js +31 -31
- package/src/entity/entity.js +17 -17
- package/src/geometries/ellipse.js +16 -16
- package/src/geometries/line.js +5 -5
- package/src/geometries/path2d.js +32 -32
- package/src/geometries/poly.js +15 -15
- package/src/geometries/rectangle.js +18 -18
- package/src/geometries/roundrect.js +8 -8
- package/src/input/gamepad.js +15 -15
- package/src/input/keyboard.js +12 -12
- package/src/input/pointer.js +6 -6
- package/src/input/pointerevent.js +12 -12
- package/src/lang/deprecated.js +12 -12
- package/src/level/level.js +25 -25
- package/src/level/tiled/TMXLayer.js +22 -22
- package/src/level/tiled/TMXTile.js +5 -5
- package/src/level/tiled/TMXTileMap.js +6 -6
- package/src/level/tiled/TMXTileset.js +2 -2
- package/src/level/tiled/TMXUtils.js +5 -5
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -2
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +2 -2
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +1 -1
- package/src/level/tiled/renderer/TMXRenderer.js +19 -19
- package/src/loader/loader.js +20 -20
- package/src/math/color.js +20 -20
- package/src/math/math.js +16 -16
- package/src/math/matrix2.js +16 -16
- package/src/math/matrix3.js +25 -25
- package/src/math/observable_vector2.js +14 -14
- package/src/math/observable_vector3.js +16 -16
- package/src/math/vector2.js +9 -9
- package/src/math/vector3.js +10 -10
- package/src/particles/emitter.js +6 -6
- package/src/particles/particle.js +2 -2
- package/src/physics/body.js +28 -28
- package/src/physics/bounds.js +8 -8
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +6 -6
- package/src/physics/quadtree.js +11 -11
- package/src/physics/sat.js +31 -31
- package/src/physics/world.js +5 -5
- package/src/plugin/plugin.js +5 -5
- package/src/renderable/collectable.js +3 -3
- package/src/renderable/colorlayer.js +5 -5
- package/src/renderable/container.js +21 -21
- package/src/renderable/dragndrop.js +14 -14
- package/src/renderable/imagelayer.js +13 -13
- package/src/renderable/light2d.js +3 -3
- package/src/renderable/nineslicesprite.js +16 -16
- package/src/renderable/renderable.js +23 -23
- package/src/renderable/sprite.js +28 -28
- package/src/renderable/trigger.js +15 -15
- package/src/renderable/ui/uibaseelement.js +7 -7
- package/src/renderable/ui/uispriteelement.js +6 -6
- package/src/renderable/ui/uitextbutton.js +13 -13
- package/src/state/stage.js +7 -7
- package/src/state/state.js +17 -17
- package/src/system/device.js +11 -11
- package/src/system/event.js +10 -10
- package/src/system/pooling.js +9 -9
- package/src/system/save.js +2 -2
- package/src/system/timer.js +10 -10
- package/src/text/bitmaptext.js +18 -18
- package/src/text/bitmaptextdata.js +2 -2
- package/src/text/text.js +23 -23
- package/src/text/textmetrics.js +8 -8
- package/src/tweens/tween.js +19 -19
- package/src/utils/agent.js +5 -5
- package/src/utils/array.js +4 -4
- package/src/utils/file.js +2 -2
- package/src/utils/function.js +6 -6
- package/src/utils/string.js +5 -5
- package/src/utils/utils.js +4 -4
- package/src/video/canvas/canvas_renderer.js +70 -70
- package/src/video/renderer.js +26 -26
- package/src/video/texture/atlas.js +22 -22
- package/src/video/texture/canvas_texture.js +9 -9
- package/src/video/video.js +17 -17
- package/src/video/webgl/glshader.js +10 -10
- package/src/video/webgl/webgl_compositor.js +41 -41
- package/src/video/webgl/webgl_renderer.js +75 -75
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import { TextureAtlas } from '../video/texture/atlas.js';
|
|
9
|
+
import Renderer from '../video/renderer.js';
|
|
10
|
+
import { Draggable, DropTarget } from '../renderable/dragndrop.js';
|
|
11
|
+
import UISpriteElement from '../renderable/ui/uispriteelement.js';
|
|
12
|
+
|
|
13
|
+
/*
|
|
14
|
+
* placeholder for all deprecated classes and corresponding alias for backward compatibility
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* display a deprecation warning in the console
|
|
19
|
+
* @ignore
|
|
20
|
+
* @param {string} deprecated - deprecated class,function or property name
|
|
21
|
+
* @param {string} replacement - the replacement class, function, or property name
|
|
22
|
+
* @param {string} version - the version since when the lass,function or property is deprecated
|
|
23
|
+
*/
|
|
24
|
+
function warning(deprecated, replacement, version) {
|
|
25
|
+
var msg = "melonJS: %s is deprecated since version %s, please use %s";
|
|
26
|
+
var stack = new Error().stack;
|
|
27
|
+
|
|
28
|
+
if (console.groupCollapsed) {
|
|
29
|
+
console.groupCollapsed(
|
|
30
|
+
"%c" + msg,
|
|
31
|
+
"font-weight:normal;color:yellow;",
|
|
32
|
+
deprecated,
|
|
33
|
+
version,
|
|
34
|
+
replacement
|
|
35
|
+
);
|
|
36
|
+
} else {
|
|
37
|
+
console.warn(
|
|
38
|
+
msg,
|
|
39
|
+
deprecated,
|
|
40
|
+
version,
|
|
41
|
+
replacement
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (typeof stack !== "undefined") {
|
|
46
|
+
console.warn(stack);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (console.groupCollapsed) {
|
|
50
|
+
console.groupEnd();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Alias of {@link TextureAtlas}
|
|
56
|
+
* @public
|
|
57
|
+
* @name Texture
|
|
58
|
+
* @class
|
|
59
|
+
* @memberof Renderer#
|
|
60
|
+
* @deprecated since 10.4.0
|
|
61
|
+
* @see TextureAtlas
|
|
62
|
+
*/
|
|
63
|
+
Object.defineProperty(Renderer.prototype, "Texture", {
|
|
64
|
+
/**
|
|
65
|
+
* @ignore
|
|
66
|
+
*/
|
|
67
|
+
get : function () {
|
|
68
|
+
warning("me.video.renderer.Texture", "me.TextureAtlas", "10.4.0");
|
|
69
|
+
return TextureAtlas;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @classdesc
|
|
75
|
+
* Used to make a game entity draggable
|
|
76
|
+
* @augments Entity
|
|
77
|
+
* @deprecated since 10.5.0
|
|
78
|
+
* @see Draggable
|
|
79
|
+
*/
|
|
80
|
+
class DraggableEntity extends Draggable {
|
|
81
|
+
/**
|
|
82
|
+
* @param {number} x - the x coordinates of the draggable object
|
|
83
|
+
* @param {number} y - the y coordinates of the draggable object
|
|
84
|
+
* @param {object} settings - Entity properties (see {@link Entity})
|
|
85
|
+
*/
|
|
86
|
+
constructor(x, y, settings) {
|
|
87
|
+
warning("DraggableEntity", "Draggable", "10.5.0");
|
|
88
|
+
super(x, y, settings.width, settings.height);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @classdesc
|
|
94
|
+
* Used to make a game entity a droptarget
|
|
95
|
+
* @augments Entity
|
|
96
|
+
* @deprecated since 10.5.0
|
|
97
|
+
* @see DropTarget
|
|
98
|
+
*/
|
|
99
|
+
class DroptargetEntity extends DropTarget {
|
|
100
|
+
/**
|
|
101
|
+
* @param {number} x - the x coordinates of the draggable object
|
|
102
|
+
* @param {number} y - the y coordinates of the draggable object
|
|
103
|
+
* @param {object} settings - Entity properties (see {@link Entity})
|
|
104
|
+
*/
|
|
105
|
+
constructor(x, y, settings) {
|
|
106
|
+
warning("DroptargetEntity", "DropTarget", "10.5.0");
|
|
107
|
+
super(x, y, settings.width, settings.height);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* return a reference to the screen canvas
|
|
113
|
+
* @name getScreenCanvas
|
|
114
|
+
* @memberof Renderer
|
|
115
|
+
* @returns {HTMLCanvasElement}
|
|
116
|
+
* @deprecated since 13.1.0
|
|
117
|
+
* @see getCanvas();
|
|
118
|
+
*/
|
|
119
|
+
Renderer.prototype.getScreenCanvas = function() {
|
|
120
|
+
warning("getScreenCanvas", "getCanvas", "13.1.0");
|
|
121
|
+
return this.getCanvas();
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* return a reference to the screen canvas corresponding 2d Context<br>
|
|
126
|
+
* (will return buffered context if double buffering is enabled, or a reference to the Screen Context)
|
|
127
|
+
* @name getScreenContext
|
|
128
|
+
* @memberof Renderer
|
|
129
|
+
* @returns {CanvasRenderingContext2D}
|
|
130
|
+
* @deprecated since 13.1.0
|
|
131
|
+
* @see getContext();
|
|
132
|
+
*/
|
|
133
|
+
Renderer.prototype.getScreenContext = function() {
|
|
134
|
+
warning("getScreenContext", "getContext", "13.1.0");
|
|
135
|
+
return this.getContext();
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @classdesc
|
|
140
|
+
* A very basic object to manage GUI elements
|
|
141
|
+
* @augments Sprite
|
|
142
|
+
* @deprecated since 14.0.0
|
|
143
|
+
* @see UISpriteElement
|
|
144
|
+
*/
|
|
145
|
+
class GUI_Object extends UISpriteElement {
|
|
146
|
+
/**
|
|
147
|
+
* @param {number} x - the x coordinate of the GUI Object
|
|
148
|
+
* @param {number} y - the y coordinate of the GUI Object
|
|
149
|
+
* @param {object} settings - See {@link Sprite}
|
|
150
|
+
*/
|
|
151
|
+
constructor(x, y, settings) {
|
|
152
|
+
warning("GUI_Object", "UISpriteElement", "14.0.0");
|
|
153
|
+
super(x, y, settings);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export { DraggableEntity, DroptargetEntity, GUI_Object, warning };
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import utils from '../utils/utils.js';
|
|
9
|
+
import { emit, LEVEL_LOADED } from '../system/event.js';
|
|
10
|
+
import state from '../state/state.js';
|
|
11
|
+
import loader from '../loader/loader.js';
|
|
12
|
+
import game from '../game.js';
|
|
13
|
+
import TMXTileMap from './tiled/TMXTileMap.js';
|
|
14
|
+
|
|
15
|
+
// our levels
|
|
16
|
+
var levels = {};
|
|
17
|
+
// level index table
|
|
18
|
+
var levelIdx = [];
|
|
19
|
+
// current level index
|
|
20
|
+
var currentLevelIdx = 0;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @ignore
|
|
24
|
+
*/
|
|
25
|
+
function safeLoadLevel(levelId, options, restart) {
|
|
26
|
+
// clean the destination container
|
|
27
|
+
options.container.reset();
|
|
28
|
+
|
|
29
|
+
// reset the renderer
|
|
30
|
+
game.reset();
|
|
31
|
+
|
|
32
|
+
// clean the current (previous) level
|
|
33
|
+
if (levels[level.getCurrentLevelId()]) {
|
|
34
|
+
levels[level.getCurrentLevelId()].destroy();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// update current level index
|
|
38
|
+
currentLevelIdx = levelIdx.indexOf(levelId);
|
|
39
|
+
|
|
40
|
+
// add the specified level to the game world
|
|
41
|
+
loadTMXLevel(levelId, options.container, options.flatten, options.setViewportBounds);
|
|
42
|
+
|
|
43
|
+
// publish the corresponding message
|
|
44
|
+
emit(LEVEL_LOADED, levelId);
|
|
45
|
+
|
|
46
|
+
// fire the callback
|
|
47
|
+
options.onLoaded(levelId);
|
|
48
|
+
|
|
49
|
+
if (restart) {
|
|
50
|
+
// resume the game loop if it was previously running
|
|
51
|
+
state.restart();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Load a TMX level
|
|
57
|
+
* @name loadTMXLevel
|
|
58
|
+
* @memberof level
|
|
59
|
+
* @private
|
|
60
|
+
* @param {string} levelId - level id
|
|
61
|
+
* @param {Container} container - target container
|
|
62
|
+
* @param {boolean} [flatten=true] - if true, flatten all objects into the given container
|
|
63
|
+
* @param {boolean} [setViewportBounds=false] - if true, set the viewport bounds to the map size, this should be set to true especially if adding a level to the game world container.
|
|
64
|
+
* @ignore
|
|
65
|
+
*/
|
|
66
|
+
function loadTMXLevel(levelId, container, flatten, setViewportBounds) {
|
|
67
|
+
var level = levels[levelId];
|
|
68
|
+
|
|
69
|
+
// reset the GUID generator
|
|
70
|
+
// and pass the level id as parameter
|
|
71
|
+
utils.resetGUID(levelId, level.nextobjectid);
|
|
72
|
+
|
|
73
|
+
// Tiled use 0,0 anchor coordinates
|
|
74
|
+
container.anchorPoint.set(0, 0);
|
|
75
|
+
|
|
76
|
+
// add all level elements to the target container
|
|
77
|
+
level.addTo(container, flatten, setViewportBounds);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* a level manager. once ressources loaded, the level manager contains all references of defined levels.
|
|
83
|
+
* @namespace level
|
|
84
|
+
*/
|
|
85
|
+
|
|
86
|
+
var level = {
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* add a level into the game manager (usually called by the preloader)
|
|
90
|
+
* @name add
|
|
91
|
+
* @memberof level
|
|
92
|
+
* @public
|
|
93
|
+
* @param {string} format - level format (only "tmx" supported)
|
|
94
|
+
* @param {string} levelId - the level id (or name)
|
|
95
|
+
* @param {Function} [callback] - a function to be called once the level is loaded
|
|
96
|
+
* @returns {boolean} true if the level was loaded
|
|
97
|
+
*/
|
|
98
|
+
add(format, levelId, callback) {
|
|
99
|
+
switch (format) {
|
|
100
|
+
case "tmx" :
|
|
101
|
+
// just load the level with the XML stuff
|
|
102
|
+
if (levels[levelId] == null) {
|
|
103
|
+
//console.log("loading "+ levelId);
|
|
104
|
+
levels[levelId] = new TMXTileMap(levelId, loader.getTMX(levelId));
|
|
105
|
+
// level index
|
|
106
|
+
levelIdx.push(levelId);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
//console.log("level %s already loaded", levelId);
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// call the callback if defined
|
|
114
|
+
if (callback) {
|
|
115
|
+
callback();
|
|
116
|
+
}
|
|
117
|
+
// true if level loaded
|
|
118
|
+
return true;
|
|
119
|
+
|
|
120
|
+
default :
|
|
121
|
+
throw new Error("no level loader defined for format " + format);
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* load a level into the game manager<br>
|
|
127
|
+
* (will also create all level defined entities, etc..)
|
|
128
|
+
* @name load
|
|
129
|
+
* @memberof level
|
|
130
|
+
* @public
|
|
131
|
+
* @param {string} levelId - level id
|
|
132
|
+
* @param {object} [options] - additional optional parameters
|
|
133
|
+
* @param {Container} [options.container=game.world] - container in which to load the specified level
|
|
134
|
+
* @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
|
|
135
|
+
* @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
|
|
136
|
+
* @param {boolean} [options.setViewportBounds=true] - if true, set the viewport bounds to the map size
|
|
137
|
+
* @returns {boolean} true if the level was successfully loaded
|
|
138
|
+
* @example
|
|
139
|
+
* // the game assets to be be preloaded
|
|
140
|
+
* // TMX maps
|
|
141
|
+
* var resources = [
|
|
142
|
+
* {name: "a4_level1", type: "tmx", src: "data/level/a4_level1.tmx"},
|
|
143
|
+
* {name: "a4_level2", type: "tmx", src: "data/level/a4_level2.tmx"},
|
|
144
|
+
* {name: "a4_level3", type: "tmx", src: "data/level/a4_level3.tmx"},
|
|
145
|
+
* // ...
|
|
146
|
+
* ];
|
|
147
|
+
*
|
|
148
|
+
* // ...
|
|
149
|
+
*
|
|
150
|
+
* // load a level into the game world
|
|
151
|
+
* me.level.load("a4_level1");
|
|
152
|
+
* ...
|
|
153
|
+
* ...
|
|
154
|
+
* // load a level into a specific container
|
|
155
|
+
* var levelContainer = new me.Container();
|
|
156
|
+
* me.level.load("a4_level2", {container:levelContainer});
|
|
157
|
+
* // add a simple transformation
|
|
158
|
+
* levelContainer.currentTransform.translate(levelContainer.width / 2, levelContainer.height / 2 );
|
|
159
|
+
* levelContainer.currentTransform.rotate(0.05);
|
|
160
|
+
* levelContainer.currentTransform.translate(-levelContainer.width / 2, -levelContainer.height / 2 );
|
|
161
|
+
* // add it to the game world
|
|
162
|
+
* me.game.world.addChild(levelContainer);
|
|
163
|
+
*/
|
|
164
|
+
load(levelId, options) {
|
|
165
|
+
options = Object.assign({
|
|
166
|
+
"container" : game.world,
|
|
167
|
+
"onLoaded" : game.onLevelLoaded,
|
|
168
|
+
"flatten" : game.mergeGroup,
|
|
169
|
+
"setViewportBounds" : true
|
|
170
|
+
}, options || {});
|
|
171
|
+
|
|
172
|
+
// throw an exception if not existing
|
|
173
|
+
if (typeof(levels[levelId]) === "undefined") {
|
|
174
|
+
throw new Error("level " + levelId + " not found");
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (levels[levelId] instanceof TMXTileMap) {
|
|
178
|
+
|
|
179
|
+
// check the status of the state mngr
|
|
180
|
+
var wasRunning = state.isRunning();
|
|
181
|
+
|
|
182
|
+
if (wasRunning) {
|
|
183
|
+
// stop the game loop to avoid
|
|
184
|
+
// some silly side effects
|
|
185
|
+
state.stop();
|
|
186
|
+
|
|
187
|
+
utils.function.defer(safeLoadLevel, this, levelId, options, true);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
safeLoadLevel(levelId, options);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
throw new Error("no level loader defined");
|
|
195
|
+
}
|
|
196
|
+
return true;
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* return the current level id<br>
|
|
201
|
+
* @name getCurrentLevelId
|
|
202
|
+
* @memberof level
|
|
203
|
+
* @public
|
|
204
|
+
* @returns {string}
|
|
205
|
+
*/
|
|
206
|
+
getCurrentLevelId() {
|
|
207
|
+
return levelIdx[currentLevelIdx];
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* return the current level definition.
|
|
212
|
+
* for a reference to the live instantiated level,
|
|
213
|
+
* rather use the container in which it was loaded (e.g. me.game.world)
|
|
214
|
+
* @name getCurrentLevel
|
|
215
|
+
* @memberof level
|
|
216
|
+
* @public
|
|
217
|
+
* @returns {TMXTileMap}
|
|
218
|
+
*/
|
|
219
|
+
getCurrentLevel() {
|
|
220
|
+
return levels[this.getCurrentLevelId()];
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* reload the current level
|
|
225
|
+
* @name reload
|
|
226
|
+
* @memberof level
|
|
227
|
+
* @public
|
|
228
|
+
* @param {object} [options] - additional optional parameters
|
|
229
|
+
* @param {Container} [options.container=game.world] - container in which to load the specified level
|
|
230
|
+
* @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
|
|
231
|
+
* @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
|
|
232
|
+
* @returns {object} the current level
|
|
233
|
+
*/
|
|
234
|
+
reload(options) {
|
|
235
|
+
// reset the level to initial state
|
|
236
|
+
//levels[currentLevel].reset();
|
|
237
|
+
return this.load(this.getCurrentLevelId(), options);
|
|
238
|
+
},
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* load the next level
|
|
242
|
+
* @name next
|
|
243
|
+
* @memberof level
|
|
244
|
+
* @public
|
|
245
|
+
* @param {object} [options] - additional optional parameters
|
|
246
|
+
* @param {Container} [options.container=game.world] - container in which to load the specified level
|
|
247
|
+
* @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
|
|
248
|
+
* @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
|
|
249
|
+
* @returns {boolean} true if the next level was successfully loaded
|
|
250
|
+
*/
|
|
251
|
+
next(options) {
|
|
252
|
+
//go to the next level
|
|
253
|
+
if (currentLevelIdx + 1 < levelIdx.length) {
|
|
254
|
+
return this.load(levelIdx[currentLevelIdx + 1], options);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
},
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* load the previous level<br>
|
|
263
|
+
* @name previous
|
|
264
|
+
* @memberof level
|
|
265
|
+
* @public
|
|
266
|
+
* @param {object} [options] - additional optional parameters
|
|
267
|
+
* @param {Container} [options.container=game.world] - container in which to load the specified level
|
|
268
|
+
* @param {Function} [options.onLoaded=game.onLevelLoaded] - callback for when the level is fully loaded
|
|
269
|
+
* @param {boolean} [options.flatten=game.mergeGroup] - if true, flatten all objects into the given container
|
|
270
|
+
* @returns {boolean} true if the previous level was successfully loaded
|
|
271
|
+
*/
|
|
272
|
+
previous(options) {
|
|
273
|
+
// go to previous level
|
|
274
|
+
if (currentLevelIdx - 1 >= 0) {
|
|
275
|
+
return this.load(levelIdx[currentLevelIdx - 1], options);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
},
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* return the amount of level preloaded
|
|
284
|
+
* @name levelCount
|
|
285
|
+
* @memberof level
|
|
286
|
+
* @public
|
|
287
|
+
* @returns {number} the amount of level preloaded
|
|
288
|
+
*/
|
|
289
|
+
levelCount() {
|
|
290
|
+
return levelIdx.length;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
var level$1 = level;
|
|
296
|
+
|
|
297
|
+
export { level$1 as default };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import { applyTMXProperties } from './TMXUtils.js';
|
|
9
|
+
import TMXObject from './TMXObject.js';
|
|
10
|
+
import TMXLayer from './TMXLayer.js';
|
|
11
|
+
import { clamp } from '../../math/math.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @classdesc
|
|
15
|
+
* object group definition as defined in Tiled.
|
|
16
|
+
* (group definition is translated into the virtual `me.game.world` using `me.Container`)
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
class TMXGroup {
|
|
20
|
+
|
|
21
|
+
constructor(map, data, z) {
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* group name
|
|
25
|
+
* @public
|
|
26
|
+
* @type {string}
|
|
27
|
+
* @name name
|
|
28
|
+
* @memberof TMXGroup
|
|
29
|
+
*/
|
|
30
|
+
this.name = data.name;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* group width
|
|
34
|
+
* @public
|
|
35
|
+
* @type {number}
|
|
36
|
+
* @name width
|
|
37
|
+
* @memberof TMXGroup
|
|
38
|
+
*/
|
|
39
|
+
this.width = data.width || 0;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* group height
|
|
43
|
+
* @public
|
|
44
|
+
* @type {number}
|
|
45
|
+
* @name height
|
|
46
|
+
* @memberof TMXGroup
|
|
47
|
+
*/
|
|
48
|
+
this.height = data.height || 0;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* tint color
|
|
52
|
+
* @public
|
|
53
|
+
* @type {string}
|
|
54
|
+
* @name tintcolor
|
|
55
|
+
* @memberof TMXGroup
|
|
56
|
+
*/
|
|
57
|
+
this.tintcolor = data.tintcolor;
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* the group class
|
|
62
|
+
* @public
|
|
63
|
+
* @type {string}
|
|
64
|
+
* @name class
|
|
65
|
+
* @memberof TMXGroup
|
|
66
|
+
*/
|
|
67
|
+
this.class = data.class;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* group z order
|
|
71
|
+
* @public
|
|
72
|
+
* @type {number}
|
|
73
|
+
* @name z
|
|
74
|
+
* @memberof TMXGroup
|
|
75
|
+
*/
|
|
76
|
+
this.z = z;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* group objects list definition
|
|
80
|
+
* @see TMXObject
|
|
81
|
+
* @public
|
|
82
|
+
* @type {object[]}
|
|
83
|
+
* @name name
|
|
84
|
+
* @memberof TMXGroup
|
|
85
|
+
*/
|
|
86
|
+
this.objects = [];
|
|
87
|
+
|
|
88
|
+
var visible = typeof(data.visible) !== "undefined" ? data.visible : true;
|
|
89
|
+
this.opacity = (visible === true) ? clamp(+data.opacity || 1.0, 0.0, 1.0) : 0;
|
|
90
|
+
|
|
91
|
+
// check if we have any user-defined properties
|
|
92
|
+
applyTMXProperties(this, data);
|
|
93
|
+
|
|
94
|
+
// parse all child objects/layers
|
|
95
|
+
if (data.objects) {
|
|
96
|
+
data.objects.forEach((object) => {
|
|
97
|
+
object.tintcolor = this.tintcolor;
|
|
98
|
+
this.objects.push(new TMXObject(map, object, z));
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (data.layers) {
|
|
103
|
+
data.layers.forEach((data) => {
|
|
104
|
+
var layer = new TMXLayer(map, data, map.tilewidth, map.tileheight, map.orientation, map.tilesets, z++);
|
|
105
|
+
// set a renderer
|
|
106
|
+
layer.setRenderer(map.getRenderer());
|
|
107
|
+
// resize container accordingly
|
|
108
|
+
this.width = Math.max(this.width, layer.width);
|
|
109
|
+
this.height = Math.max(this.height, layer.height);
|
|
110
|
+
this.objects.push(layer);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* reset function
|
|
117
|
+
* @ignore
|
|
118
|
+
*/
|
|
119
|
+
destroy() {
|
|
120
|
+
// clear all allocated objects
|
|
121
|
+
this.objects = null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* return the object count
|
|
126
|
+
* @ignore
|
|
127
|
+
*/
|
|
128
|
+
getObjectCount() {
|
|
129
|
+
return this.objects.length;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* returns the object at the specified index
|
|
134
|
+
* @ignore
|
|
135
|
+
*/
|
|
136
|
+
getObjectByIndex(idx) {
|
|
137
|
+
return this.objects[idx];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export { TMXGroup as default };
|