add tile grid addition support to CustomTextureAtlas
This commit is contained in:
parent
d1f874e32f
commit
faf5d09ca1
|
@ -55,6 +55,42 @@ namespace Blarg.GameFramework.Graphics.Atlas
|
||||||
return Add(ref region);
|
return Add(ref region);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int AddGrid(int startX, int startY, int tileWidth, int tileHeight, int numTilesX, int numTilesY, int tileBorder = 0)
|
||||||
|
{
|
||||||
|
int actualTileWidth = tileWidth + tileBorder;
|
||||||
|
int actualTileHeight = tileHeight + tileBorder;
|
||||||
|
|
||||||
|
int numAdded = 0;
|
||||||
|
|
||||||
|
for (int y = 0; y < numTilesY; ++y)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < numTilesX; ++x)
|
||||||
|
{
|
||||||
|
var tile = new TextureRegion();
|
||||||
|
|
||||||
|
// pixel location/dimensions
|
||||||
|
tile.Dimensions.Left = startX + tileBorder + x * actualTileWidth;
|
||||||
|
tile.Dimensions.Top = startY + tileBorder + y * actualTileHeight;
|
||||||
|
tile.Dimensions.Right = tile.Dimensions.Left + actualTileWidth - tileBorder;
|
||||||
|
tile.Dimensions.Bottom = tile.Dimensions.Top + actualTileHeight - tileBorder;
|
||||||
|
|
||||||
|
// texture coordinates
|
||||||
|
// HACK: subtract TexCoordEdgeOffset from the bottom right edges to
|
||||||
|
// get around floating point rounding errors (adjacent tiles will
|
||||||
|
// slightly bleed in otherwise)
|
||||||
|
tile.TexCoords.Left = (tile.Dimensions.Left - tileBorder + TexCoordEdgeOffset) / (float)Width;
|
||||||
|
tile.TexCoords.Top = (tile.Dimensions.Top - tileBorder + TexCoordEdgeOffset) / (float)Height;
|
||||||
|
tile.TexCoords.Right = ((float)tile.Dimensions.Right + tileBorder - TexCoordEdgeOffset) / (float)Width;
|
||||||
|
tile.TexCoords.Bottom = ((float)tile.Dimensions.Bottom + tileBorder - TexCoordEdgeOffset) / (float)Height;
|
||||||
|
|
||||||
|
Tiles.Add(tile);
|
||||||
|
++numAdded;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numAdded;
|
||||||
|
}
|
||||||
|
|
||||||
public void Reset()
|
public void Reset()
|
||||||
{
|
{
|
||||||
Tiles.Clear();
|
Tiles.Clear();
|
||||||
|
|
Reference in a new issue