#pragma once #include #include #include #include #include #include #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSky.hpp" #include "RendererSectionData.hpp" class Frustum; class GameState; class Texture; class Shader; class EventListener; class RenderState; class RendererWorld { struct SectionParsing { SectionsData data; RendererSectionData renderer; bool parsing = false; }; //General std::shared_ptr gs; std::unique_ptr listener; size_t numOfWorkers; size_t currentWorker = 0; std::vector workers; void WorkerFunction(size_t WorkerId); bool isRunning = true; const static size_t parsingBufferSize = 64; SectionParsing parsing[parsingBufferSize]; std::queue parseQueue; bool parseQueueNeedRemoveUnnecessary = false; void ParseQueueUpdate(); void ParseQeueueRemoveUnnecessary(); //Blocks std::vector renderList; std::map sections; void UpdateAllSections(VectorF playerPos); std::chrono::time_point globalTimeStart; //Entities std::vector entities; //Sky Texture *skyTexture; RendererSky rendererSky; public: RendererWorld(std::shared_ptr ptr); ~RendererWorld(); void Render(RenderState& renderState); void PrepareRender(); double MaxRenderingDistance; void Update(double timeToUpdate); GameState *GameStatePtr(); int culledSections = 0; inline void UpdateGameState(std::shared_ptr newPtr) { gs = newPtr; } };