diff options
Diffstat (limited to 'src/app')
-rw-r--r-- | src/app/app.cpp | 68 | ||||
-rw-r--r-- | src/app/app.h | 9 | ||||
-rw-r--r-- | src/app/main.cpp | 5 | ||||
-rw-r--r-- | src/app/system.cpp | 10 | ||||
-rw-r--r-- | src/app/system.h | 6 | ||||
-rw-r--r-- | src/app/system_macosx.cpp | 11 | ||||
-rw-r--r-- | src/app/system_macosx.h | 2 |
7 files changed, 87 insertions, 24 deletions
diff --git a/src/app/app.cpp b/src/app/app.cpp index cf509f9..429a9d4 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -146,6 +146,10 @@ CApplication::CApplication() m_kmodState = 0; m_mouseButtonsState = 0; m_trackedKeys = 0; + + m_dataPath = GetSystemUtils()->GetDataPath(); + m_langPath = GetSystemUtils()->GetLangPath(); + m_savePath = GetSystemUtils()->GetSaveDir(); m_runSceneName = ""; m_runSceneRank = 0; @@ -208,8 +212,10 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) OPT_LOGLEVEL, OPT_LANGUAGE, OPT_LANGDIR, - OPT_VBO, - OPT_MOD + OPT_DATADIR, + OPT_SAVEDIR, + OPT_MOD, + OPT_VBO }; option options[] = @@ -221,8 +227,10 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) { "loglevel", required_argument, nullptr, OPT_LOGLEVEL }, { "language", required_argument, nullptr, OPT_LANGUAGE }, { "langdir", required_argument, nullptr, OPT_LANGDIR }, - { "vbo", required_argument, nullptr, OPT_VBO }, + { "datadir", required_argument, nullptr, OPT_DATADIR }, + { "savedir", required_argument, nullptr, OPT_SAVEDIR }, { "mod", required_argument, nullptr, OPT_MOD }, + { "vbo", required_argument, nullptr, OPT_VBO }, { nullptr, 0, nullptr, 0} }; @@ -260,8 +268,10 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) GetLogger()->Message(" -loglevel level set log level to level (one of: trace, debug, info, warn, error, none)\n"); GetLogger()->Message(" -language lang set language (one of: en, de, fr, pl, ru)\n"); GetLogger()->Message(" -langdir path set custom language directory path\n"); - GetLogger()->Message(" -vbo mode set OpenGL VBO mode (one of: auto, enable, disable)\n"); + GetLogger()->Message(" -datadir path set custom data directory path\n"); + GetLogger()->Message(" -savedir path set custom save directory path (must be writable)\n"); GetLogger()->Message(" -mod path load datadir mod from given path\n"); + GetLogger()->Message(" -vbo mode set OpenGL VBO mode (one of: auto, enable, disable)\n"); return PARSE_ARGS_HELP; } case OPT_DEBUG: @@ -341,11 +351,28 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) break; } + case OPT_DATADIR: + { + m_dataPath = optarg; + GetLogger()->Info("Using data dir: '%s'\n", optarg); + break; + } + case OPT_LANGDIR: + { + m_langPath = optarg; + GetLogger()->Info("Using language dir: '%s'\n", optarg); + break; + } + case OPT_SAVEDIR: + { + m_savePath = optarg; + GetLogger()->Info("Using save dir: '%s'\n", optarg); + break; + } case OPT_MOD: { - GetLogger()->Info("Loading mod from \"%s\"\n", optarg); + GetLogger()->Info("Loading mod: '%s'\n", optarg); CResourceManager::AddLocation(optarg, true); - break; } default: @@ -362,23 +389,28 @@ bool CApplication::Create() bool defaultValues = false; GetLogger()->Info("Creating CApplication\n"); - - if (!GetProfile().InitCurrentDirectory()) - { - GetLogger()->Warn("Config not found. Default values will be used!\n"); - defaultValues = true; - } - - boost::filesystem::path dataPath(COLOBOT_DEFAULT_DATADIR); + + boost::filesystem::path dataPath(m_dataPath); if (! (boost::filesystem::exists(dataPath) && boost::filesystem::is_directory(dataPath)) ) { - GetLogger()->Error("Data directory '%s' doesn't exist or is not a directory\n", COLOBOT_DEFAULT_DATADIR); + GetLogger()->Error("Data directory '%s' doesn't exist or is not a directory\n", m_dataPath.c_str()); m_errorMessage = std::string("Could not read from data directory:\n") + - std::string("'") + COLOBOT_DEFAULT_DATADIR + std::string("'\n") + - std::string("Please check your installation, or supply a valid data directory by -datadir option."); + std::string("'") + m_dataPath + std::string("'\n") + + std::string("Please check your installation, or supply a valid data directory by -datadir option."); m_exitCode = 1; return false; } + + CResourceManager::AddLocation(m_dataPath, false); + boost::filesystem::create_directories(m_savePath); + CResourceManager::SetSaveLocation(m_savePath); + CResourceManager::AddLocation(m_savePath, true); + + if (!GetProfile().InitCurrentDirectory()) + { + GetLogger()->Warn("Config not found. Default values will be used!\n"); + defaultValues = true; + } if (GetProfile().GetLocalProfileString("Language", "Lang", path)) { Language language; @@ -1696,7 +1728,7 @@ void CApplication::SetLanguage(Language language) setlocale(LC_ALL, ""); - bindtextdomain("colobot", CResourceManager::GetLanguageLocation().c_str()); + bindtextdomain("colobot", m_langPath.c_str()); bind_textdomain_codeset("colobot", "UTF-8"); textdomain("colobot"); diff --git a/src/app/app.h b/src/app/app.h index 66b8900..0df3096 100644 --- a/src/app/app.h +++ b/src/app/app.h @@ -464,6 +464,15 @@ protected: std::vector<int> m_joyAxeState; //! Current state of joystick buttons; may be updated from another thread std::vector<bool> m_joyButtonState; + + //! Path to directory with data files + std::string m_dataPath; + + //! Path to directory with language files + std::string m_langPath; + + //! Path to directory with save files + std::string m_savePath; //@{ //! Scene to run on startup diff --git a/src/app/main.cpp b/src/app/main.cpp index 294b306..e67cd7f 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -79,7 +79,6 @@ int SDL_MAIN_FUNC(int argc, char *argv[]) { CLogger logger; // single istance of logger CResourceManager manager(argv[0]); - manager.AddLocation(COLOBOT_DEFAULT_DATADIR, false); // Initialize static string arrays InitializeRestext(); @@ -102,9 +101,6 @@ int SDL_MAIN_FUNC(int argc, char *argv[]) { return app->GetExitCode(); } - - manager.SetSaveLocation(systemUtils->GetSaveDir()); - manager.AddLocation(systemUtils->GetSaveDir(), true); int code = 0; @@ -124,7 +120,6 @@ int SDL_MAIN_FUNC(int argc, char *argv[]) delete app; delete systemUtils; - //delete manager; logger.Info("Exiting with code %d\n", code); return code; diff --git a/src/app/system.cpp b/src/app/system.cpp index 66d08e5..0435b39 100644 --- a/src/app/system.cpp +++ b/src/app/system.cpp @@ -192,6 +192,16 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte return result; } +std::string CSystemUtils::GetDataPath() +{ + return COLOBOT_DEFAULT_DATADIR; +} + +std::string CSystemUtils::GetLangPath() +{ + return COLOBOT_I18N_DIR; +} + std::string CSystemUtils::GetSaveDir() { return std::string("save"); diff --git a/src/app/system.h b/src/app/system.h index 6d2fe58..5177815 100644 --- a/src/app/system.h +++ b/src/app/system.h @@ -130,6 +130,12 @@ public: /** The difference is \a after - \a before. */ virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0; + //! Returns the data path (containing textures, levels, helpfiles, etc) + virtual std::string GetDataPath(); + + //! Returns the translations path + virtual std::string GetLangPath(); + //! Returns the save dir location virtual std::string GetSaveDir(); }; diff --git a/src/app/system_macosx.cpp b/src/app/system_macosx.cpp index 473a10c..06c67d3 100644 --- a/src/app/system_macosx.cpp +++ b/src/app/system_macosx.cpp @@ -87,10 +87,19 @@ void CSystemUtilsMacOSX::Init() m_dataPath += "/Contents/Resources"; } +std::string CSystemUtilsMacOSX::GetDataPath() +{ + return m_dataPath; +} + +std::string CSystemUtilsMacOSX::GetLangPath() +{ + return m_dataPath + "/i18n"; +} + std::string CSystemUtilsMacOSX::GetSaveDir() { std::string savegameDir = m_ASPath; - boost::filesystem::create_directories(savegameDir.c_str()); GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str()); return savegameDir; diff --git a/src/app/system_macosx.h b/src/app/system_macosx.h index 6423320..8ae233c 100644 --- a/src/app/system_macosx.h +++ b/src/app/system_macosx.h @@ -28,6 +28,8 @@ class CSystemUtilsMacOSX : public CSystemUtilsOther public: virtual void Init() override; + virtual std::string GetDataPath() override; + virtual std::string GetLangPath() override; virtual std::string GetSaveDir() override; private: std::string m_ASPath; |