From 4af1f3ac35f6a7fe7ac2bfe625bad9abaf2e868d Mon Sep 17 00:00:00 2001 From: Niels Breuker Date: Thu, 30 Mar 2023 17:18:18 +0200 Subject: PieceGenerator: Added functionality to end a structure with a custom prefab. --- src/Generating/PrefabPiecePool.cpp | 41 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) (limited to 'src/Generating/PrefabPiecePool.cpp') diff --git a/src/Generating/PrefabPiecePool.cpp b/src/Generating/PrefabPiecePool.cpp index 4deee38ef..b78251d78 100644 --- a/src/Generating/PrefabPiecePool.cpp +++ b/src/Generating/PrefabPiecePool.cpp @@ -84,6 +84,11 @@ void cPrefabPiecePool::Clear(void) delete *itr; } m_StartingPieces.clear(); + for (cPieces::iterator itr = m_ClosurePieces.begin(), end = m_ClosurePieces.end(); itr != end; ++itr) + { + delete* itr; + } + m_ClosurePieces.clear(); } @@ -345,8 +350,18 @@ bool cPrefabPiecePool::LoadCubesetPieceVer1(const AString & a_FileName, cLuaStat else { auto p = prefab.release(); - m_AllPieces.push_back(p); - AddToPerConnectorMap(p); + + int IsClosurePiece = 0; + a_LuaState.GetNamedValue("Metadata.IsClosurePiece", IsClosurePiece); + if (IsClosurePiece != 0) + { + m_ClosurePieces.push_back(p); + } + else + { + m_AllPieces.push_back(p); + AddToPerConnectorMap(p); + } } return true; @@ -758,6 +773,28 @@ cPieces cPrefabPiecePool::GetPiecesWithConnector(int a_ConnectorType) +cPieces cPrefabPiecePool::GetClosurePiecesWithConnector(int a_ConnectorType) +{ + cPieces pieces; + for (auto& piece : m_ClosurePieces) + { + auto connectors = piece->GetConnectors(); + for (auto& connector : connectors) + { + if (connector.m_Type == a_ConnectorType) + { + pieces.push_back(piece); + break; + } + } + } + return pieces; +} + + + + + cPieces cPrefabPiecePool::GetStartingPieces(void) { if (m_StartingPieces.empty()) -- cgit v1.2.3