melonjs 14.0.2 → 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,448 @@
|
|
|
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 { createCanvas } from '../../video/video.js';
|
|
9
|
+
import pool from '../../system/pooling.js';
|
|
10
|
+
import { applyTMXProperties, decode } from './TMXUtils.js';
|
|
11
|
+
import Tile from './TMXTile.js';
|
|
12
|
+
import Renderable from '../../renderable/renderable.js';
|
|
13
|
+
import CanvasRenderer from '../../video/canvas/canvas_renderer.js';
|
|
14
|
+
import game from '../../game.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create required arrays for the given layer object
|
|
18
|
+
* @ignore
|
|
19
|
+
*/
|
|
20
|
+
function initArray(layer) {
|
|
21
|
+
// initialize the array
|
|
22
|
+
layer.layerData = new Array(layer.cols);
|
|
23
|
+
for (var x = 0; x < layer.cols; x++) {
|
|
24
|
+
layer.layerData[x] = new Array(layer.rows);
|
|
25
|
+
for (var y = 0; y < layer.rows; y++) {
|
|
26
|
+
layer.layerData[x][y] = null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Set a tiled layer Data
|
|
33
|
+
* @ignore
|
|
34
|
+
*/
|
|
35
|
+
function setLayerData(layer, data) {
|
|
36
|
+
var idx = 0;
|
|
37
|
+
// initialize the data array
|
|
38
|
+
initArray(layer);
|
|
39
|
+
// set everything
|
|
40
|
+
for (var y = 0; y < layer.rows; y++) {
|
|
41
|
+
for (var x = 0; x < layer.cols; x++) {
|
|
42
|
+
// get the value of the gid
|
|
43
|
+
var gid = data[idx++];
|
|
44
|
+
// fill the array
|
|
45
|
+
if (gid !== 0) {
|
|
46
|
+
// add a new tile to the layer
|
|
47
|
+
layer.layerData[x][y] = layer.getTileById(gid, x, y);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* preRender a tile layer using the given renderer
|
|
55
|
+
* @ignore
|
|
56
|
+
*/
|
|
57
|
+
function preRenderLayer(layer, renderer) {
|
|
58
|
+
// set everything
|
|
59
|
+
for (var y = 0; y < layer.rows; y++) {
|
|
60
|
+
for (var x = 0; x < layer.cols; x++) {
|
|
61
|
+
// get the value of the gid
|
|
62
|
+
var tile = layer.layerData[x][y];
|
|
63
|
+
// draw the tile if defined
|
|
64
|
+
if (tile instanceof Tile) {
|
|
65
|
+
// add a new tile to the layer
|
|
66
|
+
layer.getRenderer().drawTile(renderer, x, y, tile);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @classdesc
|
|
74
|
+
* a TMX Tile Layer Object
|
|
75
|
+
* Tiled QT 0.7.x format
|
|
76
|
+
* @augments Renderable
|
|
77
|
+
*/
|
|
78
|
+
class TMXLayer extends Renderable {
|
|
79
|
+
/**
|
|
80
|
+
* @param {object} map - layer data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#layer})
|
|
81
|
+
* @param {object} data - layer data in JSON format ({@link http://docs.mapeditor.org/en/stable/reference/tmx-map-format/#layer})
|
|
82
|
+
* @param {number} tilewidth - width of each tile in pixels
|
|
83
|
+
* @param {number} tileheight - height of each tile in pixels
|
|
84
|
+
* @param {string} orientation - "isometric" or "orthogonal"
|
|
85
|
+
* @param {TMXTilesetGroup} tilesets - tileset as defined in Tiled
|
|
86
|
+
* @param {number} z - z-index position
|
|
87
|
+
*/
|
|
88
|
+
constructor(map, data, tilewidth, tileheight, orientation, tilesets, z) {
|
|
89
|
+
// super constructor
|
|
90
|
+
super(0, 0, 0, 0);
|
|
91
|
+
|
|
92
|
+
// tile width & height
|
|
93
|
+
this.tilewidth = data.tilewidth || tilewidth;
|
|
94
|
+
this.tileheight = data.tileheight || tileheight;
|
|
95
|
+
|
|
96
|
+
// layer orientation
|
|
97
|
+
this.orientation = orientation;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The Layer corresponding Tilesets
|
|
101
|
+
* @public
|
|
102
|
+
* @type {TMXTilesetGroup}
|
|
103
|
+
* @name TMXLayer#tilesets
|
|
104
|
+
*/
|
|
105
|
+
this.tilesets = tilesets;
|
|
106
|
+
|
|
107
|
+
// the default tileset
|
|
108
|
+
// XXX: Is this even used?
|
|
109
|
+
this.tileset = (this.tilesets ? this.tilesets.getTilesetByIndex(0) : null);
|
|
110
|
+
|
|
111
|
+
// Biggest tile size to draw
|
|
112
|
+
this.maxTileSize = {
|
|
113
|
+
"width" : 0,
|
|
114
|
+
"height" : 0
|
|
115
|
+
};
|
|
116
|
+
for (var i = 0; i < this.tilesets.length; i++) {
|
|
117
|
+
var tileset = this.tilesets.getTilesetByIndex(i);
|
|
118
|
+
this.maxTileSize.width = Math.max(this.maxTileSize.width, tileset.tilewidth);
|
|
119
|
+
this.maxTileSize.height = Math.max(this.maxTileSize.height, tileset.tileheight);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* All animated tilesets in this layer
|
|
124
|
+
* @ignore
|
|
125
|
+
* @type {TMXTileset[]}
|
|
126
|
+
* @name TMXLayer#animatedTilesets
|
|
127
|
+
*/
|
|
128
|
+
this.animatedTilesets = [];
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Layer contains tileset animations
|
|
132
|
+
* @public
|
|
133
|
+
* @type {boolean}
|
|
134
|
+
* @name TMXLayer#isAnimated
|
|
135
|
+
*/
|
|
136
|
+
this.isAnimated = false;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* the order in which tiles on orthogonal tile layers are rendered.
|
|
140
|
+
* (valid values are "left-down", "left-up", "right-down", "right-up")
|
|
141
|
+
* @public
|
|
142
|
+
* @type {string}
|
|
143
|
+
* @default "right-down"
|
|
144
|
+
* @name TMXLayer#renderorder
|
|
145
|
+
*/
|
|
146
|
+
this.renderorder = data.renderorder || "right-down";
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* the layer class
|
|
150
|
+
* @public
|
|
151
|
+
* @type {string}
|
|
152
|
+
* @name class
|
|
153
|
+
* @name TMXLayer#class
|
|
154
|
+
*/
|
|
155
|
+
this.class = data.class;
|
|
156
|
+
|
|
157
|
+
// for displaying order
|
|
158
|
+
this.pos.z = z;
|
|
159
|
+
|
|
160
|
+
// tiled default coordinates are top-left
|
|
161
|
+
this.anchorPoint.set(0, 0);
|
|
162
|
+
|
|
163
|
+
// additional TMX flags
|
|
164
|
+
this.name = data.name;
|
|
165
|
+
this.cols = +data.width;
|
|
166
|
+
this.rows = +data.height;
|
|
167
|
+
|
|
168
|
+
// layer opacity
|
|
169
|
+
var visible = typeof(data.visible) !== "undefined" ? +data.visible : 1;
|
|
170
|
+
this.setOpacity(visible ? +data.opacity : 0);
|
|
171
|
+
|
|
172
|
+
// layer tint
|
|
173
|
+
if (typeof data.tintcolor === "string") {
|
|
174
|
+
// Tiled provides #RRGGBB or #AARRGGBB
|
|
175
|
+
this.tint.parseHex(data.tintcolor, true);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// layer "real" size
|
|
179
|
+
if (this.orientation === "isometric") {
|
|
180
|
+
this.width = (this.cols + this.rows) * (this.tilewidth / 2);
|
|
181
|
+
this.height = (this.cols + this.rows) * (this.tileheight / 2);
|
|
182
|
+
} else {
|
|
183
|
+
this.width = this.cols * this.tilewidth;
|
|
184
|
+
this.height = this.rows * this.tileheight;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// check if we have any user-defined properties
|
|
188
|
+
applyTMXProperties(this, data);
|
|
189
|
+
|
|
190
|
+
// check for the correct rendering method
|
|
191
|
+
if (typeof (this.preRender) === "undefined") {
|
|
192
|
+
this.preRender = game.world.preRender;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// set a renderer
|
|
196
|
+
this.setRenderer(map.getRenderer());
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
// initialize and set the layer data
|
|
200
|
+
setLayerData(this,
|
|
201
|
+
decode(
|
|
202
|
+
data.data,
|
|
203
|
+
data.encoding,
|
|
204
|
+
data.compression
|
|
205
|
+
)
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
// called when the layer is added to the game world or a container
|
|
211
|
+
onActivateEvent() {
|
|
212
|
+
|
|
213
|
+
if (this.animatedTilesets === undefined) {
|
|
214
|
+
this.animatedTilesets = [];
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (this.tilesets) {
|
|
218
|
+
var tileset = this.tilesets.tilesets;
|
|
219
|
+
for (var i = 0; i < tileset.length; i++) {
|
|
220
|
+
if (tileset[i].isAnimated) {
|
|
221
|
+
this.animatedTilesets.push(tileset[i]);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
this.isAnimated = this.animatedTilesets.length > 0;
|
|
227
|
+
|
|
228
|
+
// Force pre-render off when tileset animation is used
|
|
229
|
+
if (this.isAnimated) {
|
|
230
|
+
this.preRender = false;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Resize the bounding rect
|
|
234
|
+
this.getBounds().addBounds(this.getRenderer().getBounds(), true);
|
|
235
|
+
this.getBounds().shift(this.pos);
|
|
236
|
+
|
|
237
|
+
// if pre-rendering method is use, create an offline canvas/renderer
|
|
238
|
+
if ((this.preRender === true) && (!this.canvasRenderer)) {
|
|
239
|
+
this.canvasRenderer = new CanvasRenderer({
|
|
240
|
+
canvas : createCanvas(this.width, this.height),
|
|
241
|
+
widht : this.width,
|
|
242
|
+
heigth : this.height,
|
|
243
|
+
transparent : true
|
|
244
|
+
});
|
|
245
|
+
preRenderLayer(this, this.canvasRenderer);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// called when the layer is removed from the game world or a container
|
|
250
|
+
onDeactivateEvent() {
|
|
251
|
+
// clear all allocated objects
|
|
252
|
+
//this.layerData = undefined;
|
|
253
|
+
this.animatedTilesets = undefined;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Set the TMX renderer for this layer object
|
|
258
|
+
* @name setRenderer
|
|
259
|
+
* @memberof TMXLayer
|
|
260
|
+
* @public
|
|
261
|
+
* @param {TMXRenderer} renderer
|
|
262
|
+
* @example
|
|
263
|
+
* // use the parent map default renderer
|
|
264
|
+
* var layer = new me.TMXLayer(...);
|
|
265
|
+
* layer.setRenderer(map.getRenderer());
|
|
266
|
+
*/
|
|
267
|
+
setRenderer(renderer) {
|
|
268
|
+
this.renderer = renderer;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* Return the layer current renderer object
|
|
273
|
+
* @name getRenderer
|
|
274
|
+
* @memberof TMXLayer
|
|
275
|
+
* @public
|
|
276
|
+
* @returns {TMXRenderer} renderer
|
|
277
|
+
*/
|
|
278
|
+
getRenderer() {
|
|
279
|
+
return this.renderer;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Return the TileId of the Tile at the specified position
|
|
285
|
+
* @name getTileId
|
|
286
|
+
* @memberof TMXLayer
|
|
287
|
+
* @public
|
|
288
|
+
* @param {number} x - X coordinate (in world/pixels coordinates)
|
|
289
|
+
* @param {number} y - Y coordinate (in world/pixels coordinates)
|
|
290
|
+
* @returns {number} TileId or null if there is no Tile at the given position
|
|
291
|
+
*/
|
|
292
|
+
getTileId(x, y) {
|
|
293
|
+
var tile = this.getTile(x, y);
|
|
294
|
+
return (tile ? tile.tileId : null);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Return the Tile object at the specified position
|
|
299
|
+
* @name getTile
|
|
300
|
+
* @memberof TMXLayer
|
|
301
|
+
* @public
|
|
302
|
+
* @param {number} x - X coordinate (in world/pixels coordinates)
|
|
303
|
+
* @param {number} y - Y coordinate (in world/pixels coordinates)
|
|
304
|
+
* @returns {Tile} corresponding tile or null if there is no defined tile at the coordinate or if outside of the layer bounds
|
|
305
|
+
* @example
|
|
306
|
+
* // get the TMX Map Layer called "Front layer"
|
|
307
|
+
* var layer = me.game.world.getChildByName("Front Layer")[0];
|
|
308
|
+
* // get the tile object corresponding to the latest pointer position
|
|
309
|
+
* var tile = layer.getTile(me.input.pointer.x, me.input.pointer.y);
|
|
310
|
+
*/
|
|
311
|
+
getTile(x, y) {
|
|
312
|
+
var tile = null;
|
|
313
|
+
|
|
314
|
+
if (this.contains(x, y)) {
|
|
315
|
+
var coord = this.getRenderer().pixelToTileCoords(x, y, pool.pull("Vector2d"));
|
|
316
|
+
tile = this.cellAt(coord.x, coord.y);
|
|
317
|
+
pool.push(coord);
|
|
318
|
+
}
|
|
319
|
+
return tile;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* assign the given Tile object to the specified position
|
|
324
|
+
* @name getTile
|
|
325
|
+
* @memberof TMXLayer
|
|
326
|
+
* @public
|
|
327
|
+
* @param {Tile} tile - the tile object to be assigned
|
|
328
|
+
* @param {number} x - x coordinate (in world/pixels coordinates)
|
|
329
|
+
* @param {number} y - y coordinate (in world/pixels coordinates)
|
|
330
|
+
* @returns {Tile} the tile object
|
|
331
|
+
*/
|
|
332
|
+
setTile(tile, x, y) {
|
|
333
|
+
this.layerData[x][y] = tile;
|
|
334
|
+
return tile;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* return a new the Tile object corresponding to the given tile id
|
|
339
|
+
* @name setTile
|
|
340
|
+
* @memberof TMXLayer
|
|
341
|
+
* @public
|
|
342
|
+
* @param {number} tileId - tileId
|
|
343
|
+
* @param {number} x - X coordinate (in world/pixels coordinates)
|
|
344
|
+
* @param {number} y - Y coordinate (in world/pixels coordinates)
|
|
345
|
+
* @returns {Tile} the tile object
|
|
346
|
+
*/
|
|
347
|
+
getTileById(tileId, x, y) {
|
|
348
|
+
if (!this.tileset.contains(tileId)) {
|
|
349
|
+
// look for the corresponding tileset
|
|
350
|
+
this.tileset = this.tilesets.getTilesetByGid(tileId);
|
|
351
|
+
}
|
|
352
|
+
return new Tile(x, y, tileId, this.tileset);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* Return the Tile object at the specified tile coordinates
|
|
357
|
+
* @name cellAt
|
|
358
|
+
* @memberof TMXLayer
|
|
359
|
+
* @public
|
|
360
|
+
* @param {number} x - x position of the tile (in Tile unit)
|
|
361
|
+
* @param {number} y - x position of the tile (in Tile unit)
|
|
362
|
+
* @param {number} [boundsCheck=true] - check first if within the layer bounds
|
|
363
|
+
* @returns {Tile} corresponding tile or null if there is no defined tile at the position or if outside of the layer bounds
|
|
364
|
+
* @example
|
|
365
|
+
* // return the first tile at offset 0, 0
|
|
366
|
+
* var tile = layer.cellAt(0, 0);
|
|
367
|
+
*/
|
|
368
|
+
cellAt(x, y, boundsCheck) {
|
|
369
|
+
var _x = ~~x;
|
|
370
|
+
var _y = ~~y;
|
|
371
|
+
|
|
372
|
+
var renderer = this.getRenderer();
|
|
373
|
+
// boundsCheck only used internally by the tiled renderer, when the layer bound check was already done
|
|
374
|
+
if (boundsCheck === false || (_x >= 0 && _x < renderer.cols && _y >= 0 && _y < renderer.rows)) {
|
|
375
|
+
return this.layerData[_x][_y];
|
|
376
|
+
} else {
|
|
377
|
+
return null;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* clear the tile at the specified position
|
|
383
|
+
* @name clearTile
|
|
384
|
+
* @memberof TMXLayer
|
|
385
|
+
* @public
|
|
386
|
+
* @param {number} x - X coordinate (in map coordinates: row/column)
|
|
387
|
+
* @param {number} y - Y coordinate (in map coordinates: row/column)
|
|
388
|
+
* @example
|
|
389
|
+
* me.game.world.getChildByType(me.TMXLayer).forEach(function(layer) {
|
|
390
|
+
* // clear all tiles at the given x,y coordinates
|
|
391
|
+
* layer.clearTile(x, y);
|
|
392
|
+
* });
|
|
393
|
+
*/
|
|
394
|
+
clearTile(x, y) {
|
|
395
|
+
// clearing tile
|
|
396
|
+
this.layerData[x][y] = null;
|
|
397
|
+
// erase the corresponding area in the canvas
|
|
398
|
+
if (this.preRender) {
|
|
399
|
+
this.canvasRenderer.clearRect(x * this.tilewidth, y * this.tileheight, this.tilewidth, this.tileheight);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* update animations in a tileset layer
|
|
405
|
+
* @ignore
|
|
406
|
+
*/
|
|
407
|
+
update(dt) {
|
|
408
|
+
if (this.isAnimated) {
|
|
409
|
+
var result = false;
|
|
410
|
+
for (var i = 0; i < this.animatedTilesets.length; i++) {
|
|
411
|
+
result = this.animatedTilesets[i].update(dt) || result;
|
|
412
|
+
}
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* draw a tileset layer
|
|
421
|
+
* @ignore
|
|
422
|
+
*/
|
|
423
|
+
draw(renderer, rect) {
|
|
424
|
+
// use the offscreen canvas
|
|
425
|
+
if (this.preRender) {
|
|
426
|
+
var width = Math.min(rect.width, this.width);
|
|
427
|
+
var height = Math.min(rect.height, this.height);
|
|
428
|
+
|
|
429
|
+
// draw using the cached canvas
|
|
430
|
+
renderer.drawImage(
|
|
431
|
+
this.canvasRenderer.getCanvas(),
|
|
432
|
+
rect.pos.x, rect.pos.y, // sx,sy
|
|
433
|
+
width, height, // sw,sh
|
|
434
|
+
rect.pos.x, rect.pos.y, // dx,dy
|
|
435
|
+
width, height // dw,dh
|
|
436
|
+
);
|
|
437
|
+
}
|
|
438
|
+
// dynamically render the layer
|
|
439
|
+
else {
|
|
440
|
+
// draw the layer
|
|
441
|
+
this.getRenderer().drawTileLayer(renderer, this, rect);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
var TMXLayer$1 = TMXLayer;
|
|
447
|
+
|
|
448
|
+
export { TMXLayer$1 as default };
|