• BackgroundRenderer.hpp
  • #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(); 
    
    };