Task interface

This commit is contained in:
MihailRis
2024-04-05 14:19:02 +03:00
parent 84c7c16860
commit c1ab97eb15
5 changed files with 102 additions and 28 deletions
+6 -1
View File
@@ -77,6 +77,7 @@ void WorldConverter::convertNext() {
}
convert_task task = tasks.front();
tasks.pop();
tasksDone++;
if (!fs::is_regular_file(task.file))
return;
@@ -95,6 +96,10 @@ void WorldConverter::write() {
wfile->write(nullptr, content);
}
uint WorldConverter::getTotalTasks() const {
uint WorldConverter::getWorkRemaining() const {
return tasks.size();
}
uint WorldConverter::getWorkDone() const {
return tasksDone;
}
+27 -4
View File
@@ -4,7 +4,10 @@
#include <queue>
#include <memory>
#include <filesystem>
#include "../typedefs.h"
#include "../delegates.h"
#include "../interfaces/Task.h"
namespace fs = std::filesystem;
@@ -21,25 +24,45 @@ struct convert_task {
fs::path file;
};
class WorldConverter {
class WorldConverter : public Task {
WorldFiles* wfile;
std::shared_ptr<ContentLUT> const lut;
const Content* const content;
std::queue<convert_task> tasks;
runnable onComplete;
uint tasksDone = 0;
void convertPlayer(fs::path file);
void convertRegion(fs::path file);
public:
WorldConverter(fs::path folder, const Content* content,
std::shared_ptr<ContentLUT> lut);
WorldConverter(
fs::path folder, const Content* content,
std::shared_ptr<ContentLUT> lut
);
~WorldConverter();
bool hasNext() const;
void convertNext();
void setOnComplete(runnable callback) {
this->onComplete = callback;
}
void update() override {
convertNext();
if (onComplete && !hasNext()) {
onComplete();
}
}
void terminate() override {
tasks = {};
}
void write();
uint getTotalTasks() const;
uint getWorkRemaining() const override;
uint getWorkDone() const override;
};
#endif // FILES_WORLD_CONVERTER_H_