From 39a710727e12766e4343518f95bea08dce5c26ae Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sat, 27 Jan 2024 04:51:14 -0600 Subject: [PATCH] Fix file saving/loading for online mode. --- Adventures in Lestoria/Error.h | 16 ++++-- Adventures in Lestoria/LoadGameWindow.cpp | 13 +++-- Adventures in Lestoria/Menu.h | 3 -- Adventures in Lestoria/SaveFile.cpp | 49 ++++++++++++++++--- Adventures in Lestoria/SaveFile.h | 1 + Adventures in Lestoria/SaveFileWindow.cpp | 6 ++- .../ScrollableWindowComponent.h | 4 ++ Adventures in Lestoria/Version.h | 2 +- 8 files changed, 73 insertions(+), 21 deletions(-) diff --git a/Adventures in Lestoria/Error.h b/Adventures in Lestoria/Error.h index a2c30c73..35ec9549 100644 --- a/Adventures in Lestoria/Error.h +++ b/Adventures in Lestoria/Error.h @@ -41,9 +41,7 @@ All rights reserved. #include #include #include -#ifndef __EMSCRIPTEN__ - #include -#endif +#include #ifdef _DEBUG #define NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ ) @@ -73,7 +71,17 @@ All rights reserved. #define ERR(err) { \ std::stringstream errStream; \ errStream<ADD("Game Files Label",MenuLabel)(geom2d::rect{{-8,-12},{112,12}},"Load Game",1.0f,ComponentAttr::SHADOW|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END; - loadGameWindow->ADD("Game Files List",ScrollableWindowComponent)(geom2d::rect{{-8,4},{112,116}})END; - loadGameWindow->ADD("Online Game Files List",ScrollableWindowComponent)(geom2d::rect{{-8,4},{112,116}})END + loadGameWindow->ADD("Game Files List",ScrollableWindowComponent)(geom2d::rect{{-8,4},{112,116}})END ->Enable(false); + loadGameWindow->ADD("Online Game Files List",ScrollableWindowComponent)(geom2d::rect{{-8,4},{112,116}})END + ->Enable(true); loadGameWindow->ADD("Go Back Button",MenuComponent)(geom2d::rect{{24,124},{48,12}},"Back",[](MenuFuncData menu){Menu::CloseMenu();return true;})END; @@ -64,8 +65,12 @@ void Menu::InitializeLoadGameWindow(){ #pragma region Keyboard Navigation Rules loadGameWindow->SetupKeyboardNavigation( [](MenuType type,Data&returnData){ //On Open - if(SaveFile::GetSaveFileCount()>0){ - returnData=Component(type,"Game Files List")->GetComponents()[0]; + if(SaveFile::GetSaveFileCount()>0||SaveFile::GetOnlineSaveFileCount()>0){ + if(SaveFile::IsOnline()){ + returnData=Component(type,"Online Game Files List")->GetComponents()[0]; + }else{ + returnData=Component(type,"Game Files List")->GetComponents()[0]; + } }else{ returnData="Go Back Button"; } diff --git a/Adventures in Lestoria/Menu.h b/Adventures in Lestoria/Menu.h index f1c154cb..f516bd4c 100644 --- a/Adventures in Lestoria/Menu.h +++ b/Adventures in Lestoria/Menu.h @@ -133,9 +133,6 @@ public: component->depth=depth; } - if(components.count(componentKey)){ - ERR("WARNING! Key "<name=componentKey; components.Unlock(); //It's possible we can add a component later on, so we will make sure we remove the lock first. components[componentKey]=component; diff --git a/Adventures in Lestoria/SaveFile.cpp b/Adventures in Lestoria/SaveFile.cpp index 77c32567..2821f13d 100644 --- a/Adventures in Lestoria/SaveFile.cpp +++ b/Adventures in Lestoria/SaveFile.cpp @@ -51,7 +51,7 @@ INCLUDE_game size_t SaveFile::saveFileID=0; std::string SaveFile::saveFileName=""; std::string SaveFile::username=""; -bool SaveFile::onlineMode=false; +bool SaveFile::onlineMode=true; const size_t SaveFile::GetSaveFileCount(){ std::filesystem::create_directories("save_file_path"_S); @@ -64,6 +64,17 @@ const size_t SaveFile::GetSaveFileCount(){ return count; } +const size_t SaveFile::GetOnlineSaveFileCount(){ + std::filesystem::create_directories("save_file_path"_S); + size_t count=0; + if(std::filesystem::exists("save_file_path"_S+"metadata.dat"+"_online")){ + utils::datafile metadata; + utils::datafile::Read(metadata,"save_file_path"_S+"metadata.dat"+"_online"); + return metadata.GetKeys().size(); + } + return count; +} + const void SaveFile::SaveGame(){ std::filesystem::create_directories("save_file_path"_S); utils::datafile saveFile; @@ -109,12 +120,16 @@ const void SaveFile::SaveGame(){ saveFile["Chapter"].SetInt(game->GetCurrentChapter()); saveFile["Save Name"].SetString(std::string(GetSaveFileName())); saveFile["Game Time"].SetReal(game->GetRuntime()); - if(!onlineMode){ - utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID)); - } + utils::datafile::Write(saveFile,"save_file_path"_S+std::format("save.{:04}",saveFileID)); utils::datafile metadata; - if(std::filesystem::exists("save_file_path"_S+"metadata.dat")){ - utils::datafile::Read(metadata,"save_file_path"_S+"metadata.dat"); + if(onlineMode){ + if(std::filesystem::exists("save_file_path"_S+"metadata.dat"+"_online")){ + utils::datafile::Read(metadata,"save_file_path"_S+"metadata.dat"+"_online"); + } + }else{ + if(std::filesystem::exists("save_file_path"_S+"metadata.dat")){ + utils::datafile::Read(metadata,"save_file_path"_S+"metadata.dat"); + } } metadata.GetProperty(std::format("save{}",saveFileID)).SetReal(game->GetRuntime(),0U); metadata.GetProperty(std::format("save{}",saveFileID)).SetInt(game->GetCurrentChapter(),1U); @@ -123,6 +138,8 @@ const void SaveFile::SaveGame(){ metadata.GetProperty(std::format("save{}",saveFileID)).SetString(std::string(SaveFile::GetSaveFileName()),4U); if(!onlineMode){ utils::datafile::Write(metadata,"save_file_path"_S+"metadata.dat"); + }else{ + utils::datafile::Write(metadata,"save_file_path"_S+"metadata.dat"+"_online"); } utils::datafile::INITIAL_SETUP_COMPLETE=true; @@ -244,7 +261,7 @@ const void SaveFile::LoadGame(){ if(onlineMode){ Server_GetFile([&](std::string_view response){ if(response!="ERR"){ - std::ofstream file("save_file_path"_S+std::format("save.{:04}",saveFileID)+"_online"); + std::ofstream file("save_file_path"_S+std::format("save.{:04}",saveFileID)); file<(LOAD_GAME,"Game Files List"); + auto onlineGameFilesList=Component(LOAD_GAME,"Online Game Files List"); gameFilesList->RemoveAllComponents(); + onlineGameFilesList->RemoveAllComponents(); const size_t saveFileCount=GetSaveFileCount(); + const size_t onlineSaveFileCount=GetOnlineSaveFileCount(); utils::datafile metadata,online_metadata; if(!std::filesystem::exists("save_file_path"_S+"metadata.dat")){ utils::datafile::Write(metadata,"save_file_path"_S+"metadata.dat"); @@ -313,6 +333,18 @@ const void SaveFile::UpdateSaveGameData(){ offsetY+=49; } } + offsetY=0; + for(size_t i=0;iADD(std::format("Online Load File Button - Save {}",i),LoadFileButton)(geom2d::rect{{0,offsetY},{onlineGameFilesList->GetSize().x-13,48}},online_metadata[std::format("save{}",i)],i,[](MenuFuncData data){ + std::weak_ptrcomp=DYNAMIC_POINTER_CAST(data.component.lock()); + saveFileID=comp.lock()->getSaveFileID(); + SaveFile::LoadGame(); + return true; + },ButtonAttr::NONE)END; + offsetY+=49; + } + } }; auto LoadMetadataFromDB=[](){ auto gameFilesList=Component(LOAD_GAME,"Game Files List"); @@ -364,6 +396,7 @@ const void SaveFile::UpdateSaveGameData(){ file<respCal } const void SaveFile::Server_SaveFile(std::functionrespCallbackFunc){ std::stringstream fileContents; - std::ifstream file("save_file_path"_S+std::format("save.{:04}",saveFileID)+"_online"); + std::ifstream file("save_file_path"_S+std::format("save.{:04}",saveFileID)); while(file.good()){ int val=file.get(); if(val!=-1){ diff --git a/Adventures in Lestoria/SaveFile.h b/Adventures in Lestoria/SaveFile.h index 37ac98ee..a3cd2a9c 100644 --- a/Adventures in Lestoria/SaveFile.h +++ b/Adventures in Lestoria/SaveFile.h @@ -57,6 +57,7 @@ public: static const std::string_view GetSaveFileName(); static const void SetSaveFileName(std::string_view saveFileName); static const size_t GetSaveFileCount(); + static const size_t GetOnlineSaveFileCount(); static const bool IsOnline(); static void SetOnlineMode(bool online); static const std::string_view GetUserID(); diff --git a/Adventures in Lestoria/SaveFileWindow.cpp b/Adventures in Lestoria/SaveFileWindow.cpp index 8028cf0b..726f3849 100644 --- a/Adventures in Lestoria/SaveFileWindow.cpp +++ b/Adventures in Lestoria/SaveFileWindow.cpp @@ -49,7 +49,11 @@ void Menu::InitializeSaveFileWindow(){ saveFileWindow->ADD("Back Button",MenuComponent)(geom2d::rect{{-8,68},{48,12}},"Back",[](MenuFuncData data){Menu::CloseMenu();game->TextEntryEnable(false);return true;})END; saveFileWindow->ADD("Continue Button",MenuComponent)(geom2d::rect{{56,68},{48,12}},"Begin",MenuType::CLASS_SELECTION,[](MenuFuncData data){ SaveFile::SetSaveFileName(game->TextEntryGetString()); - SaveFile::SetSaveFileID(SaveFile::GetSaveFileCount()); + if(SaveFile::IsOnline()){ + SaveFile::SetSaveFileID(SaveFile::GetOnlineSaveFileCount()); + }else{ + SaveFile::SetSaveFileID(SaveFile::GetSaveFileCount()); + } game->TextEntryEnable(false); SaveFile::SaveGame(); return true; diff --git a/Adventures in Lestoria/ScrollableWindowComponent.h b/Adventures in Lestoria/ScrollableWindowComponent.h index 5390e39f..106cf39b 100644 --- a/Adventures in Lestoria/ScrollableWindowComponent.h +++ b/Adventures in Lestoria/ScrollableWindowComponent.h @@ -276,6 +276,10 @@ protected: public: template std::shared_ptr _AddComponent(std::string key,std::shared_ptrbutton){ + if(Menu::menus[parentMenu]->components.count(key)){ + ERR("WARNING! Key "<renderInMain=false; //Now we are in control! button->parentComponent=DYNAMIC_POINTER_CAST(Menu::menus[parentMenu]->components[this->GetName()]); diff --git a/Adventures in Lestoria/Version.h b/Adventures in Lestoria/Version.h index 96927060..354c2a0e 100644 --- a/Adventures in Lestoria/Version.h +++ b/Adventures in Lestoria/Version.h @@ -39,7 +39,7 @@ All rights reserved. #define VERSION_MAJOR 0 #define VERSION_MINOR 3 #define VERSION_PATCH 0 -#define VERSION_BUILD 6401 +#define VERSION_BUILD 6402 #define stringify(a) stringify_(a) #define stringify_(a) #a