using TanksServer.GameLogic;

namespace TanksServer.Graphics;

internal sealed class DrawTanksStep(MapEntityManager entityManager) : IDrawStep
{
    private readonly SpriteSheet _tankSprites =
        SpriteSheet.FromImageFile("assets/tank.png", MapService.TileSize, MapService.TileSize);

    public void Draw(GamePixelGrid pixels)
    {
        foreach (var tank in entityManager.Tanks)
        {
            var tankPosition = tank.Bounds.TopLeft;

            for (byte dy = 0; dy < MapService.TileSize; dy++)
            for (byte dx = 0; dx < MapService.TileSize; dx++)
            {
                var pixel = _tankSprites[tank.Orientation][dx, dy];
                if (!pixel.HasValue || !pixel.Value)
                    continue;

                var (x, y) = tankPosition.GetPixelRelative(dx, dy);
                pixels[x, y].EntityType = GamePixelEntityType.Tank;
                pixels[x, y].BelongsTo = tank.Owner;
            }
        }
    }
}