From 39d2236be66619102b07352fc0eb9eeab9b9c5bf Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 24 Aug 2015 20:08:04 +0200 Subject: [PATCH] Fixed %lvl% in saved games, closes #586 --- src/level/parser/parser.cpp | 25 +++++++++++++------------ src/level/parser/parser.h | 5 ++++- src/level/robotmain.cpp | 1 + 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/level/parser/parser.cpp b/src/level/parser/parser.cpp index 88aaa04d..a3a7fe5a 100644 --- a/src/level/parser/parser.cpp +++ b/src/level/parser/parser.cpp @@ -52,26 +52,20 @@ CLevelParser::CLevelParser() } CLevelParser::CLevelParser(std::string filename) +: CLevelParser() { m_filename = filename; - - m_pathCat = ""; - m_pathChap = ""; - m_pathLvl = ""; } CLevelParser::CLevelParser(std::string category, int chapter, int rank) -{ - m_filename = BuildScenePath(category, chapter, rank); - - m_pathCat = BuildCategoryPath(category); - m_pathChap = BuildScenePath(category, chapter, 0, false); - m_pathLvl = BuildScenePath(category, chapter, rank, false); -} +: CLevelParser(BuildScenePath(category, chapter, rank)) +{} CLevelParser::CLevelParser(LevelCategory category, int chapter, int rank) : CLevelParser(GetLevelCategoryDir(category), chapter, rank) -{} +{ + SetLevelPaths(category, chapter, rank); +} std::string CLevelParser::BuildCategoryPath(std::string category) { @@ -320,6 +314,13 @@ void CLevelParser::Save() file.close(); } +void CLevelParser::SetLevelPaths(LevelCategory category, int chapter, int rank) +{ + m_pathCat = BuildCategoryPath(category); + m_pathChap = chapter != 0 ? BuildScenePath(category, chapter, 0, false) : ""; + m_pathLvl = chapter != 0 && rank != 0 ? BuildScenePath(category, chapter, rank, false) : ""; +} + std::string CLevelParser::InjectLevelPaths(const std::string& path, const std::string& defaultDir) { std::string newPath = path; diff --git a/src/level/parser/parser.h b/src/level/parser/parser.h index e7e14c80..f3eb1286 100644 --- a/src/level/parser/parser.h +++ b/src/level/parser/parser.h @@ -69,6 +69,8 @@ public: //! Save file void Save(); + //! Configure level paths for the given level + void SetLevelPaths(LevelCategory category, int chapter = 0, int rank = 0); //! Inject %something% paths std::string InjectLevelPaths(const std::string& path, const std::string& defaultDir = ""); @@ -102,6 +104,7 @@ private: inline std::string InjectLevelPathsForCurrentLevel(const std::string& path, const std::string& defaultDir = "") { CRobotMain* main = CRobotMain::GetInstancePointer(); - auto levelParser = MakeUnique(main->GetLevelCategory(), main->GetLevelChap(), main->GetLevelRank()); + auto levelParser = MakeUnique(); + levelParser->SetLevelPaths(main->GetLevelCategory(), main->GetLevelChap(), main->GetLevelRank()); return levelParser->InjectLevelPaths(path, defaultDir); } diff --git a/src/level/robotmain.cpp b/src/level/robotmain.cpp index 03452209..3911510b 100644 --- a/src/level/robotmain.cpp +++ b/src/level/robotmain.cpp @@ -4740,6 +4740,7 @@ CObject* CRobotMain::IOReadScene(std::string filename, std::string filecbot) std::string dirname = filename.substr(0, filename.find_last_of("/")); CLevelParser levelParser(filename); + levelParser.SetLevelPaths(m_levelCategory, m_levelChap, m_levelRank); levelParser.Load(); int numObjects = levelParser.CountLines("CreateObject") + levelParser.CountLines("CreatePower") + levelParser.CountLines("CreateFret");