diff --git a/source/code/stageclearhandler.cpp b/source/code/stageclearhandler.cpp index bf62506..d901d08 100644 --- a/source/code/stageclearhandler.cpp +++ b/source/code/stageclearhandler.cpp @@ -25,10 +25,28 @@ http://blockattack.net #include "SDL.h" #include #include -#include "physfs_stream.hpp" +#include +#include "cereal/cereal.hpp" +#include "cereal/types/vector.hpp" +#include "cereal/archives/json.hpp" +#include "sago/SagoMisc.hpp" //paths -const char* const stageClearSaveName = "stageClear.SCsave"; +const char* const stageClearSaveName = "stageClear.json.SCsave"; + +struct StageClearElement { + bool cleared = false; + int time = 0; + int score = 0; + + template + void serialize(Archive & archive) + { + archive( cereal::make_nvp("cleared", cleared), cereal::make_nvp("time", time), cereal::make_nvp("score", score) ); + } +}; + +std::vector stages(nrOfStageLevels); std::vector stageCleared(nrOfStageLevels); //vector that tells if a stage is cleared std::vector stageTimes(nrOfStageLevels); //For statistical puposes @@ -37,79 +55,47 @@ Sint32 totalScore = 0; Sint32 totalTime = 0; using namespace std; + +static void SaveStageClearStages() { + std::stringstream ss; + { + cereal::JSONOutputArchive archive(ss); + archive(cereal::make_nvp("stages", stages)); + } + sago::WriteFileContent(stageClearSaveName, ss.str()); +} void StageClearSetClear(int Level, int score, int time) { - stageCleared[Level] = true; + + stages.at(Level).cleared = true; int gameEndedAfter = time; - if (stageScores[Level](&tempBool), sizeof(bool)); - } - for (int i=0; i(&tempUInt32), sizeof(Uint32)); - } - for (int i=0; i(&tempUInt32), sizeof(Uint32)); - } - outfile.flush(); - outfile.close(); + if (stages.at(Level).score(&tempBool),sizeof(bool)); - stageCleared[i]=tempBool; - } - if (!stageFile.eof()) { - for (int i=0; i(&tempUInt32),sizeof(Uint32)); - } - stageScores[i]=tempUInt32; - totalScore+=tempUInt32; - } - for (int i=0; i(&tempUInt32),sizeof(Uint32)); - } - stageTimes[i]=tempUInt32; - totalTime += tempUInt32; - } + std::string readFileContent = sago::GetFileContent(stageClearSaveName); + if (readFileContent.length() > 0) { + std::stringstream ss(readFileContent); + { + cereal::JSONInputArchive archive(ss); + archive(cereal::make_nvp("stages", stages)); } - else { - for (int i=0; i