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,504 @@
|
|
|
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 pool from '../../../system/pooling.js';
|
|
10
|
+
import TMXRenderer from './TMXRenderer.js';
|
|
11
|
+
import TMXLayer from '../TMXLayer.js';
|
|
12
|
+
|
|
13
|
+
// scope global var & constants
|
|
14
|
+
const offsetsStaggerX = [
|
|
15
|
+
{x: 0, y: 0},
|
|
16
|
+
{x: + 1, y: - 1},
|
|
17
|
+
{x: + 1, y: 0},
|
|
18
|
+
{x: + 2, y: 0}
|
|
19
|
+
];
|
|
20
|
+
const offsetsStaggerY = [
|
|
21
|
+
{x: 0, y: 0},
|
|
22
|
+
{x: - 1, y: + 1},
|
|
23
|
+
{x: 0, y: + 1},
|
|
24
|
+
{x: 0, y: + 2}
|
|
25
|
+
];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @classdesc
|
|
29
|
+
* an Hexagonal Map Renderder
|
|
30
|
+
* @augments TMXRenderer
|
|
31
|
+
*/
|
|
32
|
+
class TMXHexagonalRenderer extends TMXRenderer {
|
|
33
|
+
/**
|
|
34
|
+
* @param {TMXTileMap} map - the TMX map
|
|
35
|
+
*/
|
|
36
|
+
constructor(map) {
|
|
37
|
+
super(
|
|
38
|
+
map.cols,
|
|
39
|
+
map.rows,
|
|
40
|
+
map.tilewidth & ~1,
|
|
41
|
+
map.tileheight & ~1
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
this.hexsidelength = map.hexsidelength || 0;
|
|
45
|
+
this.staggerX = map.staggeraxis === "x";
|
|
46
|
+
this.staggerEven = map.staggerindex === "even";
|
|
47
|
+
|
|
48
|
+
this.sidelengthx = 0;
|
|
49
|
+
this.sidelengthy = 0;
|
|
50
|
+
|
|
51
|
+
if (map.orientation === "hexagonal") {
|
|
52
|
+
if (this.staggerX) {
|
|
53
|
+
this.sidelengthx = this.hexsidelength;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.sidelengthy = this.hexsidelength;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this.sideoffsetx = (this.tilewidth - this.sidelengthx) / 2;
|
|
61
|
+
this.sideoffsety = (this.tileheight - this.sidelengthy) / 2;
|
|
62
|
+
|
|
63
|
+
this.columnwidth = this.sideoffsetx + this.sidelengthx;
|
|
64
|
+
this.rowheight = this.sideoffsety + this.sidelengthy;
|
|
65
|
+
|
|
66
|
+
this.centers = [
|
|
67
|
+
new Vector2d(),
|
|
68
|
+
new Vector2d(),
|
|
69
|
+
new Vector2d(),
|
|
70
|
+
new Vector2d()
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* return true if the renderer can render the specified layer
|
|
76
|
+
* @ignore
|
|
77
|
+
*/
|
|
78
|
+
canRender(layer) {
|
|
79
|
+
return (
|
|
80
|
+
(layer.orientation === "hexagonal") &&
|
|
81
|
+
super.canRender(layer)
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* return the bounding rect for this map renderer
|
|
87
|
+
* @name TMXHexagonalRenderer#getBounds
|
|
88
|
+
* @public
|
|
89
|
+
* @param {TMXLayer} [layer] - calculate the bounding rect for a specific layer (will return a new bounds object)
|
|
90
|
+
* @returns {Bounds}
|
|
91
|
+
*/
|
|
92
|
+
getBounds(layer) {
|
|
93
|
+
var bounds = layer instanceof TMXLayer ? pool.pull("Bounds") : this.bounds;
|
|
94
|
+
|
|
95
|
+
// The map size is the same regardless of which indexes are shifted.
|
|
96
|
+
if (this.staggerX) {
|
|
97
|
+
bounds.setMinMax(
|
|
98
|
+
0, 0,
|
|
99
|
+
this.cols * this.columnwidth + this.sideoffsetx,
|
|
100
|
+
this.rows * (this.tileheight + this.sidelengthy)
|
|
101
|
+
);
|
|
102
|
+
if (bounds.width > 1) {
|
|
103
|
+
bounds.height += this.rowheight;
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
bounds.setMinMax(
|
|
107
|
+
0, 0,
|
|
108
|
+
this.cols * (this.tilewidth + this.sidelengthx),
|
|
109
|
+
this.rows * this.rowheight + this.sideoffsety
|
|
110
|
+
);
|
|
111
|
+
if (bounds.height > 1) {
|
|
112
|
+
bounds.width += this.columnwidth;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return bounds;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @ignore
|
|
120
|
+
*/
|
|
121
|
+
doStaggerX (x) {
|
|
122
|
+
return this.staggerX && (x & 1) ^ this.staggerEven;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @ignore
|
|
127
|
+
*/
|
|
128
|
+
doStaggerY(y) {
|
|
129
|
+
return !this.staggerX && (y & 1) ^ this.staggerEven;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @ignore
|
|
134
|
+
*/
|
|
135
|
+
topLeft(x, y, v) {
|
|
136
|
+
var ret = v || new Vector2d();
|
|
137
|
+
|
|
138
|
+
if (!this.staggerX) {
|
|
139
|
+
if ((y & 1) ^ this.staggerEven) {
|
|
140
|
+
ret.set(x, y - 1);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
ret.set(x - 1, y - 1);
|
|
144
|
+
}
|
|
145
|
+
} else {
|
|
146
|
+
if ((x & 1) ^ this.staggerEven) {
|
|
147
|
+
ret.set(x - 1, y);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
ret.set(x - 1, y - 1);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return ret;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* @ignore
|
|
158
|
+
*/
|
|
159
|
+
topRight(x, y, v) {
|
|
160
|
+
var ret = v || new Vector2d();
|
|
161
|
+
|
|
162
|
+
if (!this.staggerX) {
|
|
163
|
+
if ((y & 1) ^ this.staggerEven) {
|
|
164
|
+
ret.set(x + 1, y - 1);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
ret.set(x, y - 1);
|
|
168
|
+
}
|
|
169
|
+
} else {
|
|
170
|
+
if ((x & 1) ^ this.staggerEven) {
|
|
171
|
+
ret.set(x + 1, y);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
ret.set(x + 1, y - 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return ret;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @ignore
|
|
183
|
+
*/
|
|
184
|
+
bottomLeft(x, y, v) {
|
|
185
|
+
var ret = v || new Vector2d();
|
|
186
|
+
|
|
187
|
+
if (!this.staggerX) {
|
|
188
|
+
if ((y & 1) ^ this.staggerEven) {
|
|
189
|
+
ret.set(x, y + 1);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
ret.set(x - 1, y + 1);
|
|
193
|
+
}
|
|
194
|
+
} else {
|
|
195
|
+
if ((x & 1) ^ this.staggerEven) {
|
|
196
|
+
ret.set(x -1, y + 1);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
ret.set(x -1, y);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return ret;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @ignore
|
|
207
|
+
*/
|
|
208
|
+
bottomRight(x, y, v) {
|
|
209
|
+
var ret = v || new Vector2d();
|
|
210
|
+
|
|
211
|
+
if (!this.staggerX) {
|
|
212
|
+
if ((y & 1) ^ this.staggerEven) {
|
|
213
|
+
ret.set(x + 1, y + 1);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
ret.set(x, y + 1);
|
|
217
|
+
}
|
|
218
|
+
} else {
|
|
219
|
+
if ((x & 1) ^ this.staggerEven) {
|
|
220
|
+
ret.set(x + 1, y + 1);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
ret.set(x + 1, y);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return ret;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* return the tile position corresponding to the specified pixel
|
|
231
|
+
* @ignore
|
|
232
|
+
*/
|
|
233
|
+
pixelToTileCoords(x, y, v) {
|
|
234
|
+
var ret = v || new Vector2d();
|
|
235
|
+
|
|
236
|
+
if (this.staggerX) { //flat top
|
|
237
|
+
x -= this.staggerEven ? this.tilewidth : this.sideoffsetx;
|
|
238
|
+
}
|
|
239
|
+
else { //pointy top
|
|
240
|
+
y -= this.staggerEven ? this.tileheight : this.sideoffsety;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Start with the coordinates of a grid-aligned tile
|
|
244
|
+
var referencePoint = pool.pull("Vector2d",
|
|
245
|
+
Math.floor(x / (this.columnwidth * 2)),
|
|
246
|
+
Math.floor((y / (this.rowheight * 2)))
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
// Relative x and y position on the base square of the grid-aligned tile
|
|
250
|
+
var rel = pool.pull("Vector2d",
|
|
251
|
+
x - referencePoint.x * (this.columnwidth * 2),
|
|
252
|
+
y - referencePoint.y * (this.rowheight * 2)
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
// Adjust the reference point to the correct tile coordinates
|
|
256
|
+
if (this.staggerX) {
|
|
257
|
+
referencePoint.x = referencePoint.x * 2;
|
|
258
|
+
if (this.staggerEven) {
|
|
259
|
+
++referencePoint.x;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
referencePoint.y = referencePoint.y * 2;
|
|
264
|
+
if (this.staggerEven) {
|
|
265
|
+
++referencePoint.y;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Determine the nearest hexagon tile by the distance to the center
|
|
270
|
+
var left, top, centerX, centerY;
|
|
271
|
+
if (this.staggerX) {
|
|
272
|
+
left = this.sidelengthx / 2;
|
|
273
|
+
centerX = left + this.columnwidth;
|
|
274
|
+
centerY = this.tileheight / 2;
|
|
275
|
+
|
|
276
|
+
this.centers[0].set(left, centerY);
|
|
277
|
+
this.centers[1].set(centerX, centerY - this.rowheight);
|
|
278
|
+
this.centers[2].set(centerX, centerY + this.rowheight);
|
|
279
|
+
this.centers[3].set(centerX + this.columnwidth, centerY);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
top = this.sidelengthy / 2;
|
|
283
|
+
centerX = this.tilewidth / 2;
|
|
284
|
+
centerY = top + this.rowheight;
|
|
285
|
+
|
|
286
|
+
this.centers[0].set(centerX, top);
|
|
287
|
+
this.centers[1].set(centerX - this.columnwidth, centerY);
|
|
288
|
+
this.centers[2].set(centerX + this.columnwidth, centerY);
|
|
289
|
+
this.centers[3].set(centerX, centerY + this.rowheight);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
var nearest = 0;
|
|
293
|
+
var minDist = Number.MAX_VALUE;
|
|
294
|
+
for (var i = 0; i < 4; ++i) {
|
|
295
|
+
var dc = this.centers[i].sub(rel).length2();
|
|
296
|
+
if (dc < minDist) {
|
|
297
|
+
minDist = dc;
|
|
298
|
+
nearest = i;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
var offsets = (this.staggerX) ? offsetsStaggerX : offsetsStaggerY;
|
|
303
|
+
|
|
304
|
+
ret.set(
|
|
305
|
+
referencePoint.x + offsets[nearest].x,
|
|
306
|
+
referencePoint.y + offsets[nearest].y
|
|
307
|
+
);
|
|
308
|
+
|
|
309
|
+
pool.push(referencePoint);
|
|
310
|
+
pool.push(rel);
|
|
311
|
+
|
|
312
|
+
return ret;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* return the pixel position corresponding of the specified tile
|
|
317
|
+
* @ignore
|
|
318
|
+
*/
|
|
319
|
+
tileToPixelCoords(x, y, v) {
|
|
320
|
+
var tileX = Math.floor(x),
|
|
321
|
+
tileY = Math.floor(y);
|
|
322
|
+
var ret = v || new Vector2d();
|
|
323
|
+
|
|
324
|
+
if (this.staggerX) {
|
|
325
|
+
ret.y = tileY * (this.tileheight + this.sidelengthy);
|
|
326
|
+
if (this.doStaggerX(tileX)) {
|
|
327
|
+
ret.y += this.rowheight;
|
|
328
|
+
}
|
|
329
|
+
ret.x = tileX * this.columnwidth;
|
|
330
|
+
} else {
|
|
331
|
+
ret.x = tileX * (this.tilewidth + this.sidelengthx);
|
|
332
|
+
if (this.doStaggerY(tileY)) {
|
|
333
|
+
ret.x += this.columnwidth;
|
|
334
|
+
}
|
|
335
|
+
ret.y = tileY * this.rowheight;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return ret;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* fix the position of Objects to match
|
|
343
|
+
* the way Tiled places them
|
|
344
|
+
* @ignore
|
|
345
|
+
*/
|
|
346
|
+
adjustPosition(obj) {
|
|
347
|
+
// only adjust position if obj.gid is defined
|
|
348
|
+
if (typeof(obj.gid) === "number") {
|
|
349
|
+
// Tiled objects origin point is "bottom-left" in Tiled,
|
|
350
|
+
// "top-left" in melonJS)
|
|
351
|
+
obj.y -= obj.height;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* draw the tile map
|
|
357
|
+
* @ignore
|
|
358
|
+
*/
|
|
359
|
+
drawTile(renderer, x, y, tmxTile) {
|
|
360
|
+
var tileset = tmxTile.tileset;
|
|
361
|
+
var point = this.tileToPixelCoords(x, y, pool.pull("Vector2d"));
|
|
362
|
+
|
|
363
|
+
// draw the tile
|
|
364
|
+
tileset.drawTile(
|
|
365
|
+
renderer,
|
|
366
|
+
tileset.tileoffset.x + point.x,
|
|
367
|
+
tileset.tileoffset.y + point.y + (this.tileheight - tileset.tileheight),
|
|
368
|
+
tmxTile
|
|
369
|
+
);
|
|
370
|
+
|
|
371
|
+
pool.push(point);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* draw the tile map
|
|
376
|
+
* @ignore
|
|
377
|
+
*/
|
|
378
|
+
drawTileLayer(renderer, layer, rect) {
|
|
379
|
+
var tile;
|
|
380
|
+
|
|
381
|
+
// get top-left and bottom-right tile position
|
|
382
|
+
var startTile = this.pixelToTileCoords(
|
|
383
|
+
rect.pos.x,
|
|
384
|
+
rect.pos.y,
|
|
385
|
+
pool.pull("Vector2d")
|
|
386
|
+
);
|
|
387
|
+
|
|
388
|
+
// Compensate for the layer position
|
|
389
|
+
startTile.sub(layer.pos);
|
|
390
|
+
|
|
391
|
+
// get top-left and bottom-right tile position
|
|
392
|
+
var startPos = this.tileToPixelCoords(
|
|
393
|
+
startTile.x + layer.pos.x,
|
|
394
|
+
startTile.y + layer.pos.y,
|
|
395
|
+
pool.pull("Vector2d")
|
|
396
|
+
);
|
|
397
|
+
|
|
398
|
+
var rowTile = startTile.clone();
|
|
399
|
+
var rowPos = startPos.clone();
|
|
400
|
+
|
|
401
|
+
/* Determine in which half of the tile the top-left corner of the area we
|
|
402
|
+
* need to draw is. If we're in the upper half, we need to start one row
|
|
403
|
+
* up due to those tiles being visible as well. How we go up one row
|
|
404
|
+
* depends on whether we're in the left or right half of the tile.
|
|
405
|
+
*/
|
|
406
|
+
var inUpperHalf = rect.pos.y - startPos.y < this.sideoffsety;
|
|
407
|
+
var inLeftHalf = rect.pos.x - startPos.x < this.sideoffsetx;
|
|
408
|
+
|
|
409
|
+
if (inUpperHalf) {
|
|
410
|
+
startTile.y--;
|
|
411
|
+
}
|
|
412
|
+
if (inLeftHalf) {
|
|
413
|
+
startTile.x--;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
var endX = layer.cols;
|
|
417
|
+
var endY = layer.rows;
|
|
418
|
+
|
|
419
|
+
if (this.staggerX) {
|
|
420
|
+
//ensure we are in the valid tile range
|
|
421
|
+
startTile.x = Math.max(0, startTile.x);
|
|
422
|
+
startTile.y = Math.max(0, startTile.y);
|
|
423
|
+
|
|
424
|
+
startPos = this.tileToPixelCoords(
|
|
425
|
+
startTile.x + layer.pos.x,
|
|
426
|
+
startTile.y + layer.pos.y
|
|
427
|
+
);
|
|
428
|
+
|
|
429
|
+
var staggeredRow = this.doStaggerX(startTile.x + layer.pos.x);
|
|
430
|
+
|
|
431
|
+
// main drawing loop
|
|
432
|
+
for (; startPos.y < rect.bottom && startTile.y < endY; ) {
|
|
433
|
+
rowTile.setV(startTile);
|
|
434
|
+
rowPos.setV(startPos);
|
|
435
|
+
|
|
436
|
+
for (; rowPos.x < rect.right && rowTile.x < endX; rowTile.x+=2) {
|
|
437
|
+
tile = layer.cellAt(rowTile.x, rowTile.y, false);
|
|
438
|
+
if (tile) {
|
|
439
|
+
// draw the tile
|
|
440
|
+
tile.tileset.drawTile(renderer, rowPos.x, rowPos.y, tile);
|
|
441
|
+
}
|
|
442
|
+
rowPos.x += this.tilewidth + this.sidelengthx;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
if (staggeredRow) {
|
|
446
|
+
startTile.x -= 1;
|
|
447
|
+
startTile.y += 1;
|
|
448
|
+
startPos.x -= this.columnwidth;
|
|
449
|
+
staggeredRow = false;
|
|
450
|
+
} else {
|
|
451
|
+
startTile.x += 1;
|
|
452
|
+
startPos.x += this.columnwidth;
|
|
453
|
+
staggeredRow = true;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
startPos.y += this.rowheight;
|
|
457
|
+
}
|
|
458
|
+
pool.push(rowTile);
|
|
459
|
+
pool.push(rowPos);
|
|
460
|
+
|
|
461
|
+
} else {
|
|
462
|
+
//ensure we are in the valid tile range
|
|
463
|
+
startTile.x = Math.max(0, startTile.x);
|
|
464
|
+
startTile.y = Math.max(0, startTile.y);
|
|
465
|
+
|
|
466
|
+
startPos = this.tileToPixelCoords(
|
|
467
|
+
startTile.x + layer.pos.x,
|
|
468
|
+
startTile.y + layer.pos.y
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
// Odd row shifting is applied in the rendering loop, so un-apply it here
|
|
472
|
+
if (this.doStaggerY(startTile.y)) {
|
|
473
|
+
startPos.x -= this.columnwidth;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// main drawing loop
|
|
477
|
+
for (; startPos.y < rect.bottom && startTile.y < endY; startTile.y++) {
|
|
478
|
+
rowTile.setV(startTile);
|
|
479
|
+
rowPos.setV(startPos);
|
|
480
|
+
|
|
481
|
+
if (this.doStaggerY(startTile.y)) {
|
|
482
|
+
rowPos.x += this.columnwidth;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
for (; rowPos.x < rect.right && rowTile.x < endX; rowTile.x++) {
|
|
486
|
+
tile = layer.cellAt(rowTile.x, rowTile.y, false);
|
|
487
|
+
if (tile) {
|
|
488
|
+
// draw the tile
|
|
489
|
+
tile.tileset.drawTile(renderer, rowPos.x, rowPos.y, tile);
|
|
490
|
+
}
|
|
491
|
+
rowPos.x += this.tilewidth + this.sidelengthx;
|
|
492
|
+
}
|
|
493
|
+
startPos.y += this.rowheight;
|
|
494
|
+
}
|
|
495
|
+
pool.push(rowTile);
|
|
496
|
+
pool.push(rowPos);
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
pool.push(startTile);
|
|
500
|
+
pool.push(startPos);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
export { TMXHexagonalRenderer as default };
|
|
@@ -0,0 +1,218 @@
|
|
|
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 pool from '../../../system/pooling.js';
|
|
10
|
+
import TMXRenderer from './TMXRenderer.js';
|
|
11
|
+
import TMXLayer from '../TMXLayer.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @classdesc
|
|
15
|
+
* an Isometric Map Renderder
|
|
16
|
+
* @augments TMXRenderer
|
|
17
|
+
*/
|
|
18
|
+
class TMXIsometricRenderer extends TMXRenderer {
|
|
19
|
+
/**
|
|
20
|
+
* @param {TMXTileMap} map - the TMX map
|
|
21
|
+
*/
|
|
22
|
+
constructor(map) {
|
|
23
|
+
super(
|
|
24
|
+
map.cols,
|
|
25
|
+
map.rows,
|
|
26
|
+
map.tilewidth,
|
|
27
|
+
map.tileheight
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
this.hTilewidth = this.tilewidth / 2;
|
|
31
|
+
this.hTileheight = this.tileheight / 2;
|
|
32
|
+
this.originX = this.rows * this.hTilewidth;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* return true if the renderer can render the specified layer
|
|
37
|
+
* @ignore
|
|
38
|
+
*/
|
|
39
|
+
canRender(layer) {
|
|
40
|
+
return (
|
|
41
|
+
(layer.orientation === "isometric") &&
|
|
42
|
+
super.canRender(layer)
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* return the bounding rect for this map renderer
|
|
48
|
+
* @name TMXIsometricRenderer#getBounds
|
|
49
|
+
* @public
|
|
50
|
+
* @param {TMXLayer} [layer] - calculate the bounding rect for a specific layer (will return a new bounds object)
|
|
51
|
+
* @returns {Bounds}
|
|
52
|
+
*/
|
|
53
|
+
getBounds(layer) {
|
|
54
|
+
var bounds = layer instanceof TMXLayer ? pool.pull("Bounds") : this.bounds;
|
|
55
|
+
bounds.setMinMax(
|
|
56
|
+
0, 0,
|
|
57
|
+
(this.cols + this.rows) * (this.tilewidth / 2),
|
|
58
|
+
(this.cols + this.rows) * (this.tileheight / 2)
|
|
59
|
+
);
|
|
60
|
+
return bounds;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* return the tile position corresponding to the specified pixel
|
|
65
|
+
* @ignore
|
|
66
|
+
*/
|
|
67
|
+
pixelToTileCoords(x, y, v) {
|
|
68
|
+
var ret = v || new Vector2d();
|
|
69
|
+
return ret.set(
|
|
70
|
+
(y / this.tileheight) + ((x - this.originX) / this.tilewidth),
|
|
71
|
+
(y / this.tileheight) - ((x - this.originX) / this.tilewidth)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* return the pixel position corresponding of the specified tile
|
|
77
|
+
* @ignore
|
|
78
|
+
*/
|
|
79
|
+
tileToPixelCoords(x, y, v) {
|
|
80
|
+
var ret = v || new Vector2d();
|
|
81
|
+
return ret.set(
|
|
82
|
+
(x - y) * this.hTilewidth + this.originX,
|
|
83
|
+
(x + y) * this.hTileheight
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* fix the position of Objects to match
|
|
89
|
+
* the way Tiled places them
|
|
90
|
+
* @ignore
|
|
91
|
+
*/
|
|
92
|
+
adjustPosition(obj) {
|
|
93
|
+
var tileX = obj.x / this.hTilewidth;
|
|
94
|
+
var tileY = obj.y / this.tileheight;
|
|
95
|
+
var isoPos = pool.pull("Vector2d");
|
|
96
|
+
|
|
97
|
+
this.tileToPixelCoords(tileX, tileY, isoPos);
|
|
98
|
+
|
|
99
|
+
obj.x = isoPos.x;
|
|
100
|
+
obj.y = isoPos.y;
|
|
101
|
+
|
|
102
|
+
pool.push(isoPos);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* draw the tile map
|
|
107
|
+
* @ignore
|
|
108
|
+
*/
|
|
109
|
+
drawTile(renderer, x, y, tmxTile) {
|
|
110
|
+
var tileset = tmxTile.tileset;
|
|
111
|
+
// draw the tile
|
|
112
|
+
tileset.drawTile(
|
|
113
|
+
renderer,
|
|
114
|
+
((this.cols - 1) * tileset.tilewidth + (x - y) * tileset.tilewidth >> 1),
|
|
115
|
+
(-tileset.tilewidth + (x + y) * tileset.tileheight >> 2),
|
|
116
|
+
tmxTile
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* draw the tile map
|
|
122
|
+
* @ignore
|
|
123
|
+
*/
|
|
124
|
+
drawTileLayer(renderer, layer, rect) {
|
|
125
|
+
// cache a couple of useful references
|
|
126
|
+
var tileset = layer.tileset;
|
|
127
|
+
|
|
128
|
+
// get top-left and bottom-right tile position
|
|
129
|
+
var rowItr = this.pixelToTileCoords(
|
|
130
|
+
rect.pos.x - tileset.tilewidth,
|
|
131
|
+
rect.pos.y - tileset.tileheight,
|
|
132
|
+
pool.pull("Vector2d")
|
|
133
|
+
).floorSelf();
|
|
134
|
+
var tileEnd = this.pixelToTileCoords(
|
|
135
|
+
rect.pos.x + rect.width + tileset.tilewidth,
|
|
136
|
+
rect.pos.y + rect.height + tileset.tileheight,
|
|
137
|
+
pool.pull("Vector2d")
|
|
138
|
+
).ceilSelf();
|
|
139
|
+
|
|
140
|
+
var rectEnd = this.tileToPixelCoords(tileEnd.x, tileEnd.y, pool.pull("Vector2d"));
|
|
141
|
+
|
|
142
|
+
// Determine the tile and pixel coordinates to start at
|
|
143
|
+
var startPos = this.tileToPixelCoords(rowItr.x, rowItr.y, pool.pull("Vector2d"));
|
|
144
|
+
startPos.x -= this.hTilewidth;
|
|
145
|
+
startPos.y += this.tileheight;
|
|
146
|
+
|
|
147
|
+
/* Determine in which half of the tile the top-left corner of the area we
|
|
148
|
+
* need to draw is. If we're in the upper half, we need to start one row
|
|
149
|
+
* up due to those tiles being visible as well. How we go up one row
|
|
150
|
+
* depends on whether we're in the left or right half of the tile.
|
|
151
|
+
*/
|
|
152
|
+
var inUpperHalf = startPos.y - rect.pos.y > this.hTileheight;
|
|
153
|
+
var inLeftHalf = rect.pos.x - startPos.x < this.hTilewidth;
|
|
154
|
+
|
|
155
|
+
if (inUpperHalf) {
|
|
156
|
+
if (inLeftHalf) {
|
|
157
|
+
rowItr.x--;
|
|
158
|
+
startPos.x -= this.hTilewidth;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
rowItr.y--;
|
|
162
|
+
startPos.x += this.hTilewidth;
|
|
163
|
+
}
|
|
164
|
+
startPos.y -= this.hTileheight;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Determine whether the current row is shifted half a tile to the right
|
|
168
|
+
var shifted = inUpperHalf ^ inLeftHalf;
|
|
169
|
+
|
|
170
|
+
// initialize the columItr vector
|
|
171
|
+
var columnItr = rowItr.clone();
|
|
172
|
+
|
|
173
|
+
// main drawing loop
|
|
174
|
+
for (var y = startPos.y * 2; y - this.tileheight * 2 < rectEnd.y * 2; y += this.tileheight) {
|
|
175
|
+
columnItr.setV(rowItr);
|
|
176
|
+
for (var x = startPos.x; x < rectEnd.x; x += this.tilewidth) {
|
|
177
|
+
var tmxTile = layer.cellAt(columnItr.x, columnItr.y);
|
|
178
|
+
// render if a valid tile position
|
|
179
|
+
if (tmxTile) {
|
|
180
|
+
tileset = tmxTile.tileset;
|
|
181
|
+
// offset could be different per tileset
|
|
182
|
+
var offset = tileset.tileoffset;
|
|
183
|
+
// draw our tile
|
|
184
|
+
tileset.drawTile(
|
|
185
|
+
renderer,
|
|
186
|
+
offset.x + x,
|
|
187
|
+
offset.y + y / 2 - tileset.tileheight,
|
|
188
|
+
tmxTile
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Advance to the next column
|
|
193
|
+
columnItr.x++;
|
|
194
|
+
columnItr.y--;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Advance to the next row
|
|
198
|
+
if (!shifted) {
|
|
199
|
+
rowItr.x++;
|
|
200
|
+
startPos.x += this.hTilewidth;
|
|
201
|
+
shifted = true;
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
rowItr.y++;
|
|
205
|
+
startPos.x -= this.hTilewidth;
|
|
206
|
+
shifted = false;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
pool.push(columnItr);
|
|
211
|
+
pool.push(rowItr);
|
|
212
|
+
pool.push(tileEnd);
|
|
213
|
+
pool.push(rectEnd);
|
|
214
|
+
pool.push(startPos);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export { TMXIsometricRenderer as default };
|