diff options
author | jfhumann <j.f.humann@gmail.com> | 2014-04-18 21:44:58 +0200 |
---|---|---|
committer | jfhumann <j.f.humann@gmail.com> | 2014-04-18 21:44:58 +0200 |
commit | 67344a378210b1f9c21a50f02e1ff2459be66d5f (patch) | |
tree | d775281489827d49139ee3e23fba87a1d079cf89 /src/Generating/PieceGenerator.h | |
parent | Did some static analysis, fixed some bugs and optimized a lot of code (diff) | |
parent | Added performance test of the nether fort generator. (diff) | |
download | cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar.gz cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar.bz2 cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar.lz cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar.xz cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.tar.zst cuberite-67344a378210b1f9c21a50f02e1ff2459be66d5f.zip |
Diffstat (limited to 'src/Generating/PieceGenerator.h')
-rw-r--r-- | src/Generating/PieceGenerator.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Generating/PieceGenerator.h b/src/Generating/PieceGenerator.h index bef9d3463..f4433b947 100644 --- a/src/Generating/PieceGenerator.h +++ b/src/Generating/PieceGenerator.h @@ -85,6 +85,13 @@ typedef std::vector<cPiece *> cPieces; +// fwd: +class cPlacedPiece; + + + + + /** This class is an interface that provides pieces for the generator. It can keep track of what pieces were placed and adjust the returned piece vectors. */ class cPiecePool @@ -101,6 +108,16 @@ public: Multiple starting points are supported, one of the returned piece will be chosen. */ virtual cPieces GetStartingPieces(void) = 0; + /** Returns the relative weight with which the a_NewPiece is to be selected for placing under a_PlacedPiece through a_ExistingConnector. + This allows the pool to tweak the piece's chances, based on the previous pieces in the tree and the connector used. + The higher the number returned, the higher the chance the piece will be chosen. 0 means the piece will never be chosen. + */ + virtual int GetPieceWeight( + const cPlacedPiece & a_PlacedPiece, + const cPiece::cConnector & a_ExistingConnector, + const cPiece & a_NewPiece + ) { return 1; } + /** Called after a piece is placed, to notify the pool that it has been used. The pool may adjust the pieces it will return the next time. */ virtual void PiecePlaced(const cPiece & a_Piece) = 0; @@ -157,8 +174,9 @@ protected: cPiece * m_Piece; // The piece being connected cPiece::cConnector m_Connector; // The piece's connector being used (relative non-rotated coords) int m_NumCCWRotations; // Number of rotations necessary to match the two connectors + int m_Weight; // Relative chance that this connection will be chosen - cConnection(cPiece & a_Piece, cPiece::cConnector & a_Connector, int a_NumCCWRotations); + cConnection(cPiece & a_Piece, cPiece::cConnector & a_Connector, int a_NumCCWRotations, int a_Weight); }; typedef std::vector<cConnection> cConnections; |