diff --git a/inc/sys.hpp b/inc/sys.hpp new file mode 100644 index 0000000..3a6db59 --- /dev/null +++ b/inc/sys.hpp @@ -0,0 +1,8 @@ + + +namespace sys +{ + size_t saveDataToFile(const char *filename, const char *data, size_t size); + size_t loadDataFromFile(const char *filename, char *data, size_t size); + bool fileExists(const char *filename); +} \ No newline at end of file diff --git a/inc/values/Dna.hpp b/inc/values/Dna.hpp index 4f38e86..af2ee4d 100644 --- a/inc/values/Dna.hpp +++ b/inc/values/Dna.hpp @@ -4,8 +4,6 @@ #include #include -#include - #define MAX_DEPTH 8 #define MAX_POSIBLE_DEPTH 11 static_assert(MAX_DEPTH <= MAX_POSIBLE_DEPTH); diff --git a/src/App.cpp b/src/App.cpp index 4cbc492..0c8296f 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -14,8 +14,6 @@ void App::init(int screenWidth, int screenHeight) this->screenHeight = screenHeight; this->canvas.init(screenWidth); - mrand::setSeed(1); - canvasTexure = LoadRenderTexture(screenWidth, screenWidth); manager.init(); unit = manager.next(); diff --git a/src/sys.cpp b/src/sys.cpp new file mode 100644 index 0000000..aeadf35 --- /dev/null +++ b/src/sys.cpp @@ -0,0 +1,57 @@ +#include +#include +#include "sys.hpp" +#include + +namespace sys +{ + + const char *transformFilePath(const char *filename) + { +#if defined(PLATFORM_ANDROID) + return TextFormat( + "%s/%s", GetAndroidApp()->activity->internalDataPath, filename); +#else + return filename; +#endif + } + + size_t saveDataToFile(const char *filename, const char *data, size_t size) + { + const char *saveFilePath = transformFilePath(filename); + + FILE *file = fopen(saveFilePath, "wb"); + if (file == NULL) + return false; + + size_t ret = fwrite(data, 1, size, file); + fclose(file); + + return ret; + } + + size_t loadDataFromFile(const char *filename, char *data, size_t size) + { + const char *saveFilePath = transformFilePath(filename); + + FILE *file = fopen(saveFilePath, "rb"); + if (file == NULL) + return false; + + size_t ret = fread(data, 1, size, file); + fclose(file); + + return ret; + } + + bool fileExists(const char *filename) + { + const char *saveFilePath = transformFilePath(filename); + + bool result = false; + if (access(saveFilePath, F_OK) != -1) + result = true; + return result; + } + +} \ No newline at end of file diff --git a/src/values/DnaManager.cpp b/src/values/DnaManager.cpp index e3cf150..efe4bd2 100644 --- a/src/values/DnaManager.cpp +++ b/src/values/DnaManager.cpp @@ -1,12 +1,27 @@ +#include + #include "values/DnaManager.hpp" #include "values/mrand.hpp" +#include "sys.hpp" + +#include void DnaManager::init() { - randSeed.a = mrand::getInt(); - randSeed.b = mrand::getInt(); - randSeed.c = mrand::getInt(); - randSeed.d = mrand::getInt(); + mrand::setSeed(time(nullptr)); + + if (sys::fileExists("id")) + { + sys::loadDataFromFile("id", (char *)&randSeed, sizeof(uint128)); + } + else + { + randSeed.a = mrand::getInt(); + randSeed.b = mrand::getInt(); + randSeed.c = mrand::getInt(); + randSeed.d = mrand::getInt(); + sys::saveDataToFile("id", (const char *)&randSeed, sizeof(uint128)); + } vector.resize(NUM_PER_GEN); for (std::size_t i = 0; i < NUM_PER_GEN; i++) @@ -22,11 +37,6 @@ void DnaManager::deinit() Unit DnaManager::next() { - if (queued.empty()) - { - return {nullptr, Liked::tbd}; - } - Dna *ret = queued.front(); queued.pop_front(); showed.push_back(ret);