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,355 @@
|
|
|
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 pool from '../../system/pooling.js';
|
|
9
|
+
import { applyTMXProperties } from './TMXUtils.js';
|
|
10
|
+
import Tile from './TMXTile.js';
|
|
11
|
+
import { degToRad } from '../../math/math.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @classdesc
|
|
15
|
+
* a TMX Object defintion, as defined in Tiled
|
|
16
|
+
* (Object definition is translated into the virtual `me.game.world` using `me.Renderable`)
|
|
17
|
+
* @ignore
|
|
18
|
+
*/
|
|
19
|
+
class TMXObject {
|
|
20
|
+
|
|
21
|
+
constructor(map, settings, z) {
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* point list in JSON format
|
|
25
|
+
* @public
|
|
26
|
+
* @type {object[]}
|
|
27
|
+
* @name points
|
|
28
|
+
* @memberof TMXObject
|
|
29
|
+
*/
|
|
30
|
+
this.points = undefined;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* object name
|
|
34
|
+
* @public
|
|
35
|
+
* @type {string}
|
|
36
|
+
* @name name
|
|
37
|
+
* @memberof TMXObject
|
|
38
|
+
*/
|
|
39
|
+
this.name = settings.name;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* object x position
|
|
43
|
+
* @public
|
|
44
|
+
* @type {number}
|
|
45
|
+
* @name x
|
|
46
|
+
* @memberof TMXObject
|
|
47
|
+
*/
|
|
48
|
+
this.x = +settings.x;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* object y position
|
|
52
|
+
* @public
|
|
53
|
+
* @type {number}
|
|
54
|
+
* @name y
|
|
55
|
+
* @memberof TMXObject
|
|
56
|
+
*/
|
|
57
|
+
this.y = +settings.y;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* object z order
|
|
61
|
+
* @public
|
|
62
|
+
* @type {number}
|
|
63
|
+
* @name z
|
|
64
|
+
* @memberof TMXObject
|
|
65
|
+
*/
|
|
66
|
+
this.z = +z;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* object width
|
|
70
|
+
* @public
|
|
71
|
+
* @type {number}
|
|
72
|
+
* @name width
|
|
73
|
+
* @memberof TMXObject
|
|
74
|
+
*/
|
|
75
|
+
this.width = +settings.width || 0;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* object height
|
|
79
|
+
* @public
|
|
80
|
+
* @type {number}
|
|
81
|
+
* @name height
|
|
82
|
+
* @memberof TMXObject
|
|
83
|
+
*/
|
|
84
|
+
this.height = +settings.height || 0;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* object gid value
|
|
88
|
+
* when defined the object is a tiled object
|
|
89
|
+
* @public
|
|
90
|
+
* @type {number}
|
|
91
|
+
* @name gid
|
|
92
|
+
* @memberof TMXObject
|
|
93
|
+
*/
|
|
94
|
+
this.gid = +settings.gid || null;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* tint color
|
|
98
|
+
* @public
|
|
99
|
+
* @type {string}
|
|
100
|
+
* @name tintcolor
|
|
101
|
+
* @memberof TMXObject
|
|
102
|
+
*/
|
|
103
|
+
this.tintcolor = settings.tintcolor;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* object type
|
|
107
|
+
* @public
|
|
108
|
+
* @type {string}
|
|
109
|
+
* @deprecated since Tiled 1.9
|
|
110
|
+
* @see https://docs.mapeditor.org/en/stable/reference/tmx-changelog/#tiled-1-9
|
|
111
|
+
* @name type
|
|
112
|
+
* @memberof TMXObject
|
|
113
|
+
*/
|
|
114
|
+
this.type = settings.type;
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* the object class
|
|
118
|
+
* @public
|
|
119
|
+
* @type {string}
|
|
120
|
+
* @name class
|
|
121
|
+
* @memberof TMXObject
|
|
122
|
+
*/
|
|
123
|
+
this.class = typeof settings.class !== "undefined" ? settings.class : settings.type;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* object text
|
|
127
|
+
* @public
|
|
128
|
+
* @type {object}
|
|
129
|
+
* @see http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#text
|
|
130
|
+
* @name text
|
|
131
|
+
* @memberof TMXObject
|
|
132
|
+
*/
|
|
133
|
+
this.text = undefined;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The rotation of the object in radians clockwise (defaults to 0)
|
|
137
|
+
* @public
|
|
138
|
+
* @type {number}
|
|
139
|
+
* @name rotation
|
|
140
|
+
* @memberof TMXObject
|
|
141
|
+
*/
|
|
142
|
+
this.rotation = degToRad(+settings.rotation || 0);
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* object unique identifier per level (Tiled 0.11.x+)
|
|
146
|
+
* @public
|
|
147
|
+
* @type {number}
|
|
148
|
+
* @name id
|
|
149
|
+
* @memberof TMXObject
|
|
150
|
+
*/
|
|
151
|
+
this.id = +settings.id || undefined;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* object orientation (orthogonal or isometric)
|
|
155
|
+
* @public
|
|
156
|
+
* @type {string}
|
|
157
|
+
* @name orientation
|
|
158
|
+
* @memberof TMXObject
|
|
159
|
+
*/
|
|
160
|
+
this.orientation = map.orientation;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* the collision shapes defined for this object
|
|
164
|
+
* @public
|
|
165
|
+
* @type {object[]}
|
|
166
|
+
* @name shapes
|
|
167
|
+
* @memberof TMXObject
|
|
168
|
+
*/
|
|
169
|
+
this.shapes = undefined;
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* if true, the object is an Ellipse
|
|
173
|
+
* @public
|
|
174
|
+
* @type {boolean}
|
|
175
|
+
* @name isEllipse
|
|
176
|
+
* @memberof TMXObject
|
|
177
|
+
*/
|
|
178
|
+
this.isEllipse = false;
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* if true, the object is a Point
|
|
182
|
+
* @public
|
|
183
|
+
* @type {boolean}
|
|
184
|
+
* @name isPoint
|
|
185
|
+
* @memberof TMXObject
|
|
186
|
+
*/
|
|
187
|
+
this.isPoint = false;
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* if true, the object is a Polygon
|
|
191
|
+
* @public
|
|
192
|
+
* @type {boolean}
|
|
193
|
+
* @name isPolygon
|
|
194
|
+
* @memberof TMXObject
|
|
195
|
+
*/
|
|
196
|
+
this.isPolygon = false;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* if true, the object is a PolyLine
|
|
200
|
+
* @public
|
|
201
|
+
* @type {boolean}
|
|
202
|
+
* @name isPolyLine
|
|
203
|
+
* @memberof TMXObject
|
|
204
|
+
*/
|
|
205
|
+
this.isPolyLine = false;
|
|
206
|
+
|
|
207
|
+
// check if the object has an associated gid
|
|
208
|
+
if (typeof this.gid === "number") {
|
|
209
|
+
this.setTile(map.tilesets);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
if (typeof settings.ellipse !== "undefined") {
|
|
213
|
+
this.isEllipse = true;
|
|
214
|
+
} else if (typeof settings.point !== "undefined") {
|
|
215
|
+
this.isPoint = true;
|
|
216
|
+
} else if (typeof settings.polygon !== "undefined") {
|
|
217
|
+
this.points = settings.polygon;
|
|
218
|
+
this.isPolygon = true;
|
|
219
|
+
} else if (typeof settings.polyline !== "undefined") {
|
|
220
|
+
this.points = settings.polyline;
|
|
221
|
+
this.isPolyLine = true;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// check for text information
|
|
226
|
+
if (typeof settings.text !== "undefined") {
|
|
227
|
+
// a text object
|
|
228
|
+
this.text = settings.text;
|
|
229
|
+
// normalize field name and default value the melonjs way
|
|
230
|
+
this.text.font = settings.text.fontfamily || "sans-serif";
|
|
231
|
+
this.text.size = settings.text.pixelsize || 16;
|
|
232
|
+
this.text.fillStyle = settings.text.color || "#000000";
|
|
233
|
+
this.text.textAlign = settings.text.halign || "left";
|
|
234
|
+
this.text.textBaseline = settings.text.valign || "top";
|
|
235
|
+
this.text.width = this.width;
|
|
236
|
+
this.text.height = this.height;
|
|
237
|
+
// set the object properties
|
|
238
|
+
applyTMXProperties(this.text, settings);
|
|
239
|
+
} else {
|
|
240
|
+
// set the object properties
|
|
241
|
+
applyTMXProperties(this, settings);
|
|
242
|
+
// a standard object
|
|
243
|
+
if (!this.shapes) {
|
|
244
|
+
// else define the object shapes if required
|
|
245
|
+
this.shapes = this.parseTMXShapes();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Adjust the Position to match Tiled
|
|
250
|
+
if (!map.isEditor) {
|
|
251
|
+
map.getRenderer().adjustPosition(this);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* set the object image (for Tiled Object)
|
|
257
|
+
* @ignore
|
|
258
|
+
*/
|
|
259
|
+
setTile(tilesets) {
|
|
260
|
+
// get the corresponding tileset
|
|
261
|
+
var tileset = tilesets.getTilesetByGid(this.gid);
|
|
262
|
+
|
|
263
|
+
if (tileset.isCollection === false) {
|
|
264
|
+
// set width and height equal to tile size
|
|
265
|
+
this.width = this.framewidth = tileset.tilewidth;
|
|
266
|
+
this.height = this.frameheight = tileset.tileheight;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// the object corresponding tile object
|
|
270
|
+
this.tile = new Tile(this.x, this.y, this.gid, tileset);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* parses the TMX shape definition and returns a corresponding array of me.Shape object
|
|
275
|
+
* @name parseTMXShapes
|
|
276
|
+
* @memberof TMXObject
|
|
277
|
+
* @private
|
|
278
|
+
* @returns {Polygon[]|Line[]|Ellipse[]} an array of shape objects
|
|
279
|
+
*/
|
|
280
|
+
parseTMXShapes() {
|
|
281
|
+
var i = 0;
|
|
282
|
+
var shapes = [];
|
|
283
|
+
|
|
284
|
+
// add an ellipse shape
|
|
285
|
+
if (this.isEllipse === true) {
|
|
286
|
+
// ellipse coordinates are the center position, so set default to the corresonding radius
|
|
287
|
+
shapes.push((pool.pull("Ellipse",
|
|
288
|
+
this.width / 2,
|
|
289
|
+
this.height / 2,
|
|
290
|
+
this.width,
|
|
291
|
+
this.height
|
|
292
|
+
)).rotate(this.rotation));
|
|
293
|
+
} else if (this.isPoint === true) {
|
|
294
|
+
shapes.push(pool.pull("Point", this.x, this.y));
|
|
295
|
+
} else {
|
|
296
|
+
// add a polygon
|
|
297
|
+
if (this.isPolygon === true) {
|
|
298
|
+
var _polygon = pool.pull("Polygon", 0, 0, this.points);
|
|
299
|
+
// make sure it's a convex polygon
|
|
300
|
+
if (_polygon.isConvex() === false ) {
|
|
301
|
+
throw new Error("collision polygones in Tiled should be defined as Convex");
|
|
302
|
+
}
|
|
303
|
+
shapes.push(_polygon.rotate(this.rotation));
|
|
304
|
+
|
|
305
|
+
} else if (this.isPolyLine === true) {
|
|
306
|
+
var p = this.points;
|
|
307
|
+
var p1, p2;
|
|
308
|
+
var segments = p.length - 1;
|
|
309
|
+
for (i = 0; i < segments; i++) {
|
|
310
|
+
// clone the value before, as [i + 1]
|
|
311
|
+
// is reused later by the next segment
|
|
312
|
+
p1 = pool.pull("Vector2d", p[i].x, p[i].y);
|
|
313
|
+
p2 = pool.pull("Vector2d", p[i + 1].x, p[i + 1].y);
|
|
314
|
+
if (this.rotation !== 0) {
|
|
315
|
+
p1 = p1.rotate(this.rotation);
|
|
316
|
+
p2 = p2.rotate(this.rotation);
|
|
317
|
+
}
|
|
318
|
+
shapes.push(pool.pull("Line", 0, 0, [ p1, p2 ]));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// it's a rectangle, returns a polygon object anyway
|
|
323
|
+
else {
|
|
324
|
+
shapes.push((pool.pull("Polygon",
|
|
325
|
+
0, 0, [
|
|
326
|
+
pool.pull("Vector2d"), pool.pull("Vector2d", this.width, 0),
|
|
327
|
+
pool.pull("Vector2d", this.width, this.height), pool.pull("Vector2d", 0, this.height)
|
|
328
|
+
]
|
|
329
|
+
)).rotate(this.rotation));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Apply isometric projection
|
|
335
|
+
if (this.orientation === "isometric") {
|
|
336
|
+
for (i = 0; i < shapes.length; i++) {
|
|
337
|
+
if (typeof shapes[i].toIso === "function") {
|
|
338
|
+
shapes[i].toIso();
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
return shapes;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* getObjectPropertyByName
|
|
348
|
+
* @ignore
|
|
349
|
+
*/
|
|
350
|
+
getObjectPropertyByName(name) {
|
|
351
|
+
return this[name];
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
export { TMXObject as default };
|
|
@@ -0,0 +1,193 @@
|
|
|
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 Matrix2d from '../../math/matrix2.js';
|
|
9
|
+
import Sprite from '../../renderable/sprite.js';
|
|
10
|
+
import Bounds from '../../physics/bounds.js';
|
|
11
|
+
|
|
12
|
+
// bitmask constants to check for flipped & rotated tiles
|
|
13
|
+
const TMX_FLIP_H = 0x80000000,
|
|
14
|
+
TMX_FLIP_V = 0x40000000,
|
|
15
|
+
TMX_FLIP_AD = 0x20000000,
|
|
16
|
+
TMX_CLEAR_BIT_MASK = ~(0x80000000 | 0x40000000 | 0x20000000);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @classdesc
|
|
20
|
+
* a basic tile object
|
|
21
|
+
* @augments Bounds
|
|
22
|
+
*/
|
|
23
|
+
class Tile extends Bounds {
|
|
24
|
+
/**
|
|
25
|
+
* @param {number} x - x index of the Tile in the map
|
|
26
|
+
* @param {number} y - y index of the Tile in the map
|
|
27
|
+
* @param {number} gid - tile gid
|
|
28
|
+
* @param {TMXTileset} tileset - the corresponding tileset object
|
|
29
|
+
*/
|
|
30
|
+
constructor(x, y, gid, tileset) {
|
|
31
|
+
var width, height;
|
|
32
|
+
|
|
33
|
+
// call the parent constructor
|
|
34
|
+
super();
|
|
35
|
+
|
|
36
|
+
// determine the tile size
|
|
37
|
+
if (tileset.isCollection) {
|
|
38
|
+
var image = tileset.getTileImage(gid & TMX_CLEAR_BIT_MASK);
|
|
39
|
+
width = image.width;
|
|
40
|
+
height = image.height;
|
|
41
|
+
} else {
|
|
42
|
+
width = tileset.tilewidth;
|
|
43
|
+
height = tileset.tileheight;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.setMinMax(0, 0, width, height);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* tileset
|
|
50
|
+
* @public
|
|
51
|
+
* @type {TMXTileset}
|
|
52
|
+
* @name Tile#tileset
|
|
53
|
+
*/
|
|
54
|
+
this.tileset = tileset;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* the tile transformation matrix (if defined)
|
|
58
|
+
* @ignore
|
|
59
|
+
*/
|
|
60
|
+
this.currentTransform = null;
|
|
61
|
+
|
|
62
|
+
// Tile col / row pos
|
|
63
|
+
this.col = x;
|
|
64
|
+
this.row = y;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* tileId
|
|
68
|
+
* @public
|
|
69
|
+
* @type {number}
|
|
70
|
+
* @name Tile#tileId
|
|
71
|
+
*/
|
|
72
|
+
this.tileId = gid;
|
|
73
|
+
/**
|
|
74
|
+
* True if the tile is flipped horizontally<br>
|
|
75
|
+
* @public
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
* @name Tile#flipX
|
|
78
|
+
*/
|
|
79
|
+
this.flippedX = (this.tileId & TMX_FLIP_H) !== 0;
|
|
80
|
+
/**
|
|
81
|
+
* True if the tile is flipped vertically<br>
|
|
82
|
+
* @public
|
|
83
|
+
* @type {boolean}
|
|
84
|
+
* @name Tile#flippedY
|
|
85
|
+
*/
|
|
86
|
+
this.flippedY = (this.tileId & TMX_FLIP_V) !== 0;
|
|
87
|
+
/**
|
|
88
|
+
* True if the tile is flipped anti-diagonally<br>
|
|
89
|
+
* @public
|
|
90
|
+
* @type {boolean}
|
|
91
|
+
* @name Tile#flippedAD
|
|
92
|
+
*/
|
|
93
|
+
this.flippedAD = (this.tileId & TMX_FLIP_AD) !== 0;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Global flag that indicates if the tile is flipped<br>
|
|
97
|
+
* @public
|
|
98
|
+
* @type {boolean}
|
|
99
|
+
* @name Tile#flipped
|
|
100
|
+
*/
|
|
101
|
+
this.flipped = this.flippedX || this.flippedY || this.flippedAD;
|
|
102
|
+
|
|
103
|
+
// create and apply transformation matrix if required
|
|
104
|
+
if (this.flipped === true) {
|
|
105
|
+
if (this.currentTransform === null) {
|
|
106
|
+
this.currentTransform = new Matrix2d();
|
|
107
|
+
}
|
|
108
|
+
this.setTileTransform(this.currentTransform.identity());
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// clear out the flags and set the tileId
|
|
112
|
+
this.tileId &= TMX_CLEAR_BIT_MASK;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* set the transformation matrix for this tile
|
|
117
|
+
* @ignore
|
|
118
|
+
*/
|
|
119
|
+
setTileTransform(transform) {
|
|
120
|
+
transform.translate(this.width / 2, this.height / 2);
|
|
121
|
+
if (this.flippedAD) {
|
|
122
|
+
transform.rotate(-90 * Math.PI / 180);
|
|
123
|
+
transform.scale(-1, 1);
|
|
124
|
+
}
|
|
125
|
+
if (this.flippedX) {
|
|
126
|
+
transform.scale(
|
|
127
|
+
this.flippedAD ? 1 : -1, this.flippedAD ? -1 : 1
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
if (this.flippedY) {
|
|
131
|
+
transform.scale(
|
|
132
|
+
this.flippedAD ? -1 : 1, this.flippedAD ? 1 : -1
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
transform.translate(-this.width / 2, -this.height / 2);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* return a renderable object for this Tile object
|
|
140
|
+
* @name Tile#getRenderable
|
|
141
|
+
* @public
|
|
142
|
+
* @param {object} [settings] - see {@link Sprite}
|
|
143
|
+
* @returns {Renderable} a me.Sprite object
|
|
144
|
+
*/
|
|
145
|
+
getRenderable(settings) {
|
|
146
|
+
var renderable;
|
|
147
|
+
var tileset = this.tileset;
|
|
148
|
+
|
|
149
|
+
if (tileset.animations.has(this.tileId)) {
|
|
150
|
+
var frames = [];
|
|
151
|
+
var frameId = [];
|
|
152
|
+
(tileset.animations.get(this.tileId).frames).forEach((frame) => {
|
|
153
|
+
frameId.push(frame.tileid);
|
|
154
|
+
frames.push({
|
|
155
|
+
name : "" + frame.tileid,
|
|
156
|
+
delay : frame.duration
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
renderable = tileset.texture.createAnimationFromName(frameId, settings);
|
|
160
|
+
renderable.addAnimation(this.tileId - tileset.firstgid, frames);
|
|
161
|
+
renderable.setCurrentAnimation(this.tileId - tileset.firstgid);
|
|
162
|
+
|
|
163
|
+
} else {
|
|
164
|
+
if (tileset.isCollection === true) {
|
|
165
|
+
var image = tileset.getTileImage(this.tileId);
|
|
166
|
+
renderable = new Sprite(0, 0,
|
|
167
|
+
Object.assign({
|
|
168
|
+
image: image
|
|
169
|
+
})//, settings)
|
|
170
|
+
);
|
|
171
|
+
renderable.anchorPoint.set(0, 0);
|
|
172
|
+
renderable.scale((settings.width / this.width), (settings.height / this.height));
|
|
173
|
+
if (typeof settings.rotation !== "undefined") {
|
|
174
|
+
renderable.anchorPoint.set(0.5, 0.5);
|
|
175
|
+
renderable.currentTransform.rotate(settings.rotation);
|
|
176
|
+
renderable.currentTransform.translate(settings.width / 2, settings.height / 2);
|
|
177
|
+
// TODO : move the rotation related code from TMXTiledMap to here (under)
|
|
178
|
+
settings.rotation = undefined;
|
|
179
|
+
}
|
|
180
|
+
} else {
|
|
181
|
+
renderable = tileset.texture.createSpriteFromName(this.tileId - tileset.firstgid, settings);
|
|
182
|
+
renderable.anchorPoint.set(0, 0);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// any H/V flipping to apply?
|
|
187
|
+
this.setTileTransform(renderable.currentTransform);
|
|
188
|
+
|
|
189
|
+
return renderable;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export { Tile as default };
|