From b9cb2d2e0077b28ceb078b7523d708ccf821490f Mon Sep 17 00:00:00 2001 From: marmare314 <49279081+Marmare314@users.noreply.github.com> Date: Wed, 24 Jul 2024 17:50:13 +0200 Subject: [PATCH] Add Include command to automapper --- src/game/editor/auto_map.cpp | 29 +++++++++++++++++++++++++---- src/game/editor/auto_map.h | 2 +- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/game/editor/auto_map.cpp b/src/game/editor/auto_map.cpp index e1ae00b0a..fbe57862f 100644 --- a/src/game/editor/auto_map.cpp +++ b/src/game/editor/auto_map.cpp @@ -45,7 +45,7 @@ CAutoMapper::CAutoMapper(CEditor *pEditor) Init(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);