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,220 @@
|
|
|
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 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
|
+
var TMXIsometricRenderer$1 = TMXIsometricRenderer;
|
|
219
|
+
|
|
220
|
+
export { TMXIsometricRenderer$1 as default };
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.0
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import Vector2d from '../../../math/vector2.js';
|
|
9
|
+
import pool from '../../../system/pooling.js';
|
|
10
|
+
import TMXRenderer from './TMXRenderer.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @classdesc
|
|
14
|
+
* an Orthogonal Map Renderder
|
|
15
|
+
* @augments TMXRenderer
|
|
16
|
+
*/
|
|
17
|
+
class TMXOrthogonalRenderer extends TMXRenderer {
|
|
18
|
+
/**
|
|
19
|
+
* @param {TMXTileMap} map - the TMX map
|
|
20
|
+
*/
|
|
21
|
+
constructor(map) {
|
|
22
|
+
super(
|
|
23
|
+
map.cols,
|
|
24
|
+
map.rows,
|
|
25
|
+
map.tilewidth,
|
|
26
|
+
map.tileheight
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* return true if the renderer can render the specified layer
|
|
32
|
+
* @ignore
|
|
33
|
+
*/
|
|
34
|
+
canRender(layer) {
|
|
35
|
+
return (
|
|
36
|
+
(layer.orientation === "orthogonal") &&
|
|
37
|
+
super.canRender(layer)
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* return the tile position corresponding to the specified pixel
|
|
43
|
+
* @ignore
|
|
44
|
+
*/
|
|
45
|
+
pixelToTileCoords(x, y, v) {
|
|
46
|
+
var ret = v || new Vector2d();
|
|
47
|
+
return ret.set(
|
|
48
|
+
x / this.tilewidth,
|
|
49
|
+
y / this.tileheight
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* return the pixel position corresponding of the specified tile
|
|
56
|
+
* @ignore
|
|
57
|
+
*/
|
|
58
|
+
tileToPixelCoords(x, y, v) {
|
|
59
|
+
var ret = v || new Vector2d();
|
|
60
|
+
return ret.set(
|
|
61
|
+
x * this.tilewidth,
|
|
62
|
+
y * this.tileheight
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* fix the position of Objects to match
|
|
68
|
+
* the way Tiled places them
|
|
69
|
+
* @ignore
|
|
70
|
+
*/
|
|
71
|
+
adjustPosition(obj) {
|
|
72
|
+
// only adjust position if obj.gid is defined
|
|
73
|
+
if (typeof(obj.gid) === "number") {
|
|
74
|
+
// Tiled objects origin point is "bottom-left" in Tiled,
|
|
75
|
+
// "top-left" in melonJS)
|
|
76
|
+
obj.y -= obj.height;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* draw the tile map
|
|
82
|
+
* @ignore
|
|
83
|
+
*/
|
|
84
|
+
drawTile(renderer, x, y, tmxTile) {
|
|
85
|
+
var tileset = tmxTile.tileset;
|
|
86
|
+
// draw the tile
|
|
87
|
+
tileset.drawTile(
|
|
88
|
+
renderer,
|
|
89
|
+
tileset.tileoffset.x + x * this.tilewidth,
|
|
90
|
+
tileset.tileoffset.y + (y + 1) * this.tileheight - tileset.tileheight,
|
|
91
|
+
tmxTile
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* draw the tile map
|
|
97
|
+
* @ignore
|
|
98
|
+
*/
|
|
99
|
+
drawTileLayer(renderer, layer, rect) {
|
|
100
|
+
var incX = 1, incY = 1;
|
|
101
|
+
|
|
102
|
+
// get top-left and bottom-right tile position
|
|
103
|
+
var start = this.pixelToTileCoords(
|
|
104
|
+
Math.max(rect.pos.x - (layer.maxTileSize.width - layer.tilewidth), 0),
|
|
105
|
+
Math.max(rect.pos.y - (layer.maxTileSize.height - layer.tileheight), 0),
|
|
106
|
+
pool.pull("Vector2d")
|
|
107
|
+
).floorSelf();
|
|
108
|
+
|
|
109
|
+
var end = this.pixelToTileCoords(
|
|
110
|
+
rect.pos.x + rect.width + this.tilewidth,
|
|
111
|
+
rect.pos.y + rect.height + this.tileheight,
|
|
112
|
+
pool.pull("Vector2d")
|
|
113
|
+
).ceilSelf();
|
|
114
|
+
|
|
115
|
+
//ensure we are in the valid tile range
|
|
116
|
+
end.x = end.x > this.cols ? this.cols : end.x;
|
|
117
|
+
end.y = end.y > this.rows ? this.rows : end.y;
|
|
118
|
+
|
|
119
|
+
switch (layer.renderorder) {
|
|
120
|
+
case "right-up" :
|
|
121
|
+
// swapping start.y and end.y
|
|
122
|
+
end.y = start.y + (start.y = end.y) - end.y;
|
|
123
|
+
incY = -1;
|
|
124
|
+
break;
|
|
125
|
+
case "left-down" :
|
|
126
|
+
// swapping start.x and end.x
|
|
127
|
+
end.x = start.x + (start.x = end.x) - end.x;
|
|
128
|
+
incX = -1;
|
|
129
|
+
break;
|
|
130
|
+
case "left-up" :
|
|
131
|
+
// swapping start.x and end.x
|
|
132
|
+
end.x = start.x + (start.x = end.x) - end.x;
|
|
133
|
+
// swapping start.y and end.y
|
|
134
|
+
end.y = start.y + (start.y = end.y) - end.y;
|
|
135
|
+
incX = -1;
|
|
136
|
+
incY = -1;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// main drawing loop
|
|
141
|
+
for (var y = start.y; y !== end.y; y+= incY) {
|
|
142
|
+
for (var x = start.x; x !== end.x; x+= incX) {
|
|
143
|
+
var tmxTile = layer.cellAt(x, y, false);
|
|
144
|
+
if (tmxTile) {
|
|
145
|
+
this.drawTile(renderer, x, y, tmxTile);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
pool.push(start);
|
|
151
|
+
pool.push(end);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
var TMXOrthogonalRenderer$1 = TMXOrthogonalRenderer;
|
|
156
|
+
|
|
157
|
+
export { TMXOrthogonalRenderer$1 as default };
|
|
@@ -0,0 +1,125 @@
|
|
|
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 pool from '../../../system/pooling.js';
|
|
9
|
+
import TMXLayer from '../TMXLayer.js';
|
|
10
|
+
import Bounds from '../../../physics/bounds.js';
|
|
11
|
+
|
|
12
|
+
/* eslint-disable no-unused-vars */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @classdesc
|
|
16
|
+
* The map renderer base class
|
|
17
|
+
*/
|
|
18
|
+
class TMXRenderer {
|
|
19
|
+
/**
|
|
20
|
+
* @param {number} cols - width of the tilemap in tiles
|
|
21
|
+
* @param {number} rows - height of the tilemap in tiles
|
|
22
|
+
* @param {number} tilewidth - width of each tile in pixels
|
|
23
|
+
* @param {number} tileheight - height of each tile in pixels
|
|
24
|
+
*/
|
|
25
|
+
constructor(cols, rows, tilewidth, tileheight) {
|
|
26
|
+
this.cols = cols;
|
|
27
|
+
this.rows = rows;
|
|
28
|
+
this.tilewidth = tilewidth;
|
|
29
|
+
this.tileheight = tileheight;
|
|
30
|
+
this.bounds = new Bounds();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* return true if the renderer can render the specified map or layer
|
|
35
|
+
* @name TMXRenderer#canRender
|
|
36
|
+
* @public
|
|
37
|
+
* @param {TMXTileMap|TMXLayer} component - TMX Map or Layer
|
|
38
|
+
* @returns {boolean}
|
|
39
|
+
*/
|
|
40
|
+
canRender(component) {
|
|
41
|
+
return (
|
|
42
|
+
/*
|
|
43
|
+
// layers can have different size within
|
|
44
|
+
// the same maps, so commenting these two lines
|
|
45
|
+
(this.cols === component.cols) &&
|
|
46
|
+
(this.rows === component.rows) &&
|
|
47
|
+
*/
|
|
48
|
+
(this.tilewidth === component.tilewidth) &&
|
|
49
|
+
(this.tileheight === component.tileheight)
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* return the bounding rect for this map renderer
|
|
55
|
+
* @name TMXRenderer#getBounds
|
|
56
|
+
* @public
|
|
57
|
+
* @param {TMXLayer} [layer] - calculate the bounding rect for a specific layer (will return a new bounds object)
|
|
58
|
+
* @returns {Bounds}
|
|
59
|
+
*/
|
|
60
|
+
getBounds(layer) {
|
|
61
|
+
var bounds = layer instanceof TMXLayer ? pool.pull("Bounds") : this.bounds;
|
|
62
|
+
bounds.setMinMax(
|
|
63
|
+
0, 0,
|
|
64
|
+
this.cols * this.tilewidth,
|
|
65
|
+
this.rows * this.tileheight
|
|
66
|
+
);
|
|
67
|
+
return bounds;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* return the tile position corresponding to the specified pixel
|
|
72
|
+
* @name TMXRenderer#pixelToTileCoords
|
|
73
|
+
* @public
|
|
74
|
+
* @param {number} x - X coordinate
|
|
75
|
+
* @param {number} y - Y coordinate
|
|
76
|
+
* @param {Vector2d} [v] - an optional vector object where to put the return values
|
|
77
|
+
* @returns {Vector2d}
|
|
78
|
+
*/
|
|
79
|
+
pixelToTileCoords(x, y, v) {
|
|
80
|
+
return v;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* return the pixel position corresponding of the specified tile
|
|
85
|
+
* @name TMXRenderer#tileToPixelCoords
|
|
86
|
+
* @public
|
|
87
|
+
* @param {number} col - tile horizontal position
|
|
88
|
+
* @param {number} row - tile vertical position
|
|
89
|
+
* @param {Vector2d} [v] - an optional vector object where to put the return values
|
|
90
|
+
* @returns {Vector2d}
|
|
91
|
+
*/
|
|
92
|
+
tileToPixelCoords(col, row, v) {
|
|
93
|
+
return v;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* draw the given tile at the specified layer
|
|
98
|
+
* @name TMXRenderer#drawTile
|
|
99
|
+
* @public
|
|
100
|
+
* @param {CanvasRenderer|WebGLRenderer} renderer - a renderer object
|
|
101
|
+
* @param {number} x - X coordinate where to draw the tile
|
|
102
|
+
* @param {number} y - Y coordinate where to draw the tile
|
|
103
|
+
* @param {Tile} tile - the tile object to draw
|
|
104
|
+
*/
|
|
105
|
+
drawTile(renderer, x, y, tile) {
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* draw the given TMX Layer for the given area
|
|
110
|
+
* @name TMXRenderer#drawTileLayer
|
|
111
|
+
* @public
|
|
112
|
+
* @param {CanvasRenderer|WebGLRenderer} renderer - a renderer object
|
|
113
|
+
* @param {TMXLayer} layer - a TMX Layer object
|
|
114
|
+
* @param {Rect} rect - the area of the layer to draw
|
|
115
|
+
*/
|
|
116
|
+
drawTileLayer(renderer, layer, rect) {
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
var TMXRenderer$1 = TMXRenderer;
|
|
122
|
+
|
|
123
|
+
/* eslint-enable no-unused-vars */
|
|
124
|
+
|
|
125
|
+
export { TMXRenderer$1 as default };
|
|
@@ -0,0 +1,109 @@
|
|
|
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 Vector2d from '../../../math/vector2.js';
|
|
9
|
+
import pool from '../../../system/pooling.js';
|
|
10
|
+
import TMXHexagonalRenderer from './TMXHexagonalRenderer.js';
|
|
11
|
+
import { degToRad } from '../../../math/math.js';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @classdesc
|
|
15
|
+
* a Staggered Map Renderder
|
|
16
|
+
* @augments TMXHexagonalRenderer
|
|
17
|
+
*/
|
|
18
|
+
class TMXStaggeredRenderer extends TMXHexagonalRenderer {
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* return true if the renderer can render the specified layer
|
|
22
|
+
* @ignore
|
|
23
|
+
*/
|
|
24
|
+
canRender(layer) {
|
|
25
|
+
return (
|
|
26
|
+
(layer.orientation === "staggered") &&
|
|
27
|
+
super.canRender(layer)
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* return the tile position corresponding to the specified pixel
|
|
33
|
+
* @ignore
|
|
34
|
+
*/
|
|
35
|
+
pixelToTileCoords(x, y, v) {
|
|
36
|
+
var ret = v || new Vector2d();
|
|
37
|
+
|
|
38
|
+
var alignedX = x,
|
|
39
|
+
alignedY = y;
|
|
40
|
+
|
|
41
|
+
if (this.staggerX) {
|
|
42
|
+
alignedX -= this.staggerEven ? this.sideoffsetx : 0;
|
|
43
|
+
} else {
|
|
44
|
+
alignedY -= this.staggerEven ? this.sideoffsety : 0;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Start with the coordinates of a grid-aligned tile
|
|
48
|
+
var referencePoint = pool.pull("Vector2d",
|
|
49
|
+
Math.floor(alignedX / this.tilewidth),
|
|
50
|
+
Math.floor(alignedY / this.tileheight)
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Adjust the reference point to the correct tile coordinates
|
|
54
|
+
if (this.staggerX) {
|
|
55
|
+
referencePoint.x = referencePoint.x * 2;
|
|
56
|
+
if (this.staggerEven) {
|
|
57
|
+
++referencePoint.x;
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
referencePoint.y = referencePoint.y * 2;
|
|
61
|
+
if (this.staggerEven) {
|
|
62
|
+
++referencePoint.y;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Relative x and y position on the base square of the grid-aligned tile
|
|
67
|
+
var rel = pool.pull("Vector2d",
|
|
68
|
+
alignedX - referencePoint.x * this.tilewidth,
|
|
69
|
+
alignedY - referencePoint.y * this.tileheight
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
// Check whether the cursor is in any of the corners (neighboring tiles)
|
|
73
|
+
var y_pos = rel.x * (this.tileheight / this.tilewidth);
|
|
74
|
+
|
|
75
|
+
if (this.sideoffsety - y_pos > rel.y) {
|
|
76
|
+
referencePoint = this.topLeft(referencePoint.x, referencePoint.y, referencePoint);
|
|
77
|
+
}
|
|
78
|
+
if (-this.sideoffsety + y_pos > rel.y) {
|
|
79
|
+
referencePoint = this.topRight(referencePoint.x, referencePoint.y, referencePoint);
|
|
80
|
+
}
|
|
81
|
+
if (this.sideoffsety + y_pos < rel.y) {
|
|
82
|
+
referencePoint = this.bottomLeft(referencePoint.x, referencePoint.y, referencePoint);
|
|
83
|
+
}
|
|
84
|
+
if (this.sideoffsety * 3 - y_pos < rel.y) {
|
|
85
|
+
referencePoint = this.bottomRight(referencePoint.x, referencePoint.y, referencePoint);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
ret = this.tileToPixelCoords(referencePoint.x, referencePoint.y, ret);
|
|
89
|
+
|
|
90
|
+
ret.set(x - ret.x, y - ret.y);
|
|
91
|
+
|
|
92
|
+
// Start with the coordinates of a grid-aligned tile
|
|
93
|
+
ret.set(
|
|
94
|
+
ret.x - (this.tilewidth / 2),
|
|
95
|
+
ret.y * (this.tilewidth / this.tileheight)
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
ret.div(this.tilewidth / Math.sqrt(2)).rotate(degToRad(-45)).add(referencePoint);
|
|
99
|
+
|
|
100
|
+
pool.push(referencePoint);
|
|
101
|
+
pool.push(rel);
|
|
102
|
+
|
|
103
|
+
return ret;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
var TMXStaggeredRenderer$1 = TMXStaggeredRenderer;
|
|
108
|
+
|
|
109
|
+
export { TMXStaggeredRenderer$1 as default };
|