コード例 #1
0
        Rectangle ITiledTerrainRenderer.TemplateBounds(TerrainTemplateInfo template)
        {
            Rectangle?templateRect = null;
            var       tileSize     = map.Grid.TileSize;

            var i = 0;

            for (var y = 0; y < template.Size.Y; y++)
            {
                for (var x = 0; x < template.Size.X; x++)
                {
                    var tile = new TerrainTile(template.Id, (byte)(i++));
                    if (!terrainInfo.TryGetTileInfo(tile, out var tileInfo))
                    {
                        continue;
                    }

                    var sprite = tileCache.TileSprite(tile);
                    var u      = map.Grid.Type == MapGridType.Rectangular ? x : (x - y) / 2f;
                    var v      = map.Grid.Type == MapGridType.Rectangular ? y : (x + y) / 2f;

                    var tl   = new float2(u * tileSize.Width, (v - 0.5f * tileInfo.Height) * tileSize.Height) - 0.5f * sprite.Size;
                    var rect = new Rectangle((int)(tl.X + sprite.Offset.X), (int)(tl.Y + sprite.Offset.Y), (int)sprite.Size.X, (int)sprite.Size.Y);
                    templateRect = templateRect.HasValue ? Rectangle.Union(templateRect.Value, rect) : rect;
                }
            }

            return(templateRect ?? Rectangle.Empty);
        }