summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2014-10-20 21:15:39 +0200
committerkrzys-h <krzys_h@interia.pl>2014-10-20 21:15:39 +0200
commitc0ac60e4facfc9d7a588dd2a23fe548b7212975b (patch)
treea72cc9810b179061f7603ae013cff5d80135b0aa /src
parentcf7be276dcfac10891422773cee79da9a5e09d6c (diff)
downloadcolobot-c0ac60e4facfc9d7a588dd2a23fe548b7212975b.tar.gz
colobot-c0ac60e4facfc9d7a588dd2a23fe548b7212975b.tar.bz2
colobot-c0ac60e4facfc9d7a588dd2a23fe548b7212975b.zip
Fixed save directories in things not yet refactored to use PHYSFS
Diffstat (limited to 'src')
-rw-r--r--src/common/resources/resourcemanager.cpp8
-rw-r--r--src/common/resources/resourcemanager.h1
-rw-r--r--src/object/robotmain.cpp10
-rw-r--r--src/object/robotmain.h1
-rw-r--r--src/ui/maindialog.cpp42
-rw-r--r--src/ui/maindialog.h3
-rw-r--r--src/ui/studio.cpp2
7 files changed, 45 insertions, 22 deletions
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<unsigned int>(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);