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,155 @@
|
|
|
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
|
+
|
|
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
|
+
export { TMXOrthogonalRenderer as default };
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* melonJS Game Engine - v14.1.1
|
|
3
|
+
* http://www.melonjs.org
|
|
4
|
+
* melonjs is licensed under the MIT License.
|
|
5
|
+
* http://www.opensource.org/licenses/mit-license
|
|
6
|
+
* @copyright (C) 2011 - 2022 Olivier Biot (AltByte Pte Ltd)
|
|
7
|
+
*/
|
|
8
|
+
import pool from '../../../system/pooling.js';
|
|
9
|
+
import 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
|
+
|
|
122
|
+
/* eslint-enable no-unused-vars */
|
|
123
|
+
|
|
124
|
+
export { TMXRenderer as default };
|
|
@@ -0,0 +1,107 @@
|
|
|
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 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
|
+
export { TMXStaggeredRenderer as default };
|