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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
// StructGen.h
/* Interfaces to the various structure generators:
- cStructGenTrees
- cStructGenMarbleCaves
- cStructGenOres
*/
#pragma once
#include "ComposableGenerator.h"
#include "../Noise/Noise.h"
class cStructGenTrees : public cFinishGen
{
public:
cStructGenTrees(
int a_Seed,
cBiomeGen & a_BiomeGen,
cTerrainShapeGen & a_ShapeGen,
cTerrainCompositionGen & a_CompositionGen
) :
m_Seed(a_Seed),
m_Noise(a_Seed),
m_BiomeGen(a_BiomeGen),
m_ShapeGen(a_ShapeGen),
m_CompositionGen(a_CompositionGen)
{
}
protected:
int m_Seed;
cNoise m_Noise;
cBiomeGen & m_BiomeGen;
cTerrainShapeGen & m_ShapeGen;
cTerrainCompositionGen & m_CompositionGen;
/** Generates and applies an image of a single tree.
Parts of the tree inside the chunk are applied to a_ChunkDesc.
Parts of the tree outside the chunk are stored in a_OutsideXYZ
*/
void GenerateSingleTree(
int a_ChunkX,
int a_ChunkZ,
int a_Seq,
Vector3i a_Pos,
cChunkDesc & a_ChunkDesc,
sSetBlockVector & a_OutsideLogs,
sSetBlockVector & a_OutsideOther
);
/** Applies an image into chunk blockdata; all blocks outside the chunk will be appended to a_Overflow. */
void ApplyTreeImage(
int a_ChunkX,
int a_ChunkZ,
cChunkDesc & a_ChunkDesc,
const sSetBlockVector & a_Image,
sSetBlockVector & a_Overflow
);
/** Get the the number of trees to generate in a_Chunk
If the value is between 0 and 1, it should be interpreted as the probability that a tree should be generated.
*/
double GetNumTrees(int a_ChunkX, int a_ChunkZ, const cChunkDef::BiomeMap & a_Biomes);
// cFinishGen override:
virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
};
class cStructGenLakes : public cFinishGen
{
public:
cStructGenLakes(int a_Seed, BLOCKTYPE a_Fluid, cTerrainShapeGen & a_ShapeGen, int a_Probability) :
m_Noise(a_Seed), m_Seed(a_Seed), m_Fluid(a_Fluid), m_ShapeGen(a_ShapeGen), m_Probability(a_Probability)
{
}
protected:
cNoise m_Noise;
int m_Seed;
BLOCKTYPE m_Fluid;
cTerrainShapeGen & m_ShapeGen;
/** Chance, [0 .. 100], of a chunk having the lake. */
int m_Probability;
// cFinishGen override:
virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
/** Creates a lake image for the specified chunk into a_Lake. */
void CreateLakeImage(int a_ChunkX, int a_ChunkZ, int a_MaxLakeHeight, cBlockArea & a_Lake);
};
class cStructGenDirectOverhangs : public cFinishGen
{
public:
cStructGenDirectOverhangs(int a_Seed);
protected:
cNoise m_Noise1;
cNoise m_Noise2;
// cFinishGen override:
virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
bool HasWantedBiome(cChunkDesc & a_ChunkDesc) const;
};
class cStructGenDistortedMembraneOverhangs : public cFinishGen
{
public:
cStructGenDistortedMembraneOverhangs(int a_Seed);
protected:
cNoise m_NoiseX;
cNoise m_NoiseY;
cNoise m_NoiseZ;
cNoise m_NoiseH;
// cFinishGen override:
virtual void GenFinish(cChunkDesc & a_ChunkDesc) override;
};
|