Terrain/TerrainData.cs
namespace HC3.Terrain;
#nullable enable
/// <summary>
/// A grid of tiles with a certain size that can be accessed by x and y coordinate.
/// </summary>
public partial interface ITerrainData
{
RectInt Bounds { get; }
TerrainTile this[Vector2Int index] { get; }
void CopyTo( RectInt srcRange, TileArraySlice dst );
}
public static class TerrainDataExtensions
{
public static void CopyToClamped<T>( this T data, RectInt srcRange, TileArraySlice dst )
where T : ITerrainData
{
var min = Vector2Int.Max( data.Bounds.Position, srcRange.Position );
var max = Vector2Int.Min( data.Bounds.Position + data.Bounds.Size, srcRange.Position + srcRange.Size );
if ( max.x <= min.x || max.y <= min.y ) return;
data.CopyTo( new RectInt( min, max - min ),
dst.Slice( new RectInt( min - srcRange.Position, max - min ) ) );
}
}