2017-09-12 23:58:25 +00:00
|
|
|
var GameObject = require('../../GameObject');
|
|
|
|
|
2017-11-09 18:18:23 +00:00
|
|
|
var DynamicTilemapLayerCanvasRenderer = function (renderer, gameObject, interpolationPercentage, camera)
|
2017-06-09 04:00:12 +00:00
|
|
|
{
|
2017-09-12 23:58:25 +00:00
|
|
|
if (GameObject.RENDER_MASK !== gameObject.renderFlags || (gameObject.cameraFilter > 0 && (gameObject.cameraFilter & camera._id)))
|
2017-06-09 04:00:12 +00:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2017-08-15 22:51:37 +00:00
|
|
|
|
2017-09-12 23:58:25 +00:00
|
|
|
gameObject.cull(camera);
|
|
|
|
|
2017-11-14 21:35:18 +00:00
|
|
|
var renderTiles = gameObject.culledTiles;
|
|
|
|
var length = renderTiles.length;
|
2017-08-25 02:46:33 +00:00
|
|
|
var image = gameObject.frame.source.image;
|
2017-11-14 21:35:18 +00:00
|
|
|
var tileset = this.tileset;
|
2017-11-03 16:52:57 +00:00
|
|
|
|
2017-08-25 02:46:33 +00:00
|
|
|
var tx = gameObject.x - camera.scrollX * gameObject.scrollFactorX;
|
|
|
|
var ty = gameObject.y - camera.scrollY * gameObject.scrollFactorY;
|
|
|
|
var ctx = renderer.gameContext;
|
|
|
|
|
|
|
|
ctx.save();
|
|
|
|
ctx.translate(tx, ty);
|
|
|
|
ctx.rotate(gameObject.rotation);
|
|
|
|
ctx.scale(gameObject.scaleX, gameObject.scaleY);
|
|
|
|
ctx.scale(gameObject.flipX ? -1 : 1, gameObject.flipY ? -1 : 1);
|
|
|
|
|
2017-11-14 21:35:18 +00:00
|
|
|
for (var index = 0; index < length; ++index)
|
2017-08-25 02:46:33 +00:00
|
|
|
{
|
2017-11-14 21:35:18 +00:00
|
|
|
var tile = renderTiles[index];
|
2017-09-12 23:58:25 +00:00
|
|
|
|
2017-11-14 21:35:18 +00:00
|
|
|
var tileTexCoords = tileset.getTileTextureCoordinates(tile.index);
|
|
|
|
if (tileTexCoords === null) { continue; }
|
2017-11-03 16:52:57 +00:00
|
|
|
|
2017-11-15 02:45:05 +00:00
|
|
|
var halfWidth = tile.width / 2;
|
|
|
|
var halfHeight = tile.height / 2;
|
|
|
|
|
|
|
|
ctx.save();
|
2017-12-01 15:40:55 +00:00
|
|
|
ctx.translate(tile.pixelX + halfWidth, tile.pixelY + halfHeight);
|
2017-11-15 02:45:05 +00:00
|
|
|
|
|
|
|
if (tile.flipX || tile.flipY)
|
|
|
|
{
|
|
|
|
ctx.scale(tile.flipX ? -1 : 1, tile.flipY ? -1 : 1);
|
|
|
|
}
|
|
|
|
|
2017-11-17 21:31:41 +00:00
|
|
|
ctx.globalAlpha = gameObject.alpha * tile.alpha;
|
2017-11-14 22:13:07 +00:00
|
|
|
|
2017-08-25 02:46:33 +00:00
|
|
|
ctx.drawImage(
|
2017-11-03 16:52:57 +00:00
|
|
|
image,
|
2017-11-14 21:35:18 +00:00
|
|
|
tileTexCoords.x, tileTexCoords.y,
|
|
|
|
tile.width, tile.height,
|
2017-11-15 02:45:05 +00:00
|
|
|
-halfWidth, -halfHeight,
|
2017-11-14 21:35:18 +00:00
|
|
|
tile.width, tile.height
|
2017-08-25 02:46:33 +00:00
|
|
|
);
|
2017-11-15 02:45:05 +00:00
|
|
|
|
|
|
|
ctx.restore();
|
2017-08-25 02:46:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
ctx.restore();
|
2017-06-09 04:00:12 +00:00
|
|
|
};
|
|
|
|
|
2017-11-09 18:18:23 +00:00
|
|
|
module.exports = DynamicTilemapLayerCanvasRenderer;
|