Added a lilypad finisher
git-svn-id: http://mc-server.googlecode.com/svn/trunk@647 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
b587a7f3a5
commit
358e74ded8
@ -283,3 +283,76 @@ void cFinishGenIce::GenFinish(
|
||||
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// cFinishGenLilypads:
|
||||
|
||||
int cFinishGenLilypads::GetNumLilypads(const cChunkDef::BiomeMap & a_BiomeMap)
|
||||
{
|
||||
int res = 0;
|
||||
for (int i = 0; i < ARRAYCOUNT(a_BiomeMap); i++)
|
||||
{
|
||||
if (a_BiomeMap[i] == biSwampland)
|
||||
{
|
||||
res++;
|
||||
}
|
||||
} // for i - a_BiomeMap[]
|
||||
return res / 64;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cFinishGenLilypads::GenFinish(
|
||||
int a_ChunkX, int a_ChunkZ,
|
||||
cChunkDef::BlockTypes & a_BlockTypes, // Block types to read and change
|
||||
cChunkDef::BlockNibbles & a_BlockMeta, // Block meta to read and change
|
||||
cChunkDef::HeightMap & a_HeightMap, // Height map to read and change by the current data
|
||||
const cChunkDef::BiomeMap & a_BiomeMap, // Biomes to adhere to
|
||||
cEntityList & a_Entities, // Entities may be added or deleted
|
||||
cBlockEntityList & a_BlockEntities // Block entities may be added or deleted
|
||||
)
|
||||
{
|
||||
// Add Lilypads on top of water surface in Swampland
|
||||
|
||||
int NumLilypads = GetNumLilypads(a_BiomeMap);
|
||||
for (int i = 0; i < NumLilypads; i++)
|
||||
{
|
||||
int x = m_Noise.IntNoise3DInt(a_ChunkX + a_ChunkZ, a_ChunkZ, i) % cChunkDef::Width;
|
||||
int z = m_Noise.IntNoise3DInt(a_ChunkX - a_ChunkZ, i, a_ChunkZ) % cChunkDef::Width;
|
||||
|
||||
// Place a lily pad at {x, z} if possible (swampland, empty block, water below):
|
||||
if (cChunkDef::GetBiome(a_BiomeMap, x, z) != biSwampland)
|
||||
{
|
||||
// not swampland
|
||||
continue;
|
||||
}
|
||||
int Height = cChunkDef::GetHeight(a_HeightMap, x, z);
|
||||
if (Height >= cChunkDef::Height)
|
||||
{
|
||||
// Too high up
|
||||
continue;
|
||||
}
|
||||
if (cChunkDef::GetBlock(a_BlockTypes, x, Height + 1, z) != E_BLOCK_AIR)
|
||||
{
|
||||
// not empty block
|
||||
continue;
|
||||
}
|
||||
switch (cChunkDef::GetBlock(a_BlockTypes, x, Height, z))
|
||||
{
|
||||
case E_BLOCK_WATER:
|
||||
case E_BLOCK_STATIONARY_WATER:
|
||||
{
|
||||
cChunkDef::SetBlock(a_BlockTypes, x, Height + 1, z, E_BLOCK_LILY_PAD);
|
||||
cChunkDef::SetHeight(a_HeightMap, x, z, Height + 1);
|
||||
break;
|
||||
}
|
||||
} // switch (GetBlock)
|
||||
} // for i
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
|
||||
#include "cChunkGenerator.h"
|
||||
#include "cNoise.h"
|
||||
|
||||
|
||||
|
||||
@ -88,3 +89,34 @@ protected:
|
||||
|
||||
|
||||
|
||||
|
||||
class cFinishGenLilypads :
|
||||
public cFinishGen
|
||||
{
|
||||
public:
|
||||
cFinishGenLilypads(int a_Seed) :
|
||||
m_Noise(a_Seed)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
cNoise m_Noise;
|
||||
|
||||
int GetNumLilypads(const cChunkDef::BiomeMap & a_BiomeMap);
|
||||
|
||||
// cFinishGen override:
|
||||
virtual void GenFinish(
|
||||
int a_ChunkX, int a_ChunkZ,
|
||||
cChunkDef::BlockTypes & a_BlockTypes, // Block types to read and change
|
||||
cChunkDef::BlockNibbles & a_BlockMeta, // Block meta to read and change
|
||||
cChunkDef::HeightMap & a_HeightMap, // Height map to read and change by the current data
|
||||
const cChunkDef::BiomeMap & a_BiomeMap, // Biomes to adhere to
|
||||
cEntityList & a_Entities, // Entities may be added or deleted
|
||||
cBlockEntityList & a_BlockEntities // Block entities may be added or deleted
|
||||
) override;
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -328,7 +328,7 @@ void cChunkGenerator::InitStructureGens(cIniFile & a_IniFile)
|
||||
|
||||
void cChunkGenerator::InitFinishGens(cIniFile & a_IniFile)
|
||||
{
|
||||
AString Structures = a_IniFile.GetValueSet("Generator", "Finishers", "SprinkleFoliage,Ice,Snow");
|
||||
AString Structures = a_IniFile.GetValueSet("Generator", "Finishers", "SprinkleFoliage,Ice,Snow,Lilypads");
|
||||
|
||||
AStringVector Str = StringSplit(Structures, ",");
|
||||
for (AStringVector::const_iterator itr = Str.begin(); itr != Str.end(); ++itr)
|
||||
@ -345,6 +345,10 @@ void cChunkGenerator::InitFinishGens(cIniFile & a_IniFile)
|
||||
{
|
||||
m_FinishGens.push_back(new cFinishGenIce);
|
||||
}
|
||||
else if (NoCaseCompare(*itr, "Lilypads") == 0)
|
||||
{
|
||||
m_FinishGens.push_back(new cFinishGenLilypads(m_Seed));
|
||||
}
|
||||
} // for itr - Str[]
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user