game tick service

This commit is contained in:
Vinzenz Schroeter 2024-04-06 21:15:26 +02:00
commit 1a20fa1fb6

View file

@ -1,10 +1,10 @@
namespace TanksServer;
internal class MapDrawer(MapService map)
internal class MapDrawer(MapService map):ITickStep
{
private const uint GameFieldPixelCount = MapService.PixelsPerRow * MapService.PixelsPerColumn;
public void DrawInto(DisplayPixelBuffer buf)
private void DrawInto(DisplayPixelBuffer buf)
{
for (var tileY = 0; tileY < MapService.TilesPerColumn; tileY++)
for (var tileX = 0; tileX < MapService.TilesPerRow; tileX++)
@ -23,7 +23,7 @@ internal class MapDrawer(MapService map)
}
}
public DisplayPixelBuffer CreateGameFieldPixelBuffer()
private DisplayPixelBuffer CreateGameFieldPixelBuffer()
{
var data = new byte[10 + GameFieldPixelCount / 8];
var result = new DisplayPixelBuffer(data)
@ -37,4 +37,20 @@ internal class MapDrawer(MapService map)
};
return result;
}
private DisplayPixelBuffer? _lastFrame;
public DisplayPixelBuffer LastFrame
{
get => _lastFrame ?? throw new InvalidOperationException("first frame not yet drawn");
private set => _lastFrame = value;
}
public Task TickAsync()
{
var buffer = CreateGameFieldPixelBuffer();
DrawInto(buffer);
LastFrame = buffer;
return Task.CompletedTask;
}
}