#include <stack>
#include "util/pointer.h"
#include "util/numeric.h"
-#include "util/mathconstants.h"
#include "map.h"
-#include "environment.h"
+#include "serverenvironment.h"
#include "nodedef.h"
#include "treegen.h"
+#include "voxelalgorithms.h"
namespace treegen
{
p1.Y -= 1;
VoxelArea leaves_a(v3s16(-2, -1, -2), v3s16(2, 2, 2));
- //SharedPtr<u8> leaves_d(new u8[leaves_a.getVolume()]);
Buffer<u8> leaves_d(leaves_a.getVolume());
for (s32 i = 0; i < leaves_a.getVolume(); i++)
leaves_d[i] = 0;
// L-System tree LUA spawner
treegen::error spawn_ltree(ServerEnvironment *env, v3s16 p0,
- INodeDefManager *ndef, TreeDef tree_definition)
+ INodeDefManager *ndef, const TreeDef &tree_definition)
{
ServerMap *map = &env->getServerMap();
std::map<v3s16, MapBlock*> modified_blocks;
if (e != SUCCESS)
return e;
- vmanip.blitBackAll(&modified_blocks);
+ voxalgo::blit_back_with_light(map, &vmanip, &modified_blocks);
- // update lighting
- std::map<v3s16, MapBlock*> lighting_modified_blocks;
- lighting_modified_blocks.insert(modified_blocks.begin(), modified_blocks.end());
- map->updateLighting(lighting_modified_blocks, modified_blocks);
// Send a MEET_OTHER event
MapEditEvent event;
event.type = MEET_OTHER;
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)
+ content_t current_node = vmanip.m_data[vi].getContent();
+ if (current_node != CONTENT_AIR && current_node != CONTENT_IGNORE
+ && current_node != tree_definition.leavesnode.getContent()
+ && current_node != tree_definition.leaves2node.getContent()
+ && current_node != tree_definition.fruitnode.getContent())
return;
- vmanip.m_data[vmanip.m_area.index(p1)] = tree_definition.trunknode;
+ vmanip.m_data[vi] = tree_definition.trunknode;
}
p1.Y -= 1;
VoxelArea leaves_a(v3s16(-3, -6, -3), v3s16(3, 3, 3));
- //SharedPtr<u8> leaves_d(new u8[leaves_a.getVolume()]);
Buffer<u8> leaves_d(leaves_a.getVolume());
for (s32 i = 0; i < leaves_a.getVolume(); i++)
leaves_d[i] = 0;
}
// Centre top nodes
- u32 i = leaves_a.index(v3s16(0, 1, 0));
- leaves_d[i] = 1;
- i = leaves_a.index(v3s16(0, 2, 0));
- leaves_d[i] = 1;
- i = leaves_a.index(v3s16(0, 3, 0));
- leaves_d[i] = 2;
+ leaves_d[leaves_a.index(v3s16(0, 1, 0))] = 1;
+ leaves_d[leaves_a.index(v3s16(0, 2, 0))] = 1;
+ leaves_d[leaves_a.index(v3s16(0, 3, 0))] = 2;
// Lower branches
s16 my = -6;
for (s16 zz = zi; zz <= zi + 1; zz++) {
u32 i = leaves_a.index(v3s16(xi, yy, zz));
u32 ia = leaves_a.index(v3s16(xi, yy + 1, zz));
- for (s16 xx = xi; xx <= xi + 1; xx++) {
+ for (s32 xx = xi; xx <= xi + 1; xx++) {
leaves_d[i] = 1;
if (leaves_d[ia] == 0)
leaves_d[ia] = 2;