[colobot] 21/390: Help file loading

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:23 UTC 2015


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch upstream/latest
in repository colobot.

commit 02ba358a892b9977250ea345c42f8226f89ba250
Author: krzys-h <krzys_h at interia.pl>
Date:   Fri Jul 11 16:40:07 2014 +0200

    Help file loading
---
 src/object/robotmain.cpp | 54 +++++++++++++++++++++++++++++++++++++++---------
 src/object/robotmain.h   |  5 +++++
 src/ui/edit.cpp          | 26 +++++++++++++----------
 src/ui/maindialog.cpp    | 23 ++++++++++++++-------
 src/ui/maindialog.h      |  2 +-
 5 files changed, 80 insertions(+), 30 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);
diff --git a/src/ui/edit.cpp b/src/ui/edit.cpp
index f9b7837..a0387bf 100644
--- a/src/ui/edit.cpp
+++ b/src/ui/edit.cpp
@@ -22,10 +22,13 @@
 
 #include "clipboard/clipboard.h"
 
+#include "object/robotmain.h"
+
 #include "common/resources/inputstream.h"
 #include "common/resources/outputstream.h"
 
 #include <string.h>
+#include <boost/algorithm/string.hpp>
 
 namespace Ui {
 
@@ -784,14 +787,9 @@ void CEdit::HyperJump(std::string name, std::string marker)
 
     sMarker = marker;
 
-    if ( name[0] == '%' )
-    {
-        filename = GetProfile().GetUserBasedPath(name, "") + ".txt";
-    }
-    else
-    {
-        filename = name + std::string(".txt");
-    }
+    filename = name + std::string(".txt");
+    CRobotMain::InjectLevelDir(filename, "help/%lng%");
+    boost::replace_all(filename, "\\", "/"); //TODO: Fix this in files
 
     if ( ReadText(filename) )
     {
@@ -1146,6 +1144,9 @@ void CEdit::DrawImage(Math::Point pos, std::string name, float width,
     std::string filename;
 
     filename = name + ".png";
+    CRobotMain::InjectLevelDir(filename, "icons");
+    boost::replace_all(filename, "\\", "/"); //TODO: Fix this in files
+    filename = "../" + filename;
 
     m_engine->SetTexture(filename);
     m_engine->SetState(Gfx::ENG_RSTATE_NORMAL);
@@ -1434,7 +1435,9 @@ void CEdit::LoadImage(std::string name)
 {
     std::string filename;
     filename = name + ".png";
-    m_engine->LoadTexture(filename);
+    CRobotMain::InjectLevelDir(filename, "icons");
+    boost::replace_all(filename, "\\", "/"); //TODO: Fix this in files
+    m_engine->LoadTexture("../"+filename);
 }
 
 // Read from a text file.
@@ -1449,13 +1452,14 @@ bool CEdit::ReadText(std::string filename, int addSize)
     InputSlot   slot;
     bool        bInSoluce, bBOL;
 
-    if ( filename[0] == 0 )  return false;
+    if ( filename == "" )  return false;
     
     CInputStream stream;
-    stream.open(filename);  
+    stream.open(filename);
     
     if (!stream.is_open())
     {
+        CLogger::GetInstancePointer()->Error("Failed to load text file %s\n", filename.c_str());
         return false;
     }
 
diff --git a/src/ui/maindialog.cpp b/src/ui/maindialog.cpp
index fd6cd2e..068732d 100644
--- a/src/ui/maindialog.cpp
+++ b/src/ui/maindialog.cpp
@@ -3290,7 +3290,7 @@ void CMainDialog::SetUserDir(char *base, int rank)
 
 // Builds the file name of a mission.
 
-void CMainDialog::BuildSceneName(std::string &filename, char *base, int rank)
+void CMainDialog::BuildSceneName(std::string &filename, char *base, int rank, bool sceneFile)
 {
     //TODO: Support for more than 9 chapters
     int chapter = rank/100;
@@ -3311,20 +3311,27 @@ void CMainDialog::BuildSceneName(std::string &filename, char *base, int rank)
     else if( strcmp(base, "win") == 0 || strcmp(base, "lost") == 0 )
     {
         outstream << "levels/other/";
-        outstream << base << std::setfill('0') << std::setw(3) << chapter << "/";
-        outstream << "scene.txt";
-        std::cout << outstream.str() << std::endl;
+        outstream << base << std::setfill('0') << std::setw(3) << rank << ".txt";
         filename = outstream.str();
     }
     else
     {
         outstream << "levels/" << base << "/";
         outstream << "chapter" << std::setfill('0') << std::setw(3) << chapter << "/";
-        if(new_rank == 000) {
-            outstream << "chaptertitle.txt";
-        } else {
+        if(new_rank == 000)
+        {
+            if(sceneFile)
+            {
+                outstream << "chaptertitle.txt";
+            }
+        }
+        else
+        {
             outstream << "level" << std::setfill('0') << std::setw(3) << new_rank << "/";
-            outstream << "scene.txt";
+            if(sceneFile)
+            {
+                outstream << "scene.txt";
+            }
         }
         filename = outstream.str();
     }
diff --git a/src/ui/maindialog.h b/src/ui/maindialog.h
index 7732f9f..cb26426 100644
--- a/src/ui/maindialog.h
+++ b/src/ui/maindialog.h
@@ -99,7 +99,7 @@ public:
     bool    GetHimselfDamage();
 
     void          SetUserDir(char *base, int rank);
-    void          BuildSceneName(std::string &filename, char *base, int rank);
+    void          BuildSceneName(std::string &filename, char *base, int rank, bool sceneFile = true);
     void          BuildResumeName(char *filename, char *base, int rank);
     std::string & GetFilesDir();
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list