#pragma once #include "AbstractFlat.hpp" #include "surrounding.hpp" #include "../data/safe_queue.hpp" #include "../data/safe_priority_queue.hpp" #include "../data/circular_buffer.hpp" #include "../render/buffer/ShortIndexed.hpp" #include using namespace data; namespace contouring { /// Stupid cubes 1:1 contouring class FlatSurroundingBox: public AbstractFlat { public: FlatSurroundingBox(const std::string&); virtual ~FlatSurroundingBox(); void update(const voxel_pos&, const world::area_map&) override; /// Chunk data change void onUpdate(const area_ &, const chunk_pos &, const world::ChunkContainer &, geometry::Faces) override; /// Chunk existante ping /// @note notify for chunks entering view while moving void onNotify(const area_ &, const chunk_pos &, const world::ChunkContainer &) override; protected: safe_priority_queue_map, surrounding::faces, int, area_hash> loadQueue; safe_queue, buffer::ShortIndexed::Data>> loadedQueue; bool running = true; std::vector workers; void enqueue(const area_ &, const chunk_pos& offset, const world::ChunkContainer &); private: static inline bool isTransparent(const surrounding::faces &surrounding, const std::pair &idx); static void render(const surrounding::faces &surrounding, std::vector &vertices); }; } // namespace contouring