summaryrefslogtreecommitdiffstats
path: root/src/object
diff options
context:
space:
mode:
authorkrzys-h <krzys_h@interia.pl>2014-07-11 16:40:07 +0200
committerkrzys-h <krzys_h@interia.pl>2014-07-11 16:40:07 +0200
commit02ba358a892b9977250ea345c42f8226f89ba250 (patch)
treec1e73272d29cbf5e2bf53c2c59bb9920ff16aadf /src/object
parent96d49d84aafecd78c902681f20de6207badf7e85 (diff)
downloadcolobot-02ba358a892b9977250ea345c42f8226f89ba250.tar.gz
colobot-02ba358a892b9977250ea345c42f8226f89ba250.tar.bz2
colobot-02ba358a892b9977250ea345c42f8226f89ba250.zip
Help file loading
Diffstat (limited to 'src/object')
-rw-r--r--src/object/robotmain.cpp54
-rw-r--r--src/object/robotmain.h5
2 files changed, 49 insertions, 10 deletions
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 8108129..9860943 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -3843,11 +3843,6 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
const char* stack = m_dialog->GetStackRead().c_str();
m_dialog->SetUserDir(base, rank);
- /*
- * TODO: original code relying on UserDir() was removed.
- * A new way of providing custom data file paths will need to be devised.
- */
-
m_fixScene = fixScene;
g_id = 0;
@@ -4020,7 +4015,9 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
if (Cmd(line, "Instructions") && !resetObject)
{
OpString(line, "name", name);
- strcpy(m_infoFilename[SATCOM_HUSTON], name);
+ std::string path = name;
+ InjectLevelDir(path, "help/%lng%");
+ strcpy(m_infoFilename[SATCOM_HUSTON], path.c_str());
m_immediatSatCom = OpInt(line, "immediat", 0);
if (m_version >= 2) m_beginSatCom = m_lockedSatCom = OpInt(line, "lock", 0);
@@ -4031,27 +4028,35 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
if (Cmd(line, "Satellite") && !resetObject)
{
OpString(line, "name", name);
- strcpy(m_infoFilename[SATCOM_SAT], name);
+ std::string path = name;
+ InjectLevelDir(path, "help/%lng%");
+ strcpy(m_infoFilename[SATCOM_SAT], path.c_str());
continue;
}
if (Cmd(line, "Loading") && !resetObject)
{
OpString(line, "name", name);
- strcpy(m_infoFilename[SATCOM_LOADING], name);
+ std::string path = name;
+ InjectLevelDir(path, "help/%lng%");
+ strcpy(m_infoFilename[SATCOM_LOADING], path.c_str());
continue;
}
if (Cmd(line, "HelpFile") && !resetObject)
{
OpString(line, "name", name);
- strcpy(m_infoFilename[SATCOM_PROG], name);
+ std::string path = name;
+ InjectLevelDir(path, "help/%lng%");
+ strcpy(m_infoFilename[SATCOM_PROG], path.c_str());
continue;
}
if (Cmd(line, "SoluceFile") && !resetObject)
{
OpString(line, "name", name);
- strcpy(m_infoFilename[SATCOM_SOLUCE], name);
+ std::string path = name;
+ InjectLevelDir(path, "help/%lng%");
+ strcpy(m_infoFilename[SATCOM_SOLUCE], path.c_str());
continue;
}
@@ -7001,6 +7006,21 @@ float CRobotMain::GetPersoAngle()
return m_dialog->GetPersoAngle();
}
+char* CRobotMain::GetSceneName()
+{
+ return m_dialog->GetSceneName();
+}
+
+int CRobotMain::GetSceneRank()
+{
+ return m_dialog->GetSceneRank();
+}
+
+void CRobotMain::BuildSceneName(std::string &filename, char *base, int rank, bool sceneFile)
+{
+ m_dialog->BuildSceneName(filename, base, rank, sceneFile);
+}
+
//! Changes on the pause mode
void CRobotMain::ChangePause(PauseType pause)
@@ -7236,3 +7256,17 @@ void CRobotMain::DisplayError(Error err, Math::Vector goal, float height, float
{
m_displayText->DisplayError(err, goal, height, dist, time);
}
+
+void CRobotMain::InjectLevelDir(std::string& path, const std::string defaultDir)
+{
+ std::string oldPath = path;
+ std::string lvlDir;
+ CRobotMain::GetInstancePointer()->BuildSceneName(lvlDir, CRobotMain::GetInstancePointer()->GetSceneName(), CRobotMain::GetInstancePointer()->GetSceneRank(), false);
+ boost::replace_all(path, "%lvl%", lvlDir);
+ if(path == oldPath)
+ {
+ path = defaultDir + "/" + path;
+ }
+ std::string langStr(1, CApplication::GetInstancePointer()->GetLanguageChar());
+ boost::replace_all(path, "%lng%", langStr);
+}
diff --git a/src/object/robotmain.h b/src/object/robotmain.h
index 19e9e7d..f9bf131 100644
--- a/src/object/robotmain.h
+++ b/src/object/robotmain.h
@@ -337,6 +337,9 @@ public:
int GetGamerGlasses();
bool GetGamerOnlyHead();
float GetPersoAngle();
+ char* GetSceneName();
+ int GetSceneRank();
+ void BuildSceneName(std::string &filename, char *base, int rank, bool sceneFile = true);
void StartMusic();
void StartPauseMusic(PauseType pause);
@@ -386,6 +389,8 @@ public:
void DisplayError(Error err, CObject* pObj, float time=10.0f);
void DisplayError(Error err, Math::Vector goal, float height=15.0f, float dist=60.0f, float time=10.0f);
+
+ static void InjectLevelDir(std::string& path, const std::string defaultDir = "");
protected:
bool EventFrame(const Event &event);