Skip to content

Commit 195a59d

Browse files
committed
Dynamic Tilemap rendering
1 parent 06fa0af commit 195a59d

5 files changed

Lines changed: 42 additions & 37 deletions

File tree

src/gameobjects/index.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ var GameObjects = {
1515
Blitter: require('./blitter/Blitter'),
1616
//Container: require('./container/Container'),
1717
DynamicBitmapText: require('./bitmaptext/dynamic/DynamicBitmapText'),
18-
//DynamicTilemapLayer: require('./tilemap/dynamiclayer/DynamicTilemapLayer'),
18+
DynamicTilemapLayer: require('./tilemap/dynamiclayer/DynamicTilemapLayer'),
1919
Graphics: require('./graphics/Graphics.js'),
2020
//Group: require('./group/Group'),
2121
Image: require('./image/Image'),
@@ -26,7 +26,7 @@ var GameObjects = {
2626
//StaticTilemapLayer: require('./tilemap/staticlayer/StaticTilemapLayer'),
2727
Text: require('./text/static/Text'),
2828
//Tile: require('./tilemap/Tile'),
29-
//Tilemap: require('./tilemap/Tilemap'),
29+
Tilemap: require('./tilemap/Tilemap'),
3030
//Tileset: require('./tilemap/Tileset'),
3131
//TileSprite: require('./tilesprite/TileSprite'),
3232
//Zone: require('./zone/Zone'),
@@ -46,7 +46,7 @@ var GameObjects = {
4646
//Sprite3D: require('./sprite3d/Sprite3DFactory'),
4747
StaticBitmapText: require('./bitmaptext/static/BitmapTextFactory'),
4848
Text: require('./text/static/TextFactory'),
49-
//Tilemap: require('./tilemap/TilemapFactory'),
49+
Tilemap: require('./tilemap/TilemapFactory'),
5050
//TileSprite: require('./tilesprite/TileSpriteFactory'),
5151
//Zone: require('./zone/ZoneFactory')
5252
},
@@ -63,7 +63,7 @@ var GameObjects = {
6363
//Sprite3D: require('./sprite3d/Sprite3DCreator'),
6464
StaticBitmapText: require('./bitmaptext/static/BitmapTextCreator'),
6565
Text: require('./text/static/TextCreator'),
66-
//Tilemap: require('./tilemap/TilemapCreator'),
66+
Tilemap: require('./tilemap/TilemapCreator'),
6767
//TileSprite: require('./tilesprite/TileSpriteCreator'),
6868
//Zone: require('./zone/ZoneCreator')
6969
}

src/gameobjects/text/static/TextWebGLRenderer.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ var TextWebGLRenderer = function (renderer, text, interpolationPercentage, camer
1919
renderer.pipelines.TextureTintPipeline.batchTexture(
2020
text.canvasTexture,
2121
text.x, text.y,
22+
text.canvasTexture.width, text.canvasTexture.height,
2223
text.scaleX, text.scaleY,
2324
text.rotation,
2425
text.flipX, text.flipY,

src/gameobjects/tilemap/Tilemap.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
var Class = require('../../utils/Class');
22
var Extend = require('../../utils/object/Extend');
33
var LayerData = require('./mapdata/LayerData');
4-
var StaticTilemapLayer = require('./staticlayer/StaticTilemapLayer.js');
4+
//var StaticTilemapLayer = require('./staticlayer/StaticTilemapLayer.js');
55
var DynamicTilemapLayer = require('./dynamiclayer/DynamicTilemapLayer.js');
66
var Tileset = require('./Tileset');
77
var Formats = require('./Formats');
Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
var GameObject = require('../../GameObject');
2+
var Utils = require('../../../renderer/webgl/Utils');
23

3-
var DynamicTilemapLayerWebGLRenderer = function (renderer, gameObject, interpolationPercentage, camera)
4+
var DynamicTilemapLayerWebGLRenderer = function (renderer, tilemapLayer, interpolationPercentage, camera)
45
{
5-
if (GameObject.RENDER_MASK !== gameObject.renderFlags || (gameObject.cameraFilter > 0 && (gameObject.cameraFilter & camera._id)))
6+
if (GameObject.RENDER_MASK !== tilemapLayer.renderFlags || (tilemapLayer.cameraFilter > 0 && (tilemapLayer.cameraFilter & camera._id)))
67
{
78
return;
89
}
910

10-
gameObject.cull(camera);
11+
tilemapLayer.cull(camera);
1112

12-
var renderTiles = gameObject.culledTiles;
13+
var renderTiles = tilemapLayer.culledTiles;
1314
var length = renderTiles.length;
14-
var batch = renderer.spriteBatch;
15-
var texture = gameObject.tileset.image.get().source.glTexture;
16-
var textureWidth = texture.width;
17-
var textureHeight = texture.height;
18-
var tileset = this.tileset;
19-
var renderTarget = gameObject.renderTarget;
20-
var scrollFactorX = gameObject.scrollFactorX;
21-
var scrollFactorY = gameObject.scrollFactorY;
22-
var alpha = gameObject.alpha;
23-
var x = gameObject.x;
24-
var y = gameObject.y;
25-
var sx = gameObject.scaleX;
26-
var sy = gameObject.scaleY;
15+
var texture = tilemapLayer.tileset.image.get().source.glTexture;
16+
var tileset = tilemapLayer.tileset;
17+
var scrollFactorX = tilemapLayer.scrollFactorX;
18+
var scrollFactorY = tilemapLayer.scrollFactorY;
19+
var alpha = tilemapLayer.alpha;
20+
var x = tilemapLayer.x;
21+
var y = tilemapLayer.y;
22+
var sx = tilemapLayer.scaleX;
23+
var sy = tilemapLayer.scaleY;
24+
var getTint = Utils.getTintAppendFloatAlpha;
25+
var pipeline = renderer.pipelines.TextureTintPipeline;
2726

2827
for (var index = 0; index < length; ++index)
2928
{
@@ -36,19 +35,22 @@ var DynamicTilemapLayerWebGLRenderer = function (renderer, gameObject, interpola
3635
var frameHeight = tile.height * (tile.flipY ? -1 : 1);
3736
var frameX = tileTexCoords.x + (tile.flipX ? tile.width : 0);
3837
var frameY = tileTexCoords.y + (tile.flipY ? tile.height : 0);
38+
var tint = getTint(tile.tint, alpha * tile.alpha);
3939

40-
batch.addTileTextureRect(
40+
pipeline.batchTexture(
4141
texture,
42-
x + tile.pixelX * sx, y + tile.pixelY * sy,
43-
tile.width * sx, tile.height * sy,
44-
alpha * tile.alpha, tile.tint,
42+
tile.pixelX, tile.pixelY,
43+
tile.width, tile.height,
44+
1, 1,
45+
0,
46+
false, false,
4547
scrollFactorX, scrollFactorY,
46-
textureWidth, textureHeight,
48+
0, 0,
4749
frameX, frameY, frameWidth, frameHeight,
48-
camera,
49-
renderTarget
50+
tint, tint, tint, tint,
51+
camera
5052
);
51-
}
53+
}
5254
};
5355

5456
module.exports = DynamicTilemapLayerWebGLRenderer;

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,8 @@ var TextureTintPipeline = new Class({
198198

199199
batchTexture: function (
200200
texture,
201-
dstX, dstY,
201+
srcX, srcY,
202+
srcWidth, srcHeight,
202203
scaleX, scaleY,
203204
rotation,
204205
flipX, flipY,
@@ -227,14 +228,14 @@ var TextureTintPipeline = new Class({
227228
var cameraHeight = camera.height + 50;
228229
var cameraX = -50;
229230
var cameraY = -50;
230-
var width = frameWidth * (flipX ? -1.0 : 1.0);
231-
var height = frameHeight * (flipY ? -1.0 : 1.0);
232-
var x = -displayOriginX + frameX + ((frameWidth) * (flipX ? 1.0 : 0.0));
233-
var y = -displayOriginY + frameY + ((frameHeight) * (flipY ? 1.0 : 0.0));
231+
var width = srcWidth * (flipX ? -1.0 : 1.0);
232+
var height = srcHeight * (flipY ? -1.0 : 1.0);
233+
var x = -displayOriginX + ((srcWidth) * (flipX ? 1.0 : 0.0));
234+
var y = -displayOriginY + ((srcHeight) * (flipY ? 1.0 : 0.0));
234235
var xw = x + width;
235236
var yh = y + height;
236-
var translateX = dstX - camera.scrollX * scrollFactorX;
237-
var translateY = dstY - camera.scrollY * scrollFactorY;
237+
var translateX = srcX - camera.scrollX * scrollFactorX;
238+
var translateY = srcY - camera.scrollY * scrollFactorY;
238239
var sr = Math.sin(rotation);
239240
var cr = Math.cos(rotation);
240241
var sra = cr * scaleX;
@@ -986,6 +987,7 @@ var TextureTintPipeline = new Class({
986987
renderer.popScissor();
987988
}
988989
}
990+
989991
});
990992

991993
module.exports = TextureTintPipeline;

0 commit comments

Comments
 (0)