protected virtual void AggregateTiles(TileGridBlock block, ITileDefinitionSource tileDefinitionSource, GraphicsContext graphicsContext, ref Vector2 cellSize) { var blockSize = block.BlockSize; RectangleF outRect = new RectangleF(); outRect.X = block.Origin.X; outRect.Y = block.Origin.Y; outRect.Width = cellSize.X; outRect.Height = cellSize.Y; for (int y = 0; y < blockSize; y++) { for (int x = 0; x < blockSize; x++) { var tileRef = block.GetCell(x, y); if (!tileRef.IsEmpty) { var tile = tileDefinitionSource.GetTile(ref tileRef); if (tile != null && tile.CanCacheTileMesh) { var frame = tile[0]; Add(frame.Texture, ref frame.TextureRegion, ref outRect); } } outRect.X += cellSize.X; } outRect.X = block.Origin.X; outRect.Y -= cellSize.Y; } }
public TileMesh(ITileMeshDrawBuilder tileMeshDrawBuilder, ITileDefinitionSource tileDefinitionSource) { this.tileMeshDrawBuilder = tileMeshDrawBuilder; this.tileDefinitionSource = tileDefinitionSource; tileMeshDraws = new Dictionary <ShortPoint, TileMeshDraw>(); previousTileMeshDraws = new Dictionary <ShortPoint, TileMeshDraw>(); tileMeshDrawsForRecycle = new List <TileMeshDraw>(); pendingBlocks = new List <TileGridBlock>(); }
public virtual TileMeshDraw Build(TileGridBlock block, ITileDefinitionSource tileDefinitionSource, GraphicsContext graphicsContext, ref Vector2 cellSize) { TileMeshDraw tileMeshDraw = null; AggregateTiles(block, tileDefinitionSource, graphicsContext, ref cellSize); CompleteBuild(graphicsContext, block.BlockSize * block.BlockSize, ref tileMeshDraw); return(tileMeshDraw); }
public virtual void Recycle(TileMeshDraw tileMeshDraw, TileGridBlock block, ITileDefinitionSource tileDefinitionSource, GraphicsContext graphicsContext, ref Vector2 cellSize) { AggregateTiles(block, tileDefinitionSource, graphicsContext, ref cellSize); CompleteBuild(graphicsContext, block.BlockSize * block.BlockSize, ref tileMeshDraw); }