From c0ac60e4facfc9d7a588dd2a23fe548b7212975b Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 20 Oct 2014 21:15:39 +0200 Subject: Fixed save directories in things not yet refactored to use PHYSFS --- src/common/resources/resourcemanager.cpp | 8 ++++++ src/common/resources/resourcemanager.h | 1 + src/object/robotmain.cpp | 10 ++++++-- src/object/robotmain.h | 1 + src/ui/maindialog.cpp | 42 ++++++++++++++++++-------------- src/ui/maindialog.h | 3 ++- src/ui/studio.cpp | 2 +- 7 files changed, 45 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/common/resources/resourcemanager.cpp b/src/common/resources/resourcemanager.cpp index 21aceec..42f9634 100644 --- a/src/common/resources/resourcemanager.cpp +++ b/src/common/resources/resourcemanager.cpp @@ -97,6 +97,14 @@ bool CResourceManager::SetSaveLocation(const std::string &location) return false; } +std::string CResourceManager::GetSaveLocation() +{ + if(PHYSFS_isInit()) { + return PHYSFS_getWriteDir(); + } + return ""; +} + SDL_RWops* CResourceManager::GetSDLFileHandler(const std::string &filename) { diff --git a/src/common/resources/resourcemanager.h b/src/common/resources/resourcemanager.h index e949746..730cf3e 100644 --- a/src/common/resources/resourcemanager.h +++ b/src/common/resources/resourcemanager.h @@ -35,6 +35,7 @@ public: static bool RemoveLocation(const std::string &location); static bool SetSaveLocation(const std::string &location); + static std::string GetSaveLocation(); static SDL_RWops* GetSDLFileHandler(const std::string &filename); static CSNDFile* GetSNDFileHandler(const std::string &filename); diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index 91e2d61..6ca1da1 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -5427,7 +5427,7 @@ void CRobotMain::LoadOneScript(CObject *obj, int &nbError) char filename[MAX_FNAME]; sprintf(filename, "%s/%s/%c%.3d%.3d%.1d.txt", - GetSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i); + GetPHYSFSSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i); brain->ReadProgram(i, filename); if (!brain->GetCompile(i)) nbError++; } @@ -5497,7 +5497,7 @@ void CRobotMain::SaveOneScript(CObject *obj) { char filename[MAX_FNAME]; sprintf(filename, "%s/%s/%c%.3d%.3d%.1d.txt", - GetSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i); + GetPHYSFSSavegameDir(), m_gamerName.c_str(), name[0], rank, objRank, i); brain->WriteProgram(i, filename); } } @@ -6623,6 +6623,12 @@ bool CRobotMain::GetRadar() return false; } +//TODO: Use PHYSFS everywhere +const char* CRobotMain::GetPHYSFSSavegameDir() +{ + return m_dialog->GetPHYSFSSavegameDir().c_str(); +} + const char* CRobotMain::GetSavegameDir() { return m_dialog->GetSavegameDir().c_str(); diff --git a/src/object/robotmain.h b/src/object/robotmain.h index 882265c..a55318d 100644 --- a/src/object/robotmain.h +++ b/src/object/robotmain.h @@ -329,6 +329,7 @@ public: bool GetSceneSoluce(); bool GetShowAll(); bool GetRadar(); + const char* GetPHYSFSSavegameDir(); const char* GetSavegameDir(); const char* GetPublicDir(); const char* GetFilesDir(); diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp index dec4586..3857d2e 100644 --- a/src/ui/maindialog.cpp +++ b/src/ui/maindialog.cpp @@ -182,8 +182,8 @@ CMainDialog::CMainDialog() } m_savegameDir = "savegame"; - m_publicDir = "program"; - m_filesDir = m_savegameDir; + m_publicDir = CResourceManager::GetSaveLocation()+"/program"; //TODO: Refactor to use PHYSFS + m_filesDir = CResourceManager::GetSaveLocation()+"/files"; //TODO: Refactor to use PHYSFS m_setupFull = m_app->GetVideoConfig().fullScreen; @@ -3311,13 +3311,13 @@ void CMainDialog::ReadNameList() try { - if (! fs::exists(m_savegameDir) && fs::is_directory(m_savegameDir)) + if (! fs::exists(GetSavegameDir()) && fs::is_directory(GetSavegameDir())) { GetLogger()->Error("Savegame dir does not exist %s\n",dir); } else { - fs::directory_iterator dirIt(m_savegameDir), dirEndIt; + fs::directory_iterator dirIt(GetSavegameDir()), dirEndIt; for (; dirIt != dirEndIt; ++dirIt) { @@ -3563,15 +3563,15 @@ void CMainDialog::NameCreate() } - if(!CResourceManager::DirectoryExists(m_savegameDir)) - CResourceManager::CreateDirectory(m_savegameDir); + if(!CResourceManager::DirectoryExists(GetPHYSFSSavegameDir())) + CResourceManager::CreateDirectory(GetPHYSFSSavegameDir()); - dir = m_savegameDir + "/" + name; + dir = GetSavegameDir() + "/" + name; if (!fs::exists(dir)) { fs::create_directories(dir); - if(!CResourceManager::DirectoryExists(dir)) - CResourceManager::CreateDirectory(dir); + if(!CResourceManager::DirectoryExists(GetPHYSFSSavegameDir()+"/"+name)) + CResourceManager::CreateDirectory(GetPHYSFSSavegameDir()+"/"+name); } else { @@ -3638,7 +3638,7 @@ void CMainDialog::NameDelete() gamer = pl->GetItemName(sel); // Deletes all the contents of the file. - sprintf(dir, "%s/%s", m_savegameDir.c_str(), gamer); + sprintf(dir, "%s/%s", GetSavegameDir().c_str(), gamer); if ( !RemoveDir(dir) ) { m_sound->Play(SOUND_TZOING); @@ -3951,7 +3951,7 @@ bool CMainDialog::IsIOReadScene() { fs::directory_iterator end_iter; - fs::path saveDir(m_savegameDir + "/" + m_main->GetGamerName()); + fs::path saveDir(GetSavegameDir() + "/" + m_main->GetGamerName()); if (fs::exists(saveDir) && fs::is_directory(saveDir)) { for( fs::directory_iterator dir_iter(saveDir) ; dir_iter != end_iter ; ++dir_iter) @@ -4048,7 +4048,7 @@ void CMainDialog::IOReadList() pl->Flush(); - fs::path saveDir(m_savegameDir + "/" + m_main->GetGamerName()); + fs::path saveDir(GetSavegameDir() + "/" + m_main->GetGamerName()); m_saveList.clear(); if (fs::exists(saveDir) && fs::is_directory(saveDir)) @@ -4225,7 +4225,7 @@ bool CMainDialog::IOWriteScene() pe->GetText(info, 100); if (static_cast(sel) >= m_saveList.size()) { - dir = fs::path(m_savegameDir) / m_main->GetGamerName() / ("save" + clearName(info)); + dir = fs::path(GetSavegameDir()) / m_main->GetGamerName() / ("save" + clearName(info)); } else { @@ -6001,7 +6001,13 @@ bool CMainDialog::GetSceneSoluce() // Returns the name of the folder to save. -std::string & CMainDialog::GetSavegameDir() +std::string CMainDialog::GetSavegameDir() +{ + return CResourceManager::GetSaveLocation()+"/"+m_savegameDir; +} + +//TODO: Use PHYSFS everywhere +std::string & CMainDialog::GetPHYSFSSavegameDir() { return m_savegameDir; } @@ -6059,7 +6065,7 @@ void CMainDialog::WriteGamerPerso(char *gamer) char filename[100]; char line[100]; - sprintf(filename, "%s/%s/face.gam", m_savegameDir.c_str(), gamer); + sprintf(filename, "%s/%s/face.gam", GetSavegameDir().c_str(), gamer); file = fopen(filename, "w"); if ( file == NULL ) return; @@ -6092,7 +6098,7 @@ void CMainDialog::ReadGamerPerso(char *gamer) m_perso.face = 0; DefPerso(); - sprintf(filename, "%s/%s/face.gam", m_savegameDir.c_str(), gamer); + sprintf(filename, "%s/%s/face.gam", GetSavegameDir().c_str(), gamer); file = fopen(filename, "r"); if ( file == NULL ) return; @@ -6201,7 +6207,7 @@ bool CMainDialog::ReadGamerInfo() m_sceneInfo[i].bPassed = false; } - sprintf(line, "%s/%s/%s.gam", m_savegameDir.c_str(), m_main->GetGamerName(), m_sceneName); + sprintf(line, "%s/%s/%s.gam", GetSavegameDir().c_str(), m_main->GetGamerName(), m_sceneName); file = fopen(line, "r"); if ( file == NULL ) return false; @@ -6237,7 +6243,7 @@ bool CMainDialog::WriteGamerInfo() char line[100]; int i; - sprintf(line, "%s/%s/%s.gam", m_savegameDir.c_str(), m_main->GetGamerName(), m_sceneName); + sprintf(line, "%s/%s/%s.gam", GetSavegameDir().c_str(), m_main->GetGamerName(), m_sceneName); file = fopen(line, "w"); if ( file == NULL ) return false; diff --git a/src/ui/maindialog.h b/src/ui/maindialog.h index 390aa31..1ff9045 100644 --- a/src/ui/maindialog.h +++ b/src/ui/maindialog.h @@ -91,7 +91,8 @@ public: int GetSceneRank(); const char* GetSceneDir(); bool GetSceneSoluce(); - std::string & GetSavegameDir(); + std::string GetSavegameDir(); + std::string & GetPHYSFSSavegameDir(); std::string & GetPublicDir(); bool GetTooltip(); diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index abe4e5c..01ffd6a 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -1533,7 +1533,7 @@ std::string CStudio::SearchDirectory(bool bCreate) } else { - sprintf(dir, "%s/%s/Program/", m_main->GetSavegameDir(), m_main->GetGamerName()); + sprintf(dir, "%s/%s/Program/", m_main->GetPHYSFSSavegameDir(), m_main->GetGamerName()); } fs::path path = fs::path(dir); -- cgit v1.2.3-1-g7c22