Make Lightmap a class and add AddLayer method

This commit is contained in:
Jarrod Doyle 2024-10-05 18:13:30 +01:00
parent 1f05663460
commit 6d665302d2
Signed by: Jayrude
GPG Key ID: 38B57B16E7C0ADF7
1 changed files with 19 additions and 14 deletions

View File

@ -150,7 +150,7 @@ public class WorldRep : IChunk
} }
} }
public struct Lightmap public class Lightmap
{ {
public List<byte[]> Pixels { get; set; } public List<byte[]> Pixels { get; set; }
@ -174,7 +174,7 @@ public class WorldRep : IChunk
Bpp = bytesPerPixel; Bpp = bytesPerPixel;
} }
public readonly Vector4 GetPixel(uint layer, uint x, uint y) public Vector4 GetPixel(uint layer, uint x, uint y)
{ {
if (layer >= Layers || x >= Width || y >= Height) if (layer >= Layers || x >= Width || y >= Height)
{ {
@ -198,7 +198,7 @@ public class WorldRep : IChunk
} }
} }
public readonly byte[] AsBytesRgba(int layer) public byte[] AsBytesRgba(int layer)
{ {
ArgumentOutOfRangeException.ThrowIfLessThan(layer, 0, nameof(layer)); ArgumentOutOfRangeException.ThrowIfLessThan(layer, 0, nameof(layer));
ArgumentOutOfRangeException.ThrowIfGreaterThan(layer, Layers, nameof(layer)); ArgumentOutOfRangeException.ThrowIfGreaterThan(layer, Layers, nameof(layer));
@ -238,7 +238,7 @@ public class WorldRep : IChunk
} }
// TODO: This ONLY works for rgba (bpp = 4)!!! // TODO: This ONLY works for rgba (bpp = 4)!!!
public readonly void AddLight(int layer, int x, int y, float r, float g, float b) public void AddLight(int layer, int x, int y, float r, float g, float b)
{ {
var idx = (x + y * Width) * Bpp; var idx = (x + y * Width) * Bpp;
var pLayer = Pixels[layer]; var pLayer = Pixels[layer];
@ -248,7 +248,7 @@ public class WorldRep : IChunk
pLayer[idx + 3] = 255; pLayer[idx + 3] = 255;
} }
public readonly void AddLight(int layer, int x, int y, Vector3 color, float strength, bool hdr) public void AddLight(int layer, int x, int y, Vector3 color, float strength, bool hdr)
{ {
if (hdr) if (hdr)
{ {
@ -276,15 +276,9 @@ public class WorldRep : IChunk
public void Reset(Vector3 ambientLight, bool hdr) public void Reset(Vector3 ambientLight, bool hdr)
{ {
var bytesPerLayer = Width * Height * Bpp; Layers = 0;
Pixels.Clear(); Pixels.Clear();
Pixels.Add(new byte[bytesPerLayer]); AddLayer();
Layers = 1;
for (var j = 0; j < bytesPerLayer; j++)
{
Pixels[0][j] = 0;
}
for (var y = 0; y < Height; y++) for (var y = 0; y < Height; y++)
{ {
@ -295,7 +289,18 @@ public class WorldRep : IChunk
} }
} }
public readonly void Write(BinaryWriter writer) public void AddLayer()
{
var bytesPerLayer = Width * Height * Bpp;
Pixels.Add(new byte[bytesPerLayer]);
for (var j = 0; j < bytesPerLayer; j++)
{
Pixels[Layers][j] = 0;
}
Layers++;
}
public void Write(BinaryWriter writer)
{ {
foreach (var layer in Pixels) foreach (var layer in Pixels)
{ {