#ifndef MINECRAFT_WORLD_WORLD_H_ #define MINECRAFT_WORLD_WORLD_H_ #include "../common.hpp" #include "../renderer/camera.hpp" #include "chunk/chunk.hpp" #include #include #include #include class Shader; class World { public: // Default constructor World(); // Preps the render threads and loads all of the shaders void LoadWorld(); void SetTextureMap(GLuint map); // Takes world coordinates and gets a chunks coordinates glm::vec2 GetChunkCoords(glm::vec3 wordCoords); std::vector> GetRenderableChunks(); void Render(std::shared_ptr camera); ~World(); private: // GL stuff // Main texture map id GLuint m_textureMapID; // Shaders indexed by name std::map> m_shaders; // Threads used for chunk generation std::vector m_generatorThreads; bool m_generatorRunning = false; // Chuks // Indexed by chunk coorinates std::unordered_map> m_chunks; std::queue m_chunkUpdatesQueue; std::queue m_chunkLoaderQueue; std::mutex m_chunkMutex; void m_loadChunks(); }; #endif