#pragma once #include #include #include #include "delegates.hpp" #include "interfaces/Task.hpp" #include "typedefs.hpp" namespace fs = std::filesystem; class Content; class ContentLUT; class WorldFiles; enum class convert_task_type { region, player }; struct convert_task { convert_task_type type; fs::path file; }; class WorldConverter : public Task { std::unique_ptr wfile; std::shared_ptr const lut; const Content* const content; std::queue tasks; runnable onComplete; uint tasksDone = 0; void convertPlayer(const fs::path& file) const; void convertRegion(const fs::path& file) const; public: WorldConverter( const fs::path& folder, const Content* content, std::shared_ptr lut ); ~WorldConverter(); void convert(const convert_task& task) const; void convertNext(); void setOnComplete(runnable callback); void write(); void update() override; void terminate() override; bool isActive() const override; void waitForEnd() override; uint getWorkTotal() const override; uint getWorkDone() const override; static std::shared_ptr startTask( const fs::path& folder, const Content* content, const std::shared_ptr& lut, const runnable& onDone, bool multithreading ); };