diff --git a/src/files/engine_paths.cpp b/src/files/engine_paths.cpp new file mode 100644 index 00000000..2c0468bd --- /dev/null +++ b/src/files/engine_paths.cpp @@ -0,0 +1,58 @@ +#include "engine_paths.h" + +#include +#include +#include "../typedefs.h" + +#define SCREENSHOTS_FOLDER "screenshots" + +namespace fs = std::filesystem; +using std::string; +using fs::path; + +path EnginePaths::getUserfiles() const { + return userfiles; +} + +path EnginePaths::getResources() const { + return resources; +} + +path EnginePaths::getScreenshotFile(string ext) { + path folder = SCREENSHOTS_FOLDER; + if (!fs::is_directory(folder)) { + fs::create_directory(folder); + } + + auto t = std::time(nullptr); + auto tm = *std::localtime(&t); + + const char* format = "%Y-%m-%d_%H-%M-%S"; + std::stringstream ss; + ss << std::put_time(&tm, format); + string datetimestr = ss.str(); + + path filename = folder/path("screenshot-"+datetimestr+"."+ext); + uint index = 0; + while (fs::exists(filename)) { + filename = folder/path("screenshot-"+datetimestr+"-"+std::to_string(index)+"."+ext); + index++; + } + return filename; +} + +path EnginePaths::getWorldsFolder() { + return path("worlds"); +} + +bool EnginePaths::isWorldNameUsed(string name) { + return fs::exists(EnginePaths::getWorldsFolder()/fs::u8path(name)); +} + +void EnginePaths::setUserfiles(path folder) { + this->userfiles = folder; +} + +void EnginePaths::setResources(path folder) { + this->resources = folder; +} diff --git a/src/files/engine_paths.h b/src/files/engine_paths.h new file mode 100644 index 00000000..e9095258 --- /dev/null +++ b/src/files/engine_paths.h @@ -0,0 +1,22 @@ +#ifndef FILES_ENGINE_PATHS_H_ +#define FILES_ENGINE_PATHS_H_ + +#include +#include + +class EnginePaths { + std::filesystem::path userfiles {"."}; + std::filesystem::path resources {"res"}; +public: + std::filesystem::path getUserfiles() const; + std::filesystem::path getResources() const; + + std::filesystem::path getScreenshotFile(std::string ext); + std::filesystem::path getWorldsFolder(); + bool isWorldNameUsed(std::string name); + + void setUserfiles(std::filesystem::path folder); + void setResources(std::filesystem::path folder); +}; + +#endif // FILES_ENGINE_PATHS_H_ \ No newline at end of file