summaryrefslogtreecommitdiffstats
path: root/src/Generating/PrefabPiecePool.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Generating/PrefabPiecePool.h')
-rw-r--r--src/Generating/PrefabPiecePool.h140
1 files changed, 133 insertions, 7 deletions
diff --git a/src/Generating/PrefabPiecePool.h b/src/Generating/PrefabPiecePool.h
index b9c1f0483..f7bf41994 100644
--- a/src/Generating/PrefabPiecePool.h
+++ b/src/Generating/PrefabPiecePool.h
@@ -9,6 +9,7 @@
#pragma once
+#include <unordered_set>
#include "PieceGenerator.h"
#include "Prefab.h"
@@ -16,6 +17,13 @@
+// fwd:
+class cLuaState;
+
+
+
+
+
class cPrefabPiecePool :
public cPiecePool
{
@@ -34,6 +42,10 @@ public:
const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs
);
+ /** Creates a pool and loads the contents of the specified file into it.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ cPrefabPiecePool(const AString & a_FileName, bool a_LogWarnings);
+
/** Destroys the pool, freeing all pieces. */
~cPrefabPiecePool();
@@ -50,6 +62,40 @@ public:
May be called multiple times with different PieceDefs, will add all such pieces. */
void AddStartingPieceDefs(const cPrefab::sDef * a_StartingPieceDefs, size_t a_NumStartingPieceDefs);
+ /** Loads the pieces from the specified file. Returns true if successful, false on error.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool LoadFromFile(const AString & a_FileName, bool a_LogWarnings);
+
+ /** Loads the pieces from the specified Cubeset file. Returns true if successful, false on error.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool LoadFromCubesetFile(const AString & a_FileName, bool a_LogWarnings);
+
+ /** Returns the number of regular (non-starting) pieces. */
+ size_t GetAllPiecesCount(void) const { return m_AllPieces.size(); }
+
+ /** Returns the number of starting pieces. */
+ size_t GetStartingPiecesCount(void) const { return m_StartingPieces.size(); }
+
+ // Metadata accessors:
+ const AString & GetIntendedUse(void) const { return m_IntendedUse; }
+ int GetMinDensity(void) const { return m_MinDensity; }
+ int GetMaxDensity(void) const { return m_MaxDensity; }
+ BLOCKTYPE GetVillageRoadBlockType (void) const { return m_VillageRoadBlockType; }
+ NIBBLETYPE GetVillageRoadBlockMeta (void) const { return m_VillageRoadBlockMeta; }
+ BLOCKTYPE GetVillageWaterRoadBlockType(void) const { return m_VillageWaterRoadBlockType; }
+ NIBBLETYPE GetVillageWaterRoadBlockMeta(void) const { return m_VillageWaterRoadBlockMeta; }
+
+ /** Returns true if a_Biome is among the accepted biomes in the m_AcceptedBiomes metadata member. */
+ bool IsBiomeAllowed(EMCSBiome a_Biome) const { return (m_AllowedBiomes.find(a_Biome) != m_AllowedBiomes.end()); }
+
+ // 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 int GetStartingPieceWeight(const cPiece & a_NewPiece) override;
+ virtual void PiecePlaced(const cPiece & a_Piece) override;
+ virtual void Reset(void) override;
+
protected:
/** The type used to map a connector type to the list of pieces with that connector */
@@ -67,17 +113,97 @@ protected:
The pieces are copies out of m_AllPieces and shouldn't be ever delete-d. */
cPiecesMap m_PiecesByConnector;
+ /** The intended use of this piece pool, as specified by the pool's metadata. */
+ AString m_IntendedUse;
+
+ /** The minimum density, as read from the metadata. */
+ int m_MinDensity;
+
+ /** The maximum density, as read from the metadata. */
+ int m_MaxDensity;
+
+ /** The block type to use for the village roads. */
+ BLOCKTYPE m_VillageRoadBlockType;
+
+ /** The block meta to use for the village roads. */
+ NIBBLETYPE m_VillageRoadBlockMeta;
+
+ /** The block type used for the village roads if the road is on water. */
+ BLOCKTYPE m_VillageWaterRoadBlockType;
+
+ /** The block meta used for the village roads if the road is on water. */
+ NIBBLETYPE m_VillageWaterRoadBlockMeta;
+
+ /** A set of allowed biomes for the pool. The pool will only be used within the specified biomes. */
+ std::unordered_set<EMCSBiome, BiomeHasher> m_AllowedBiomes;
+
/** Adds the prefab to the m_PiecesByConnector map for all its connectors. */
void AddToPerConnectorMap(cPrefab * a_Prefab);
+
+ /** Loads the pieces from the cubeset file parsed into the specified Lua state.
+ Returns true on success, false on error.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool LoadFromCubesetFileVer1(const AString & a_FileName, cLuaState & a_LuaState, bool a_LogWarnings);
+
+ /** Loads a single piece from the cubeset file parsed into the specified Lua state.
+ The piece's definition table is expected to be at the top of the Lua stack.
+ Returns true on success, false on error.
+ a_PieceIndex is the index of the piece, in the Pieces table. It is used for logging only.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool LoadCubesetPieceVer1(const AString & a_FileName, cLuaState & a_LuaState, int a_PieceIndex, bool a_LogWarnings);
+
+ /** Loads a single piece's prefab from the cubeset file parsed into the specified Lua state.
+ The piece's definition table is expected to be at the top of the Lua stack.
+ Returns the prefab on success, nullptr on failure.
+ a_PieceName is the identification of the piece, used for logging only.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ UniquePtr<cPrefab> LoadPrefabFromCubesetVer1(
+ const AString & a_FileName,
+ cLuaState & a_LuaState,
+ const AString & a_PieceName,
+ bool a_LogWarnings
+ );
- // 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 int GetStartingPieceWeight(const cPiece & a_NewPiece) override;
- virtual void PiecePlaced(const cPiece & a_Piece) override;
- virtual void Reset(void) override;
+ /** Reads a single piece's connectors from the cubeset file parsed into the specified Lua state.
+ The piece's definition table is expected to be at the top of the Lua stack.
+ Returns true on success, false on failure.
+ The connectors are added into the a_Prefab object.
+ No Connectors table is considered a failure, empty Connectors table is considered a success.
+ If any of the connectors are malformed, it is considered a failure, although the rest of the connectors will still load.
+ a_PieceName is the identification of the piece, used for logging only.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool ReadConnectorsCubesetVer1(
+ const AString & a_FileName,
+ cLuaState & a_LuaState,
+ const AString & a_PieceName,
+ cPrefab * a_Prefab,
+ bool a_LogWarnings
+ );
+
+ /** Reads a single piece's metadata from the cubeset file parsed into the specified Lua state.
+ The piece's definition table is expected to be at the top of the Lua stack.
+ Returns true on success, false on failure.
+ The metadata is applied into the a_Prefab object.
+ a_PieceName is the identification of the piece, used for logging only.
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool ApplyPieceMetadataCubesetVer1(
+ const AString & a_FileName,
+ cLuaState & a_LuaState,
+ const AString & a_PieceName,
+ cPrefab * a_Prefab,
+ bool a_LogWarnings
+ );
+
+ /** Reads the metadata for the entire pool from the cubeset file parsed into the specified Lua state.
+ Returns true on success, false on failure.
+ The metadata is applied into "this".
+ If a_LogWarnings is true, logs a warning to console when loading fails. */
+ bool ApplyPoolMetadataCubesetVer1(
+ const AString & a_FileName,
+ cLuaState & a_LuaState,
+ bool a_LogWarnings
+ );
} ;