mine2d/Mine2d/game/frontend/renderer/BackgroundRenderer.cs

49 lines
1.4 KiB
C#

using Mine2d.engine;
namespace Mine2d.game.frontend.renderer;
public class BackgroundRenderer : IRenderer
{
private readonly IntPtr texture;
public BackgroundRenderer()
{
var rl = Context.Get().ResourceLoader;
var (ptr, size) = rl.LoadToIntPtr("assets.background.png");
var sdlBuffer = SDL_RWFromMem(ptr, size);
var surface = IMG_Load_RW(sdlBuffer, 1);
this.texture = Context.Get().Renderer.CreateTextureFromSurface(surface);
SDL_FreeSurface(surface);
}
~BackgroundRenderer()
{
SDL_DestroyTexture(this.texture);
}
public void Render()
{
var ctx = Context.Get();
var camera = ctx.FrontendGameState.Camera;
var scale = ctx.FrontendGameState.Settings.GameScale;
var renderer = ctx.Renderer;
var (w, h) = ctx.Window.GetSize();
var offsetX = camera.Position.X / scale % 16;
var offsetY = camera.Position.Y / scale % 16;
w /= scale;
h /= scale;
for (var x = -16; x < w + 16; x += 16)
{
for (var y = -16; y < h + 16; y += 16)
{
var rx = (x - (int)offsetX) * scale;
var ry = (y - (int)offsetY) * scale;
var rw = 16 * scale;
var rh = 16 * scale;
renderer.DrawTexture(this.texture, rx, ry, rw, rh);
}
}
}
}