#include "mineral.h"
//#include "serverobject.h"
#include "content_sao.h"
+#include "nodedef.h"
namespace mapgen
{
}
#endif
-static void make_tree(VoxelManipulator &vmanip, v3s16 p0)
+void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0, bool is_apple_tree)
{
MapNode treenode(CONTENT_TREE);
MapNode leavesnode(CONTENT_LEAVES);
MapNode applenode(CONTENT_APPLE);
- bool is_apple_tree = myrand_range(0,100) < 35?true:false;
- s16 apple_count = 0;
-
-
s16 trunk_h = myrand_range(4, 5);
v3s16 p1 = p0;
for(s16 ii=0; ii<trunk_h; ii++)
for(s16 y=leaves_a.MinEdge.Y; y<=leaves_a.MaxEdge.Y; y++)
for(s16 x=leaves_a.MinEdge.X; x<=leaves_a.MaxEdge.X; x++)
{
- bool is_apple = myrand_range(0,100) < 50?true:false;
v3s16 p(x,y,z);
p += p1;
if(vmanip.m_area.contains(p) == false)
continue;
u32 i = leaves_a.index(x,y,z);
if(leaves_d[i] == 1) {
- if(is_apple_tree && is_apple && apple_count < 4) {
+ bool is_apple = myrand_range(0,99) < 10;
+ if(is_apple_tree && is_apple) {
vmanip.m_data[vi] = applenode;
- apple_count++;
} else {
vmanip.m_data[vi] = leavesnode;
}
*/
void add_random_objects(MapBlock *block)
{
+#if 0
for(s16 z0=0; z0<MAP_BLOCKSIZE; z0++)
for(s16 x0=0; x0<MAP_BLOCKSIZE; x0++)
{
MapNode n = block->getNodeNoEx(p);
if(n.getContent() == CONTENT_IGNORE)
continue;
- if(content_features(n).liquid_type != LIQUID_NONE)
+ if(data->nodemgr->get(n)->liquid_type != LIQUID_NONE)
continue;
- if(content_features(n).walkable)
+ if(data->nodemgr->get(n)->walkable)
{
last_node_walkable = true;
continue;
}
}
block->setChangedFlag();
+#endif
}
void make_block(BlockMakeData *data)
return;
}
+ assert(data->vmanip);
+ assert(data->nodemgr);
+
v3s16 blockpos = data->blockpos;
/*dstream<<"makeBlock(): ("<<blockpos.X<<","<<blockpos.Y<<","
p.Y++;
//if(surface_humidity_2d(data->seed, v2s16(x, y)) < 0.5)
if(is_jungle == false)
- make_tree(vmanip, p);
+ {
+ bool is_apple_tree;
+ if(myrand_range(0,4) != 0)
+ is_apple_tree = false;
+ else
+ is_apple_tree = noise2d_perlin(
+ 0.5+(float)p.X/100, 0.5+(float)p.Z/100,
+ data->seed+342902, 3, 0.45) > 0.2;
+ make_tree(vmanip, p, is_apple_tree);
+ }
else
make_jungletree(vmanip, p);
}
{
u32 i = data->vmanip->m_area.index(p);
MapNode *n = &data->vmanip->m_data[i];
- if(content_features(*n).is_ground_content
+ if(data->nodemgr->get(*n).is_ground_content
|| n->getContent() == CONTENT_JUNGLETREE)
{
found = true;
BlockMakeData::BlockMakeData():
no_op(false),
vmanip(NULL),
- seed(0)
+ seed(0),
+ nodemgr(NULL)
{}
BlockMakeData::~BlockMakeData()