diff options
author | madmaxoft <github@xoft.cz> | 2014-05-07 11:01:30 +0200 |
---|---|---|
committer | madmaxoft <github@xoft.cz> | 2014-05-07 11:01:30 +0200 |
commit | da5db2ddf9897d977716261e216e90ee8d61f2e7 (patch) | |
tree | c3abf2a899b57247227484e6b6bb2fa5954d81ed /src/Generating/PrefabPiecePool.h | |
parent | Initial cGridStructGen refactoring. (diff) | |
download | cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar.gz cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar.bz2 cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar.lz cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar.xz cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.tar.zst cuberite-da5db2ddf9897d977716261e216e90ee8d61f2e7.zip |
Diffstat (limited to 'src/Generating/PrefabPiecePool.h')
-rw-r--r-- | src/Generating/PrefabPiecePool.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/Generating/PrefabPiecePool.h b/src/Generating/PrefabPiecePool.h new file mode 100644 index 000000000..2a7993063 --- /dev/null +++ b/src/Generating/PrefabPiecePool.h @@ -0,0 +1,75 @@ + +// PrefabPiecePool.h + +// Declares the cPrefabPiecePool class that represents a cPiecePool descendant that uses cPrefab instances as the pieces + + + + + +#pragma once + +#include "PieceGenerator.h" +#include "Prefab.h" + + + + + +class cPrefabPiecePool : + public cPiecePool +{ +public: + /** Creates a piece pool with prefabs from the specified definitions. + If both a_PieceDefs and a_StartingPieceDefs are given, only the a_StartingPieceDefs are used as starting + pieces for the pool, and they do not participate in the generation any further. + If only a_PieceDefs is given, any such piece can be chosen as a starting piece, and all the pieces are used + for generating. */ + cPrefabPiecePool( + const cPrefab::sDef * a_PieceDefs, size_t a_NumPieceDefs, + const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs + ); + + /** Adds pieces from the specified definitions into m_AllPieces. Also adds the pieces into + the m_PiecesByConnector map. + May be called multiple times with different PieceDefs, will add all such pieces. */ + void AddPieceDefs(const cPrefab::sDef * a_PieceDefs, size_t a_NumPieceDefs); + + /** Adds pieces from the specified definitions into m_StartingPieces. Doesn't add to + the m_PiecesByConnector map. + May be called multiple times with different PieceDefs, will add all such pieces. */ + void AddStartingPieceDefs(const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs); + + +protected: + + /** The type used to map a connector type to the list of pieces with that connector */ + typedef std::map<int, cPieces> cPiecesMap; + + /** All the pieces that are allowed for building. + This is the list that's used for memory allocation and deallocation for the pieces. */ + cPieces m_AllPieces; + + /** The pieces that are used as starting pieces. + This list is not shared and the pieces need deallocation. */ + cPieces m_StartingPieces; + + /** The map that has all pieces by their connector types + The pieces are copies out of m_AllPieces and shouldn't be ever delete-d. */ + cPiecesMap m_PiecesByConnector; + + + /** Adds the prefab to the m_PiecesByConnector map for all its connectors. */ + void AddToPerConnectorMap(cPrefab * a_Prefab); + + // cPiecePool overrides: + virtual cPieces GetPiecesWithConnector(int a_ConnectorType) override; + virtual cPieces GetStartingPieces(void) override; + virtual int GetPieceWeight(const cPlacedPiece & a_PlacedPiece, const cPiece::cConnector & a_ExistingConnector, const cPiece & a_NewPiece) override; + virtual void PiecePlaced(const cPiece & a_Piece) override; + virtual void Reset(void) override; +} ; + + + + |