#ifndef GRAPHICS_RENDER_WORLD_RENDERER_HPP_ #define GRAPHICS_RENDER_WORLD_RENDERER_HPP_ #include #include #include #include #include #include class Level; class Player; class Camera; class Batch3D; class LineBatch; class ChunksRenderer; class Shader; class Frustum; class Engine; class Chunks; class LevelFrontend; class Skybox; class PostProcessing; class DrawContext; class ModelBatch; struct EngineSettings; namespace model { struct Model; } class WorldRenderer { Engine* engine; Level* level; Player* player; std::unique_ptr frustumCulling; std::unique_ptr lineBatch; std::unique_ptr renderer; std::unique_ptr skybox; std::unique_ptr batch3d; std::unique_ptr modelBatch; float timer = 0.0f; bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling); void drawChunks(Chunks* chunks, Camera* camera, Shader* shader); /// @brief Render block selection lines void renderBlockSelection(); /// @brief Render lines (selection and debug) /// @param camera active camera /// @param linesShader shader used void renderLines(Camera* camera, Shader* linesShader); /// @brief Render all debug lines (chunks borders, coord system guides) /// @param context graphics context /// @param camera active camera /// @param linesShader shader used void renderDebugLines( const DrawContext& context, Camera* camera, Shader* linesShader ); public: static bool showChunkBorders; static bool showEntitiesDebug; WorldRenderer(Engine* engine, LevelFrontend* frontend, Player* player); ~WorldRenderer(); void draw( const DrawContext& context, Camera* camera, bool hudVisible, bool pause, float delta, PostProcessing* postProcessing ); void drawBorders(int sx, int sy, int sz, int ex, int ey, int ez); /// @brief Render level without diegetic interface /// @param context graphics context /// @param camera active camera /// @param settings engine settings void renderLevel( const DrawContext& context, Camera* camera, const EngineSettings& settings, bool pause ); }; #endif // GRAPHICS_RENDER_WORLD_RENDERER_HPP_