#pragma once
#include <Gorgon/Graphics/Layer.h>
#include <Gorgon/Game/Renderer/Renderer.h>
struct Background { inline static std::string image_path = "resource/bg.jpg"; };
class ImageBackgroundRenderer : public Gorgon::Game::Rendering::base_tile_renderer<Background, ImageBackgroundRenderer> {
public:
using MapType = Background;
ImageBackgroundRenderer() : Base() {}
ImageBackgroundRenderer(const std::initializer_list<Background>& map_list) : Base(map_list) {}
ImageBackgroundRenderer(Gorgon::Graphics::Layer& target_layer, const std::vector<Background>& map_list) : Base(target_layer, map_list) {}
ImageBackgroundRenderer(Gorgon::Graphics::Layer& target_layer, const std::initializer_list<Background>& map_list) : Base(target_layer, map_list) {}
private:
using Base = Gorgon::Game::Rendering::base_tile_renderer<Background, ImageBackgroundRenderer>;
friend class Gorgon::Game::Rendering::base_tile_renderer<Background, ImageBackgroundRenderer>;
using Base::target_layer;
using Base::map;
using Base::RepeatCyclic;
static inline bool prepared = false, drawable_ready = false;
void render_impl(int off_x, int off_y) {
if (not prepared) { ASSERT(false, "Not prepared!"); }
bmp.DrawStretched(*target_layer, 0, 0, 960, 640);
}
void generate_drawables() { drawable_ready = true; }
void prepare_resources() {
if (prepared) return;
if (drawable_ready) return;
bmp.Import(Background::image_path);
bmp.Prepare();
prepared = true;
}
static inline Gorgon::Graphics::Bitmap bmp = Gorgon::Graphics::Bitmap();
};