44 * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License }
55 */
66
7+ var SnapFloor = require ( '../../math/snap/SnapFloor' ) ;
8+ var SnapCeil = require ( '../../math/snap/SnapCeil' ) ;
9+
710/**
811 * Returns the tiles in the given layer that are within the camera's viewport. This is used
912 * internally.
@@ -24,53 +27,21 @@ var CullTiles = function (layer, camera, outputArray)
2427
2528 outputArray . length = 0 ;
2629
27- // var zoom = camera.zoom;
28- // var originX = camera.width / 2;
29- // var originY = camera.height / 2;
30-
31- // var matrix = camera.matrix;
32-
33- // matrix.applyITRS(camera.x, camera.y, camera.rotation, zoom, zoom);
34-
35- // camera.matrix.loadIdentity();
36- // camera.matrix.translate(camera.x + originX, camera.y + originY);
37- // camera.matrix.rotate(camera.rotation);
38- // camera.matrix.scale(zoom, zoom);
39- // camera.matrix.translate(-originX, -originY);
40- // camera.matrix.invert();
41-
42- // camera.shakeEffect.preRender();
43-
4430 var tilemapLayer = layer . tilemapLayer ;
4531
46- // var tileW = layer.tileWidth;
47- // var tileH = layer.tileHeight;
48-
49- // var cullX = ((camera.scrollX * tilemapLayer.scrollFactorX) - tileW);
50- // var cullY = ((camera.scrollY * tilemapLayer.scrollFactorY) - tileH);
51- // var cullW = (cullX + (camera.width + tileW * 2));
52- // var cullH = (cullY + (camera.height + tileH * 2));
32+ var tileW = Math . floor ( layer . tileWidth * tilemapLayer . scaleX ) ;
33+ var tileH = Math . floor ( layer . tileHeight * tilemapLayer . scaleY ) ;
5334
5435 var mapData = layer . data ;
5536 var mapWidth = layer . width ;
5637 var mapHeight = layer . height ;
5738
58- var boundsLeft = camera . worldBounds . left ;
59- var boundsRight = camera . worldBounds . right ;
60- var boundsTop = camera . worldBounds . top ;
61- var boundsBottom = camera . worldBounds . bottom ;
62-
63- // var cameraMatrix = camera.matrix.matrix;
64- // var a = cameraMatrix[0];
65- // var b = cameraMatrix[1];
66- // var c = cameraMatrix[2];
67- // var d = cameraMatrix[3];
68- // var e = cameraMatrix[4];
69- // var f = cameraMatrix[5];
70- // var tCullX = cullX * a + cullY * c + e;
71- // var tCullY = cullX * b + cullY * d + f;
72- // var tCullW = cullW * a + cullH * c + e;
73- // var tCullH = cullW * b + cullH * d + f;
39+ // Camera world view bounds, snapped for tile size
40+
41+ var boundsLeft = SnapFloor ( camera . worldView . x , tileW ) ;
42+ var boundsRight = SnapCeil ( camera . worldView . right , tileW ) ;
43+ var boundsTop = SnapFloor ( camera . worldView . y , tileH ) ;
44+ var boundsBottom = SnapCeil ( camera . worldView . bottom , tileH ) ;
7445
7546 var i = 0 ;
7647
@@ -85,67 +56,21 @@ var CullTiles = function (layer, camera, outputArray)
8556 continue ;
8657 }
8758
88- var tilePixelX = ( tile . pixelX + tilemapLayer . x ) ;
89- var tilePixelY = ( tile . pixelY + tilemapLayer . y ) ;
59+ var tilePixelX = ( tile . pixelX + tilemapLayer . x ) * tilemapLayer . scaleX ;
60+ var tilePixelY = ( tile . pixelY + tilemapLayer . y ) * tilemapLayer . scaleY ;
9061
91- if ( tilePixelX >= boundsLeft && tilePixelX < boundsRight && tilePixelY >= boundsTop && tilePixelY < boundsBottom )
62+ if ( tilePixelX >= boundsLeft && tilePixelX + tileW <= boundsRight && tilePixelY >= boundsTop && tilePixelY + tileH <= boundsBottom )
9263 {
9364 outputArray . push ( tile ) ;
9465 }
9566
9667 i ++ ;
97-
98- // var tileX = (tilePixelX * a + tilePixelY * c + e);
99- // var tileY = (tilePixelX * b + tilePixelY * d + f);
100-
101- // if (tile.visible &&
102- // tileX >= tCullX &&
103- // tileY >= tCullY &&
104- // tileX + tileW <= tCullW &&
105- // tileY + tileH <= tCullH
106- // )
107- // {
108- // outputArray.push(tile);
109- // }
11068 }
11169 }
11270
11371 window . noCull = i ;
11472 window . cull = outputArray . length ;
11573
116- /* var tilemapLayer = layer.tilemapLayer;
117- var mapData = layer.data;
118- var mapWidth = layer.width;
119- var mapHeight = layer.height;
120- var left = (camera.scrollX * camera.zoom * tilemapLayer.scrollFactorX) - tilemapLayer.x;
121- var top = (camera.scrollY * camera.zoom * tilemapLayer.scrollFactorY) - tilemapLayer.y;
122- var sx = tilemapLayer.scaleX;
123- var sy = tilemapLayer.scaleY;
124- var tileWidth = layer.tileWidth * sx;
125- var tileHeight = layer.tileHeight * sy;
126-
127- for (var row = 0; row < mapHeight; ++row)
128- {
129- for (var col = 0; col < mapWidth; ++col)
130- {
131- var tile = mapData[row][col];
132-
133- if (tile === null || tile.index === -1) { continue; }
134-
135- var tileX = tile.pixelX * sx - left;
136- var tileY = tile.pixelY * sy - top;
137- var cullW = camera.width + tileWidth;
138- var cullH = camera.height + tileHeight;
139-
140- if (tile.visible &&
141- tileX > -tileWidth && tileY > -tileHeight &&
142- tileX < cullW && tileY < cullH)
143- {
144- outputArray.push(tile);
145- }
146- }
147- } */
148-
14974 return outputArray ;
15075} ;
15176
0 commit comments