diff --git a/src/game/editor/auto_map.cpp b/src/game/editor/auto_map.cpp index 4edb40238..38a9e2499 100644 --- a/src/game/editor/auto_map.cpp +++ b/src/game/editor/auto_map.cpp @@ -45,7 +45,7 @@ CAutoMapper::CAutoMapper(CEditor *pEditor) OnInit(pEditor); } -void CAutoMapper::Load(const char *pTileName) +void CAutoMapper::Load(const char *pTileName, bool Include) { char aPath[IO_MAX_PATH_LENGTH]; str_format(aPath, sizeof(aPath), "editor/automap/%s.rules", pTileName); @@ -53,7 +53,10 @@ void CAutoMapper::Load(const char *pTileName) if(!LineReader.OpenFile(Storage()->OpenFile(aPath, IOFLAG_READ, IStorage::TYPE_ALL))) { char aBuf[IO_MAX_PATH_LENGTH + 32]; - str_format(aBuf, sizeof(aBuf), "failed to load %s", aPath); + if(Include) + str_format(aBuf, sizeof(aBuf), "failed to include %s", aPath); + else + str_format(aBuf, sizeof(aBuf), "failed to load %s", aPath); Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "editor/automap", aBuf); return; } @@ -331,6 +334,20 @@ void CAutoMapper::Load(const char *pTileName) { pCurrentRun->m_AutomapCopy = false; } + else if(str_startswith(pLine, "Include ")) + { + pLine += str_length("Include "); + + char aName[512]; + str_copy(aName, pLine, minimum(sizeof(aName), str_length(pLine) + 1)); + + if(str_comp(aName, pTileName) != 0) + Load(aName, true); + + pCurrentConf = nullptr; + pCurrentRun = nullptr; + pCurrentIndex = nullptr; + } } } @@ -383,10 +400,14 @@ void CAutoMapper::Load(const char *pTileName) } char aBuf[IO_MAX_PATH_LENGTH + 16]; - str_format(aBuf, sizeof(aBuf), "loaded %s", aPath); + if(Include) + str_format(aBuf, sizeof(aBuf), "included %s", aPath); + else + str_format(aBuf, sizeof(aBuf), "loaded %s", aPath); Console()->Print(IConsole::OUTPUT_LEVEL_DEBUG, "editor/automap", aBuf); - m_FileLoaded = true; + if(!Include) + m_FileLoaded = true; } const char *CAutoMapper::GetConfigName(int Index) diff --git a/src/game/editor/auto_map.h b/src/game/editor/auto_map.h index 02ddd9b89..56b95a605 100644 --- a/src/game/editor/auto_map.h +++ b/src/game/editor/auto_map.h @@ -59,7 +59,7 @@ class CAutoMapper : public CEditorComponent public: explicit CAutoMapper(CEditor *pEditor); - void Load(const char *pTileName); + void Load(const char *pTileName, bool Include = false); void ProceedLocalized(class CLayerTiles *pLayer, int ConfigId, int Seed = 0, int X = 0, int Y = 0, int Width = -1, int Height = -1); void Proceed(class CLayerTiles *pLayer, int ConfigId, int Seed = 0, int SeedOffsetX = 0, int SeedOffsetY = 0);