melonjs 14.0.2 → 14.1.1
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 +238 -0
- package/dist/melonjs.mjs/audio/audio.js +536 -0
- package/dist/melonjs.mjs/camera/camera2d.js +731 -0
- package/dist/melonjs.mjs/entity/entity.js +247 -0
- package/dist/melonjs.mjs/game.js +29 -0
- package/dist/melonjs.mjs/geometries/ellipse.js +274 -0
- package/dist/melonjs.mjs/geometries/line.js +115 -0
- package/dist/melonjs.mjs/geometries/path2d.js +318 -0
- package/dist/melonjs.mjs/geometries/point.js +88 -0
- package/dist/melonjs.mjs/geometries/poly.js +498 -0
- package/dist/melonjs.mjs/geometries/rectangle.js +374 -0
- package/dist/melonjs.mjs/geometries/roundrect.js +167 -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 +446 -0
- package/dist/melonjs.mjs/level/tiled/TMXObject.js +355 -0
- package/dist/melonjs.mjs/level/tiled/TMXTile.js +193 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileMap.js +636 -0
- package/dist/melonjs.mjs/level/tiled/TMXTileset.js +309 -0
- package/dist/melonjs.mjs/level/tiled/TMXTilesetGroup.js +81 -0
- package/dist/melonjs.mjs/level/tiled/TMXUtils.js +367 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXHexagonalRenderer.js +504 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXIsometricRenderer.js +218 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXOrthogonalRenderer.js +155 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXRenderer.js +124 -0
- package/dist/melonjs.mjs/level/tiled/renderer/TMXStaggeredRenderer.js +107 -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 +616 -0
- package/dist/melonjs.mjs/math/math.js +218 -0
- package/dist/melonjs.mjs/math/matrix2.js +501 -0
- package/dist/melonjs.mjs/math/matrix3.js +679 -0
- package/dist/melonjs.mjs/math/observable_vector2.js +469 -0
- package/dist/melonjs.mjs/math/observable_vector3.js +559 -0
- package/dist/melonjs.mjs/math/vector2.js +526 -0
- package/dist/melonjs.mjs/math/vector3.js +567 -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 +265 -0
- package/dist/melonjs.mjs/particles/particle.js +186 -0
- package/dist/melonjs.mjs/particles/settings.js +319 -0
- package/dist/melonjs.mjs/physics/body.js +702 -0
- package/dist/melonjs.mjs/physics/bounds.js +459 -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 +394 -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 +219 -0
- package/dist/melonjs.mjs/plugin/plugin.js +141 -0
- package/dist/melonjs.mjs/renderable/collectable.js +60 -0
- package/dist/melonjs.mjs/renderable/colorlayer.js +78 -0
- package/dist/melonjs.mjs/renderable/container.js +1016 -0
- package/dist/melonjs.mjs/renderable/dragndrop.js +224 -0
- package/dist/melonjs.mjs/renderable/imagelayer.js +305 -0
- package/dist/melonjs.mjs/renderable/light2d.js +155 -0
- package/dist/melonjs.mjs/renderable/nineslicesprite.js +246 -0
- package/dist/melonjs.mjs/renderable/renderable.js +781 -0
- package/dist/melonjs.mjs/renderable/sprite.js +653 -0
- package/dist/melonjs.mjs/renderable/trigger.js +156 -0
- package/dist/melonjs.mjs/renderable/ui/uibaseelement.js +212 -0
- package/dist/melonjs.mjs/renderable/ui/uispriteelement.js +225 -0
- package/dist/melonjs.mjs/renderable/ui/uitextbutton.js +127 -0
- package/dist/melonjs.mjs/state/stage.js +236 -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 +363 -0
- package/dist/melonjs.mjs/text/bitmaptextdata.js +198 -0
- package/dist/melonjs.mjs/text/glyph.js +65 -0
- package/dist/melonjs.mjs/text/text.js +452 -0
- package/dist/melonjs.mjs/text/textmetrics.js +175 -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 +479 -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 +806 -0
- package/dist/melonjs.mjs/video/renderer.js +410 -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 +142 -0
- package/dist/melonjs.mjs/video/webgl/glshader.js +167 -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 +494 -0
- package/dist/melonjs.mjs/video/webgl/webgl_renderer.js +1035 -0
- package/dist/melonjs.module.d.ts +1298 -1359
- package/dist/melonjs.module.js +2072 -3520
- package/package.json +21 -16
- package/src/application/application.js +4 -5
- package/src/audio/audio.js +32 -32
- package/src/camera/camera2d.js +32 -33
- package/src/entity/entity.js +18 -19
- package/src/geometries/ellipse.js +17 -18
- package/src/geometries/line.js +6 -7
- package/src/geometries/path2d.js +33 -34
- package/src/geometries/point.js +1 -2
- package/src/geometries/poly.js +16 -18
- package/src/geometries/rectangle.js +19 -20
- package/src/geometries/roundrect.js +9 -10
- 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 +23 -24
- package/src/level/tiled/TMXTile.js +6 -7
- package/src/level/tiled/TMXTileMap.js +8 -10
- package/src/level/tiled/TMXTileset.js +3 -4
- package/src/level/tiled/TMXTilesetGroup.js +1 -2
- package/src/level/tiled/TMXUtils.js +5 -5
- package/src/level/tiled/renderer/TMXHexagonalRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXIsometricRenderer.js +3 -4
- package/src/level/tiled/renderer/TMXOrthogonalRenderer.js +2 -3
- package/src/level/tiled/renderer/TMXRenderer.js +20 -21
- package/src/level/tiled/renderer/TMXStaggeredRenderer.js +1 -2
- package/src/loader/loader.js +20 -20
- package/src/math/color.js +21 -22
- package/src/math/math.js +16 -16
- package/src/math/matrix2.js +17 -18
- package/src/math/matrix3.js +26 -27
- package/src/math/observable_vector2.js +15 -16
- package/src/math/observable_vector3.js +17 -18
- package/src/math/vector2.js +10 -11
- package/src/math/vector3.js +11 -12
- package/src/particles/emitter.js +7 -8
- package/src/particles/particle.js +3 -4
- package/src/physics/body.js +29 -30
- package/src/physics/bounds.js +10 -10
- package/src/physics/collision.js +2 -2
- package/src/physics/detector.js +6 -6
- package/src/physics/quadtree.js +18 -23
- package/src/physics/sat.js +31 -31
- package/src/physics/world.js +6 -7
- package/src/plugin/plugin.js +5 -5
- package/src/renderable/collectable.js +4 -6
- package/src/renderable/colorlayer.js +6 -8
- package/src/renderable/container.js +25 -27
- package/src/renderable/dragndrop.js +14 -14
- package/src/renderable/imagelayer.js +14 -15
- package/src/renderable/light2d.js +4 -5
- package/src/renderable/nineslicesprite.js +17 -18
- package/src/renderable/renderable.js +26 -28
- package/src/renderable/sprite.js +29 -30
- package/src/renderable/trigger.js +16 -17
- package/src/renderable/ui/uibaseelement.js +8 -9
- package/src/renderable/ui/uispriteelement.js +8 -8
- package/src/renderable/ui/uitextbutton.js +15 -15
- package/src/state/stage.js +8 -9
- 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 +19 -20
- package/src/text/bitmaptextdata.js +3 -4
- package/src/text/glyph.js +1 -2
- package/src/text/text.js +24 -25
- package/src/text/textmetrics.js +9 -10
- package/src/tweens/tween.js +20 -21
- 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 +72 -73
- package/src/video/renderer.js +27 -28
- 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/buffer/vertex.js +1 -2
- package/src/video/webgl/glshader.js +12 -12
- package/src/video/webgl/webgl_compositor.js +42 -43
- package/src/video/webgl/webgl_renderer.js +76 -77
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.1
|
|
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 Vector2d from '../../math/vector2.js';
|
|
9
|
+
import { renderer } from '../../video/video.js';
|
|
10
|
+
import { getExtension, getBasename } from '../../utils/file.js';
|
|
11
|
+
import timer from '../../system/timer.js';
|
|
12
|
+
import loader from '../../loader/loader.js';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @classdesc
|
|
16
|
+
* a TMX Tile Set Object
|
|
17
|
+
*/
|
|
18
|
+
class TMXTileset {
|
|
19
|
+
/**
|
|
20
|
+
* @param {object} tileset - tileset data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#tileset})
|
|
21
|
+
*/
|
|
22
|
+
constructor(tileset) {
|
|
23
|
+
var i = 0;
|
|
24
|
+
// first gid
|
|
25
|
+
|
|
26
|
+
// tile properties (collidable, etc..)
|
|
27
|
+
this.TileProperties = [];
|
|
28
|
+
|
|
29
|
+
// hold reference to each tile image
|
|
30
|
+
this.imageCollection = [];
|
|
31
|
+
|
|
32
|
+
this.firstgid = this.lastgid = +tileset.firstgid;
|
|
33
|
+
|
|
34
|
+
// check if an external tileset is defined
|
|
35
|
+
if (typeof(tileset.source) !== "undefined") {
|
|
36
|
+
var src = tileset.source;
|
|
37
|
+
var ext = getExtension(src);
|
|
38
|
+
if (ext === "tsx" || ext === "json") {
|
|
39
|
+
// load the external tileset (TSX/JSON)
|
|
40
|
+
tileset = loader.getTMX(getBasename(src));
|
|
41
|
+
if (!tileset) {
|
|
42
|
+
throw new Error(src + " external TSX/JSON tileset not found");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this.name = tileset.name;
|
|
48
|
+
this.tilewidth = +tileset.tilewidth;
|
|
49
|
+
this.tileheight = +tileset.tileheight;
|
|
50
|
+
this.spacing = +tileset.spacing || 0;
|
|
51
|
+
this.margin = +tileset.margin || 0;
|
|
52
|
+
|
|
53
|
+
// set tile offset properties (if any)
|
|
54
|
+
this.tileoffset = new Vector2d();
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Tileset contains animated tiles
|
|
58
|
+
* @public
|
|
59
|
+
* @type {boolean}
|
|
60
|
+
* @name TMXTileset#isAnimated
|
|
61
|
+
*/
|
|
62
|
+
this.isAnimated = false;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* true if the tileset is a "Collection of Image" Tileset
|
|
66
|
+
* @public
|
|
67
|
+
* @type {boolean}
|
|
68
|
+
* @name TMXTileset#isCollection
|
|
69
|
+
*/
|
|
70
|
+
this.isCollection = false;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* the tileset class
|
|
74
|
+
* @public
|
|
75
|
+
* @type {boolean}
|
|
76
|
+
* @name TMXTileset#class
|
|
77
|
+
*/
|
|
78
|
+
this.class = tileset.class;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Tileset animations
|
|
82
|
+
* @private
|
|
83
|
+
*/
|
|
84
|
+
this.animations = new Map();
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Remember the last update timestamp to prevent too many animation updates
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
this._lastUpdate = 0;
|
|
91
|
+
|
|
92
|
+
var tiles = tileset.tiles;
|
|
93
|
+
for (i in tiles) {
|
|
94
|
+
if (tiles.hasOwnProperty(i)) {
|
|
95
|
+
if ("animation" in tiles[i]) {
|
|
96
|
+
this.isAnimated = true;
|
|
97
|
+
this.animations.set(tiles[+i].animation[0].tileid, {
|
|
98
|
+
dt : 0,
|
|
99
|
+
idx : 0,
|
|
100
|
+
frames : tiles[+i].animation,
|
|
101
|
+
cur : tiles[+i].animation[0]
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
// set tile properties, if any
|
|
105
|
+
if ("properties" in tiles[i]) {
|
|
106
|
+
if (Array.isArray(tiles[i].properties)) { // JSON (new format)
|
|
107
|
+
var tileProperty = {};
|
|
108
|
+
for (var j in tiles[i].properties) {
|
|
109
|
+
tileProperty[tiles[i].properties[j].name] = tiles[i].properties[j].value;
|
|
110
|
+
}
|
|
111
|
+
this.setTileProperty(+tiles[i].id + this.firstgid, tileProperty);
|
|
112
|
+
} else { // XML format
|
|
113
|
+
this.setTileProperty(+i + this.firstgid, tiles[i].properties);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if ("image" in tiles[i]) {
|
|
117
|
+
var image = loader.getImage(tiles[i].image);
|
|
118
|
+
if (!image) {
|
|
119
|
+
throw new Error("melonJS: '" + tiles[i].image + "' file for tile '" + (+i + this.firstgid) + "' not found!");
|
|
120
|
+
}
|
|
121
|
+
this.imageCollection[+i + this.firstgid] = image;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
this.isCollection = this.imageCollection.length > 0;
|
|
127
|
+
|
|
128
|
+
var offset = tileset.tileoffset;
|
|
129
|
+
if (offset) {
|
|
130
|
+
this.tileoffset.x = +offset.x;
|
|
131
|
+
this.tileoffset.y = +offset.y;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// set tile properties, if any (JSON old format)
|
|
135
|
+
var tileInfo = tileset.tileproperties;
|
|
136
|
+
if (tileInfo) {
|
|
137
|
+
for (i in tileInfo) {
|
|
138
|
+
if (tileInfo.hasOwnProperty(i)) {
|
|
139
|
+
this.setTileProperty(+i + this.firstgid, tileInfo[i]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// if not a tile image collection
|
|
145
|
+
if (this.isCollection === false) {
|
|
146
|
+
|
|
147
|
+
// get the global tileset texture
|
|
148
|
+
this.image = loader.getImage(tileset.image);
|
|
149
|
+
|
|
150
|
+
if (!this.image) {
|
|
151
|
+
throw new Error("melonJS: '" + tileset.image + "' file for tileset '" + this.name + "' not found!");
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// create a texture atlas for the given tileset
|
|
155
|
+
this.texture = renderer.cache.get(this.image, {
|
|
156
|
+
framewidth : this.tilewidth,
|
|
157
|
+
frameheight : this.tileheight,
|
|
158
|
+
margin : this.margin,
|
|
159
|
+
spacing : this.spacing
|
|
160
|
+
});
|
|
161
|
+
this.atlas = this.texture.getAtlas();
|
|
162
|
+
|
|
163
|
+
// calculate the number of tiles per horizontal line
|
|
164
|
+
var hTileCount = +tileset.columns || Math.round(this.image.width / (this.tilewidth + this.spacing));
|
|
165
|
+
var vTileCount = Math.round(this.image.height / (this.tileheight + this.spacing));
|
|
166
|
+
if (tileset.tilecount % hTileCount > 0) {
|
|
167
|
+
++vTileCount;
|
|
168
|
+
}
|
|
169
|
+
// compute the last gid value in the tileset
|
|
170
|
+
this.lastgid = this.firstgid + (((hTileCount * vTileCount) - 1) || 0);
|
|
171
|
+
if (tileset.tilecount && this.lastgid - this.firstgid + 1 !== +tileset.tilecount) {
|
|
172
|
+
console.warn(
|
|
173
|
+
"Computed tilecount (" + (this.lastgid - this.firstgid + 1) +
|
|
174
|
+
") does not match expected tilecount (" + tileset.tilecount + ")"
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* return the tile image from a "Collection of Image" tileset
|
|
182
|
+
* @name TMXTileset#getTileImage
|
|
183
|
+
* @public
|
|
184
|
+
* @param {number} gid
|
|
185
|
+
* @returns {Image} corresponding image or undefined
|
|
186
|
+
*/
|
|
187
|
+
getTileImage(gid) {
|
|
188
|
+
return this.imageCollection[gid];
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* set the tile properties
|
|
194
|
+
* @ignore
|
|
195
|
+
*/
|
|
196
|
+
setTileProperty(gid, prop) {
|
|
197
|
+
// set the given tile id
|
|
198
|
+
this.TileProperties[gid] = prop;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* return true if the gid belongs to the tileset
|
|
203
|
+
* @name TMXTileset#contains
|
|
204
|
+
* @public
|
|
205
|
+
* @param {number} gid
|
|
206
|
+
* @returns {boolean}
|
|
207
|
+
*/
|
|
208
|
+
contains(gid) {
|
|
209
|
+
return gid >= this.firstgid && gid <= this.lastgid;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Get the view (local) tile ID from a GID, with animations applied
|
|
214
|
+
* @name TMXTileset#getViewTileId
|
|
215
|
+
* @public
|
|
216
|
+
* @param {number} gid - Global tile ID
|
|
217
|
+
* @returns {number} View tile ID
|
|
218
|
+
*/
|
|
219
|
+
getViewTileId(gid) {
|
|
220
|
+
var localId = gid - this.firstgid;
|
|
221
|
+
|
|
222
|
+
if (this.animations.has(localId)) {
|
|
223
|
+
// return the current corresponding tile id if animated
|
|
224
|
+
return this.animations.get(localId).cur.tileid;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
return localId;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* return the properties of the specified tile
|
|
232
|
+
* @name TMXTileset#getTileProperties
|
|
233
|
+
* @public
|
|
234
|
+
* @param {number} tileId
|
|
235
|
+
* @returns {object}
|
|
236
|
+
*/
|
|
237
|
+
getTileProperties(tileId) {
|
|
238
|
+
return this.TileProperties[tileId];
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// update tile animations
|
|
242
|
+
update(dt) {
|
|
243
|
+
var duration = 0,
|
|
244
|
+
now = timer.getTime(),
|
|
245
|
+
result = false;
|
|
246
|
+
|
|
247
|
+
if (this._lastUpdate !== now) {
|
|
248
|
+
this._lastUpdate = now;
|
|
249
|
+
|
|
250
|
+
this.animations.forEach((anim) => {
|
|
251
|
+
anim.dt += dt;
|
|
252
|
+
duration = anim.cur.duration;
|
|
253
|
+
while (anim.dt >= duration) {
|
|
254
|
+
anim.dt -= duration;
|
|
255
|
+
anim.idx = (anim.idx + 1) % anim.frames.length;
|
|
256
|
+
anim.cur = anim.frames[anim.idx];
|
|
257
|
+
duration = anim.cur.duration;
|
|
258
|
+
result = true;
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// draw the x,y tile
|
|
267
|
+
drawTile(renderer, dx, dy, tmxTile) {
|
|
268
|
+
|
|
269
|
+
// check if any transformation is required
|
|
270
|
+
if (tmxTile.flipped) {
|
|
271
|
+
renderer.save();
|
|
272
|
+
// apply the tile current transform
|
|
273
|
+
renderer.translate(dx, dy);
|
|
274
|
+
renderer.transform(tmxTile.currentTransform);
|
|
275
|
+
// reset both values as managed through transform();
|
|
276
|
+
dx = dy = 0;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// check if the tile has an associated image
|
|
280
|
+
if (this.isCollection === true) {
|
|
281
|
+
// draw the tile
|
|
282
|
+
renderer.drawImage(
|
|
283
|
+
this.imageCollection[tmxTile.tileId],
|
|
284
|
+
0, 0,
|
|
285
|
+
tmxTile.width, tmxTile.height,
|
|
286
|
+
dx, dy,
|
|
287
|
+
tmxTile.width, tmxTile.height
|
|
288
|
+
);
|
|
289
|
+
} else {
|
|
290
|
+
// use the tileset texture
|
|
291
|
+
var offset = this.atlas[this.getViewTileId(tmxTile.tileId)].offset;
|
|
292
|
+
// draw the tile
|
|
293
|
+
renderer.drawImage(
|
|
294
|
+
this.image,
|
|
295
|
+
offset.x, offset.y,
|
|
296
|
+
this.tilewidth, this.tileheight,
|
|
297
|
+
dx, dy,
|
|
298
|
+
this.tilewidth + renderer.uvOffset, this.tileheight + renderer.uvOffset
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
if (tmxTile.flipped) {
|
|
303
|
+
// restore the context to the previous state
|
|
304
|
+
renderer.restore();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
export { TMXTileset as default };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.1
|
|
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
|
+
// bitmask constants to check for flipped & rotated tiles
|
|
9
|
+
const TMX_CLEAR_BIT_MASK = ~(0x80000000 | 0x40000000 | 0x20000000);
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @classdesc
|
|
13
|
+
* an object containing all tileset
|
|
14
|
+
*/
|
|
15
|
+
class TMXTilesetGroup {
|
|
16
|
+
|
|
17
|
+
constructor() {
|
|
18
|
+
this.tilesets = [];
|
|
19
|
+
this.length = 0;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* add a tileset to the tileset group
|
|
24
|
+
* @name TMXTilesetGroup#add
|
|
25
|
+
* @public
|
|
26
|
+
* @param {TMXTileset} tileset
|
|
27
|
+
*/
|
|
28
|
+
add(tileset) {
|
|
29
|
+
this.tilesets.push(tileset);
|
|
30
|
+
this.length++;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* return the tileset at the specified index
|
|
35
|
+
* @name TMXTilesetGroup#getTilesetByIndex
|
|
36
|
+
* @public
|
|
37
|
+
* @param {number} i
|
|
38
|
+
* @returns {TMXTileset} corresponding tileset
|
|
39
|
+
*/
|
|
40
|
+
getTilesetByIndex(i) {
|
|
41
|
+
return this.tilesets[i];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* return the tileset corresponding to the specified id <br>
|
|
46
|
+
* will throw an exception if no matching tileset is found
|
|
47
|
+
* @name TMXTilesetGroup#getTilesetByGid
|
|
48
|
+
* @public
|
|
49
|
+
* @param {number} gid
|
|
50
|
+
* @returns {TMXTileset} corresponding tileset
|
|
51
|
+
*/
|
|
52
|
+
getTilesetByGid(gid) {
|
|
53
|
+
var invalidRange = -1;
|
|
54
|
+
|
|
55
|
+
// clear the gid of all flip/rotation flags
|
|
56
|
+
gid &= TMX_CLEAR_BIT_MASK;
|
|
57
|
+
|
|
58
|
+
// cycle through all tilesets
|
|
59
|
+
for (var i = 0, len = this.tilesets.length; i < len; i++) {
|
|
60
|
+
// return the corresponding tileset if matching
|
|
61
|
+
if (this.tilesets[i].contains(gid)) {
|
|
62
|
+
return this.tilesets[i];
|
|
63
|
+
}
|
|
64
|
+
// typically indicates a layer with no asset loaded (collision?)
|
|
65
|
+
if (this.tilesets[i].firstgid === this.tilesets[i].lastgid &&
|
|
66
|
+
gid >= this.tilesets[i].firstgid) {
|
|
67
|
+
// store the id if the [firstgid .. lastgid] is invalid
|
|
68
|
+
invalidRange = i;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// return the tileset with the invalid range
|
|
72
|
+
if (invalidRange !== -1) {
|
|
73
|
+
return this.tilesets[invalidRange];
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
throw new Error("no matching tileset found for gid " + gid);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export { TMXTilesetGroup as default };
|