Fix file saving/loading for online mode.
This commit is contained in:
parent
7961e3d8aa
commit
39a710727e
@ -41,9 +41,7 @@ All rights reserved.
|
|||||||
#include <format>
|
#include <format>
|
||||||
#include <any>
|
#include <any>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#ifndef __EMSCRIPTEN__
|
|
||||||
#include <source_location>
|
#include <source_location>
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
#define NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
|
#define NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
|
||||||
@ -73,7 +71,17 @@ All rights reserved.
|
|||||||
#define ERR(err) { \
|
#define ERR(err) { \
|
||||||
std::stringstream errStream; \
|
std::stringstream errStream; \
|
||||||
errStream<<err; \
|
errStream<<err; \
|
||||||
std::cout<<errStream.str(); }
|
Error::log(errStream,std::source_location::current());}
|
||||||
|
|
||||||
|
class Error{
|
||||||
|
public:
|
||||||
|
inline static void log(std::stringstream&str,std::source_location loc){
|
||||||
|
std::cout<<loc.file_name()<<"("<<loc.line()<<":"<<loc.column()<<") "<<loc.function_name()<<": "<<str.str()<<std::endl;
|
||||||
|
#ifdef __DEBUG__
|
||||||
|
throw;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#define _CrtDumpMemoryLeaks() ((int)0)
|
#define _CrtDumpMemoryLeaks() ((int)0)
|
||||||
#endif
|
#endif
|
||||||
|
@ -44,9 +44,10 @@ void Menu::InitializeLoadGameWindow(){
|
|||||||
Menu*loadGameWindow=CreateMenu(LOAD_GAME,CENTERED,vi2d{96,120});
|
Menu*loadGameWindow=CreateMenu(LOAD_GAME,CENTERED,vi2d{96,120});
|
||||||
|
|
||||||
loadGameWindow->ADD("Game Files Label",MenuLabel)(geom2d::rect<float>{{-8,-12},{112,12}},"Load Game",1.0f,ComponentAttr::SHADOW|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
|
loadGameWindow->ADD("Game Files Label",MenuLabel)(geom2d::rect<float>{{-8,-12},{112,12}},"Load Game",1.0f,ComponentAttr::SHADOW|ComponentAttr::OUTLINE|ComponentAttr::BACKGROUND)END;
|
||||||
loadGameWindow->ADD("Game Files List",ScrollableWindowComponent)(geom2d::rect<float>{{-8,4},{112,116}})END;
|
loadGameWindow->ADD("Game Files List",ScrollableWindowComponent)(geom2d::rect<float>{{-8,4},{112,116}})END
|
||||||
loadGameWindow->ADD("Online Game Files List",ScrollableWindowComponent)(geom2d::rect<float>{{-8,4},{112,116}})END
|
|
||||||
->Enable(false);
|
->Enable(false);
|
||||||
|
loadGameWindow->ADD("Online Game Files List",ScrollableWindowComponent)(geom2d::rect<float>{{-8,4},{112,116}})END
|
||||||
|
->Enable(true);
|
||||||
loadGameWindow->ADD("Go Back Button",MenuComponent)(geom2d::rect<float>{{24,124},{48,12}},"Back",[](MenuFuncData menu){Menu::CloseMenu();return true;})END;
|
loadGameWindow->ADD("Go Back Button",MenuComponent)(geom2d::rect<float>{{24,124},{48,12}},"Back",[](MenuFuncData menu){Menu::CloseMenu();return true;})END;
|
||||||
|
|
||||||
|
|
||||||
@ -64,8 +65,12 @@ void Menu::InitializeLoadGameWindow(){
|
|||||||
#pragma region Keyboard Navigation Rules
|
#pragma region Keyboard Navigation Rules
|
||||||
loadGameWindow->SetupKeyboardNavigation(
|
loadGameWindow->SetupKeyboardNavigation(
|
||||||
[](MenuType type,Data&returnData){ //On Open
|
[](MenuType type,Data&returnData){ //On Open
|
||||||
if(SaveFile::GetSaveFileCount()>0){
|
if(SaveFile::GetSaveFileCount()>0||SaveFile::GetOnlineSaveFileCount()>0){
|
||||||
|
if(SaveFile::IsOnline()){
|
||||||
|
returnData=Component<ScrollableWindowComponent>(type,"Online Game Files List")->GetComponents()[0];
|
||||||
|
}else{
|
||||||
returnData=Component<ScrollableWindowComponent>(type,"Game Files List")->GetComponents()[0];
|
returnData=Component<ScrollableWindowComponent>(type,"Game Files List")->GetComponents()[0];
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
returnData="Go Back Button";
|
returnData="Go Back Button";
|
||||||
}
|
}
|
||||||
|
@ -133,9 +133,6 @@ public:
|
|||||||
component->depth=depth;
|
component->depth=depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(components.count(componentKey)){
|
|
||||||
ERR("WARNING! Key "<<componentKey<<" for this sub-menu already exists! Key names must be unique!")
|
|
||||||
}
|
|
||||||
component->name=componentKey;
|
component->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.Unlock(); //It's possible we can add a component later on, so we will make sure we remove the lock first.
|
||||||
components[componentKey]=component;
|
components[componentKey]=component;
|
||||||
|
@ -51,7 +51,7 @@ INCLUDE_game
|
|||||||
size_t SaveFile::saveFileID=0;
|
size_t SaveFile::saveFileID=0;
|
||||||
std::string SaveFile::saveFileName="";
|
std::string SaveFile::saveFileName="";
|
||||||
std::string SaveFile::username="";
|
std::string SaveFile::username="";
|
||||||
bool SaveFile::onlineMode=false;
|
bool SaveFile::onlineMode=true;
|
||||||
|
|
||||||
const size_t SaveFile::GetSaveFileCount(){
|
const size_t SaveFile::GetSaveFileCount(){
|
||||||
std::filesystem::create_directories("save_file_path"_S);
|
std::filesystem::create_directories("save_file_path"_S);
|
||||||
@ -64,6 +64,17 @@ const size_t SaveFile::GetSaveFileCount(){
|
|||||||
return count;
|
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(){
|
const void SaveFile::SaveGame(){
|
||||||
std::filesystem::create_directories("save_file_path"_S);
|
std::filesystem::create_directories("save_file_path"_S);
|
||||||
utils::datafile saveFile;
|
utils::datafile saveFile;
|
||||||
@ -109,13 +120,17 @@ const void SaveFile::SaveGame(){
|
|||||||
saveFile["Chapter"].SetInt(game->GetCurrentChapter());
|
saveFile["Chapter"].SetInt(game->GetCurrentChapter());
|
||||||
saveFile["Save Name"].SetString(std::string(GetSaveFileName()));
|
saveFile["Save Name"].SetString(std::string(GetSaveFileName()));
|
||||||
saveFile["Game Time"].SetReal(game->GetRuntime());
|
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;
|
utils::datafile metadata;
|
||||||
|
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")){
|
if(std::filesystem::exists("save_file_path"_S+"metadata.dat")){
|
||||||
utils::datafile::Read(metadata,"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)).SetReal(game->GetRuntime(),0U);
|
||||||
metadata.GetProperty(std::format("save{}",saveFileID)).SetInt(game->GetCurrentChapter(),1U);
|
metadata.GetProperty(std::format("save{}",saveFileID)).SetInt(game->GetCurrentChapter(),1U);
|
||||||
metadata.GetProperty(std::format("save{}",saveFileID)).SetInt(game->GetPlayer()->Level(),2U);
|
metadata.GetProperty(std::format("save{}",saveFileID)).SetInt(game->GetPlayer()->Level(),2U);
|
||||||
@ -123,6 +138,8 @@ const void SaveFile::SaveGame(){
|
|||||||
metadata.GetProperty(std::format("save{}",saveFileID)).SetString(std::string(SaveFile::GetSaveFileName()),4U);
|
metadata.GetProperty(std::format("save{}",saveFileID)).SetString(std::string(SaveFile::GetSaveFileName()),4U);
|
||||||
if(!onlineMode){
|
if(!onlineMode){
|
||||||
utils::datafile::Write(metadata,"save_file_path"_S+"metadata.dat");
|
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;
|
utils::datafile::INITIAL_SETUP_COMPLETE=true;
|
||||||
@ -244,7 +261,7 @@ const void SaveFile::LoadGame(){
|
|||||||
if(onlineMode){
|
if(onlineMode){
|
||||||
Server_GetFile([&](std::string_view response){
|
Server_GetFile([&](std::string_view response){
|
||||||
if(response!="ERR"){
|
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<<response;
|
file<<response;
|
||||||
file.close();
|
file.close();
|
||||||
LoadFile();
|
LoadFile();
|
||||||
@ -288,8 +305,11 @@ const void SaveFile::UpdateSaveGameData(){
|
|||||||
std::filesystem::create_directories("save_file_path"_S);
|
std::filesystem::create_directories("save_file_path"_S);
|
||||||
auto LoadMetadataFile=[](){
|
auto LoadMetadataFile=[](){
|
||||||
auto gameFilesList=Component<ScrollableWindowComponent>(LOAD_GAME,"Game Files List");
|
auto gameFilesList=Component<ScrollableWindowComponent>(LOAD_GAME,"Game Files List");
|
||||||
|
auto onlineGameFilesList=Component<ScrollableWindowComponent>(LOAD_GAME,"Online Game Files List");
|
||||||
gameFilesList->RemoveAllComponents();
|
gameFilesList->RemoveAllComponents();
|
||||||
|
onlineGameFilesList->RemoveAllComponents();
|
||||||
const size_t saveFileCount=GetSaveFileCount();
|
const size_t saveFileCount=GetSaveFileCount();
|
||||||
|
const size_t onlineSaveFileCount=GetOnlineSaveFileCount();
|
||||||
utils::datafile metadata,online_metadata;
|
utils::datafile metadata,online_metadata;
|
||||||
if(!std::filesystem::exists("save_file_path"_S+"metadata.dat")){
|
if(!std::filesystem::exists("save_file_path"_S+"metadata.dat")){
|
||||||
utils::datafile::Write(metadata,"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+=49;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
offsetY=0;
|
||||||
|
for(size_t i=0;i<onlineSaveFileCount;i++){
|
||||||
|
if(online_metadata.HasProperty(std::format("save{}",i))){
|
||||||
|
onlineGameFilesList->ADD(std::format("Online Load File Button - Save {}",i),LoadFileButton)(geom2d::rect<float>{{0,offsetY},{onlineGameFilesList->GetSize().x-13,48}},online_metadata[std::format("save{}",i)],i,[](MenuFuncData data){
|
||||||
|
std::weak_ptr<LoadFileButton>comp=DYNAMIC_POINTER_CAST<LoadFileButton>(data.component.lock());
|
||||||
|
saveFileID=comp.lock()->getSaveFileID();
|
||||||
|
SaveFile::LoadGame();
|
||||||
|
return true;
|
||||||
|
},ButtonAttr::NONE)END;
|
||||||
|
offsetY+=49;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
auto LoadMetadataFromDB=[](){
|
auto LoadMetadataFromDB=[](){
|
||||||
auto gameFilesList=Component<ScrollableWindowComponent>(LOAD_GAME,"Game Files List");
|
auto gameFilesList=Component<ScrollableWindowComponent>(LOAD_GAME,"Game Files List");
|
||||||
@ -364,6 +396,7 @@ const void SaveFile::UpdateSaveGameData(){
|
|||||||
file<<response;
|
file<<response;
|
||||||
file.close();
|
file.close();
|
||||||
LoadMetadataFile();
|
LoadMetadataFile();
|
||||||
|
Menu::OpenMenu(LOAD_GAME);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
@ -429,7 +462,7 @@ const void SaveFile::Server_GetFile(std::function<void(std::string_view)>respCal
|
|||||||
}
|
}
|
||||||
const void SaveFile::Server_SaveFile(std::function<void(std::string_view)>respCallbackFunc){
|
const void SaveFile::Server_SaveFile(std::function<void(std::string_view)>respCallbackFunc){
|
||||||
std::stringstream fileContents;
|
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()){
|
while(file.good()){
|
||||||
int val=file.get();
|
int val=file.get();
|
||||||
if(val!=-1){
|
if(val!=-1){
|
||||||
|
@ -57,6 +57,7 @@ public:
|
|||||||
static const std::string_view GetSaveFileName();
|
static const std::string_view GetSaveFileName();
|
||||||
static const void SetSaveFileName(std::string_view saveFileName);
|
static const void SetSaveFileName(std::string_view saveFileName);
|
||||||
static const size_t GetSaveFileCount();
|
static const size_t GetSaveFileCount();
|
||||||
|
static const size_t GetOnlineSaveFileCount();
|
||||||
static const bool IsOnline();
|
static const bool IsOnline();
|
||||||
static void SetOnlineMode(bool online);
|
static void SetOnlineMode(bool online);
|
||||||
static const std::string_view GetUserID();
|
static const std::string_view GetUserID();
|
||||||
|
@ -49,7 +49,11 @@ void Menu::InitializeSaveFileWindow(){
|
|||||||
saveFileWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{-8,68},{48,12}},"Back",[](MenuFuncData data){Menu::CloseMenu();game->TextEntryEnable(false);return true;})END;
|
saveFileWindow->ADD("Back Button",MenuComponent)(geom2d::rect<float>{{-8,68},{48,12}},"Back",[](MenuFuncData data){Menu::CloseMenu();game->TextEntryEnable(false);return true;})END;
|
||||||
saveFileWindow->ADD("Continue Button",MenuComponent)(geom2d::rect<float>{{56,68},{48,12}},"Begin",MenuType::CLASS_SELECTION,[](MenuFuncData data){
|
saveFileWindow->ADD("Continue Button",MenuComponent)(geom2d::rect<float>{{56,68},{48,12}},"Begin",MenuType::CLASS_SELECTION,[](MenuFuncData data){
|
||||||
SaveFile::SetSaveFileName(game->TextEntryGetString());
|
SaveFile::SetSaveFileName(game->TextEntryGetString());
|
||||||
|
if(SaveFile::IsOnline()){
|
||||||
|
SaveFile::SetSaveFileID(SaveFile::GetOnlineSaveFileCount());
|
||||||
|
}else{
|
||||||
SaveFile::SetSaveFileID(SaveFile::GetSaveFileCount());
|
SaveFile::SetSaveFileID(SaveFile::GetSaveFileCount());
|
||||||
|
}
|
||||||
game->TextEntryEnable(false);
|
game->TextEntryEnable(false);
|
||||||
SaveFile::SaveGame();
|
SaveFile::SaveGame();
|
||||||
return true;
|
return true;
|
||||||
|
@ -276,6 +276,10 @@ protected:
|
|||||||
public:
|
public:
|
||||||
template<class T>
|
template<class T>
|
||||||
std::shared_ptr<T> _AddComponent(std::string key,std::shared_ptr<T>button){
|
std::shared_ptr<T> _AddComponent(std::string key,std::shared_ptr<T>button){
|
||||||
|
if(Menu::menus[parentMenu]->components.count(key)){
|
||||||
|
ERR("WARNING! Key "<<key<<" for menu"<<parentMenu<<" already exists! Key names must be unique!")
|
||||||
|
}
|
||||||
|
|
||||||
components.push_back(button);
|
components.push_back(button);
|
||||||
button->renderInMain=false; //Now we are in control!
|
button->renderInMain=false; //Now we are in control!
|
||||||
button->parentComponent=DYNAMIC_POINTER_CAST<ScrollableWindowComponent>(Menu::menus[parentMenu]->components[this->GetName()]);
|
button->parentComponent=DYNAMIC_POINTER_CAST<ScrollableWindowComponent>(Menu::menus[parentMenu]->components[this->GetName()]);
|
||||||
|
@ -39,7 +39,7 @@ All rights reserved.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 3
|
#define VERSION_MINOR 3
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
#define VERSION_BUILD 6401
|
#define VERSION_BUILD 6402
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user