summaryrefslogtreecommitdiffstats
path: root/src/Generating/NetherFortGen.h
blob: 10ba01396449039e1517ab67340a13e329437cb6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

// NetherFortGen.h

// Declares the cNetherFortGen class representing the nether fortress generator





#pragma once

#include "ComposableGenerator.h"
#include "PieceGenerator.h"





class cNetherFortGen :
	public cFinishGen,
	public cPiecePool
{
public:
	cNetherFortGen(int a_Seed, int a_GridSize, int a_MaxDepth);
	
	virtual ~cNetherFortGen();
	
protected:
	class cNetherFort;  // fwd: NetherFortGen.cpp
	typedef std::list<cNetherFort *> cNetherForts;
	
	
	/** The seed used for generating*/
	int m_Seed;
	
	/** The noise used for generating */
	cNoise m_Noise;
	
	/** Average spacing between the fortresses*/
	int m_GridSize;
	
	/** Maximum depth of the piece-generator tree */
	int m_MaxDepth;

	/** Cache of the most recently used systems. MoveToFront used. */
	cNetherForts m_Cache;
	
	/** 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 pieces that have an "outer" connector.
	The pieces are copies out of m_AllPieces and shouldn't be ever delete-d. */
	cPieces m_OuterPieces;

	/** The pieces that have an "inner" connector.
	The pieces are copies out of m_AllPieces and shouldn't be ever delete-d. */
	cPieces m_InnerPieces;


	/** Clears everything from the cache.
	Also invalidates the forst returned by GetFortsForChunk(). */
	void ClearCache(void);
	
	/** Returns all forts that *may* intersect the given chunk.
	The returned forts live within m_Cache.They are valid until the next call
	to this function (which may delete some of the pointers).	*/
	void GetFortsForChunk(int a_ChunkX, int a_ChunkZ, cNetherForts & a_Forts);

	// cFinishGen overrides:
	virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
	
	// cPiecePool overrides:
	virtual cPieces GetPiecesWithConnector(int a_ConnectorType) override;
	virtual cPieces GetStartingPieces(void) override;
	virtual void PiecePlaced(const cPiece & a_Piece) override;
	virtual void Reset(void) override;
} ;