[BurstCompile]
struct NativeArray3D<T> : System.IDisposable where T : unmanaged
{
private NativeArray<T> backing;
public int sizeX;
public int sizeY;
public int sizeZ;
public NativeArray3D(int x, int y)
{
backing = new(x * y, Allocator.Temp);
this.sizeX = x;
this.sizeY = y;
this.sizeZ = 1;
}
public NativeArray3D(int x, int y, int z)
{
backing = new(x * y * z, Allocator.Temp);
this.sizeX = x;
this.sizeY = y;
this.sizeZ = z;
}
public T this[int x, int y]
{
get
{
if (x >= sizeX || y >= sizeY)
{
UnityEngine.Debug.LogError($"Bogus: {x}, {y}");
}
return backing[x * sizeY + y];
}
set
{
backing[x * sizeY + y] = value;
}
}
public T this[int x, int y, int z]
{
get
{
if (x < 0 || y < 0 || z < 0 || x >= sizeX || y >= sizeY || z >= sizeZ)
{
UnityEngine.Debug.LogError($"Bogus: {x}, {y}, {z}");
}
return backing[x * sizeY * sizeZ + y * sizeZ + z];
}
set
{
if (x < 0 || y < 0 || z < 0 || x >= sizeX || y >= sizeY || z >= sizeZ)
{
UnityEngine.Debug.LogError($"Bogus: {x}, {y}, {z}");
}
backing[x * sizeY * sizeZ + y * sizeZ + z] = value;
}
}
public void Dispose()
{
backing.Dispose();
}
}