Exemplo n.º 1
0
void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
		PseudoRandom ps ,TreeDef &tree_definition)
{
	MapNode leavesnode=tree_definition.leavesnode;
	if (ps.range(1,100) > 100-tree_definition.leaves2_chance)
		leavesnode=tree_definition.leaves2node;
	v3s16 p1 = v3s16(myround(p0.X),myround(p0.Y),myround(p0.Z));
	if(vmanip.m_area.contains(p1) == false)
		return;
	u32 vi = vmanip.m_area.index(p1);
	if(vmanip.m_data[vi].getContent() != CONTENT_AIR
			&& vmanip.m_data[vi].getContent() != CONTENT_IGNORE)
		return;	
	if (tree_definition.fruit_chance>0)
	{
		if (ps.range(1,100) > 100-tree_definition.fruit_chance)
			vmanip.m_data[vmanip.m_area.index(p1)] = tree_definition.fruitnode;
		else
			vmanip.m_data[vmanip.m_area.index(p1)] = leavesnode;
	}
	else if (ps.range(1,100) > 20)
		vmanip.m_data[vmanip.m_area.index(p1)] = leavesnode;
}
Exemplo n.º 2
0
v3s16 random_turn(PseudoRandom &random, v3s16 olddir)
{
	int turn = random.range(0, 2);
	v3s16 dir;
	if (turn == 0)
		// Go straight
		dir = olddir;
	else if (turn == 1)
		// Turn right
		dir = turn_xz(olddir, 0);
	else
		// Turn left
		dir = turn_xz(olddir, 1);
	return dir;
}
Exemplo n.º 3
0
void MapgenV6::defineCave(Cave &cave, PseudoRandom ps,
						 v3s16 node_min, bool large_cave) {
		cave.min_tunnel_diameter = 2;
		cave.max_tunnel_diameter = ps.range(2,6);
		cave.dswitchint = ps.range(1,14);
		cave.flooded = true; //large_cave && ps.range(0,4);
		if(large_cave){
			cave.part_max_length_rs = ps.range(2,4);
			cave.tunnel_routepoints = ps.range(5, ps.range(15,30));
			cave.min_tunnel_diameter = 5;
			cave.max_tunnel_diameter = ps.range(7, ps.range(8,24));
		} else {
			cave.part_max_length_rs = ps.range(2,9);
			cave.tunnel_routepoints = ps.range(10, ps.range(15,30));
		}
		cave.large_cave_is_flat = (ps.range(0,1) == 0);
}