From 6a1670dbc31cc0e44178bbd9ad34ff0d5981a060 Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 20 Dec 2012 21:19:49 +0400 Subject: Migrate to STL containers/algorithms. --- src/treegen.cpp | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'src/treegen.cpp') diff --git a/src/treegen.cpp b/src/treegen.cpp index 7b6152329..a8500026b 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -114,7 +114,7 @@ void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0, void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef, TreeDef tree_definition) { ServerMap *map = &env->getServerMap(); - core::map modified_blocks; + std::map modified_blocks; ManualMapVoxelManipulator vmanip(map); v3s16 tree_blockp = getNodeBlockPos(p0); vmanip.initialEmerge(tree_blockp - v3s16(1,1,1), tree_blockp + v3s16(1,3,1)); @@ -122,23 +122,17 @@ void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef, TreeD vmanip.blitBackAll(&modified_blocks); // update lighting - core::map lighting_modified_blocks; - for(core::map::Iterator - i = modified_blocks.getIterator(); - i.atEnd() == false; i++) - { - lighting_modified_blocks.insert(i.getNode()->getKey(), i.getNode()->getValue()); - } + std::map 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; - for(core::map::Iterator - i = modified_blocks.getIterator(); - i.atEnd() == false; i++) + for(std::map::iterator + i = modified_blocks.begin(); + i != modified_blocks.end(); ++i) { - v3s16 p = i.getNode()->getKey(); - event.modified_blocks.insert(p, true); + event.modified_blocks.insert(i->first); } map->dispatchEvent(&event); } -- cgit v1.2.3 From d10223254ab9363eb1b6f8cc7aa6b99965940cee Mon Sep 17 00:00:00 2001 From: kwolekr Date: Mon, 11 Mar 2013 21:32:52 -0400 Subject: Clean up Mapgen --- src/treegen.cpp | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'src/treegen.cpp') diff --git a/src/treegen.cpp b/src/treegen.cpp index a8500026b..5ddf1132d 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -28,15 +28,16 @@ with this program; if not, write to the Free Software Foundation, Inc., namespace treegen { + void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0, - bool is_apple_tree, INodeDefManager *ndef,int seed) + bool is_apple_tree, INodeDefManager *ndef, int seed) { MapNode treenode(ndef->getId("mapgen_tree")); MapNode leavesnode(ndef->getId("mapgen_leaves")); MapNode applenode(ndef->getId("mapgen_apple")); - PseudoRandom ps(seed); - s16 trunk_h = ps.range(4, 5); + PseudoRandom pr(seed); + s16 trunk_h = pr.range(4, 5); v3s16 p1 = p0; for(s16 ii=0; iigetServerMap(); std::map modified_blocks; @@ -506,17 +507,17 @@ v3f transposeMatrix(irr::core::matrix4 M, v3f v) return translated; } -#if 0 -static void make_jungletree(VoxelManipulator &vmanip, v3s16 p0, - INodeDefManager *ndef) +void make_jungletree(VoxelManipulator &vmanip, v3s16 p0, + INodeDefManager *ndef, int seed) { MapNode treenode(ndef->getId("mapgen_jungletree")); MapNode leavesnode(ndef->getId("mapgen_leaves")); + PseudoRandom pr(seed); for(s16 x=-1; x<=1; x++) for(s16 z=-1; z<=1; z++) { - if(myrand_range(0, 2) == 0) + if(pr.range(0, 2) == 0) continue; v3s16 p1 = p0 + v3s16(x,0,z); v3s16 p2 = p0 + v3s16(x,-1,z); @@ -527,7 +528,7 @@ static void make_jungletree(VoxelManipulator &vmanip, v3s16 p0, vmanip.m_data[vmanip.m_area.index(p1)] = treenode; } - s16 trunk_h = myrand_range(8, 12); + s16 trunk_h = pr.range(8, 12); v3s16 p1 = p0; for(s16 ii=0; ii Date: Sat, 16 Mar 2013 17:06:11 -0400 Subject: Re-add jungles, apple trees --- src/treegen.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/treegen.cpp') diff --git a/src/treegen.cpp b/src/treegen.cpp index 5ddf1132d..9df528a21 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -510,8 +510,15 @@ v3f transposeMatrix(irr::core::matrix4 M, v3f v) void make_jungletree(VoxelManipulator &vmanip, v3s16 p0, INodeDefManager *ndef, int seed) { - MapNode treenode(ndef->getId("mapgen_jungletree")); - MapNode leavesnode(ndef->getId("mapgen_leaves")); + content_t c_tree = ndef->getId("mapgen_jungletree"); + content_t c_leaves = ndef->getId("mapgen_jungleleaves"); + if (c_tree == CONTENT_IGNORE) + c_tree = ndef->getId("mapgen_tree"); + if (c_leaves == CONTENT_IGNORE) + c_leaves = ndef->getId("mapgen_leaves"); + + MapNode treenode(c_tree); + MapNode leavesnode(c_leaves); PseudoRandom pr(seed); for(s16 x=-1; x<=1; x++) -- cgit v1.2.3 From e3badd7062d4bee62335cf100f3f91ef4c370aae Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 16 Mar 2013 19:37:27 -0400 Subject: Make saplings only grow on dirt or grass, make jungle tree trunks only replace air --- src/treegen.cpp | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/treegen.cpp') diff --git a/src/treegen.cpp b/src/treegen.cpp index 9df528a21..808cf916a 100644 --- a/src/treegen.cpp +++ b/src/treegen.cpp @@ -528,19 +528,27 @@ void make_jungletree(VoxelManipulator &vmanip, v3s16 p0, continue; v3s16 p1 = p0 + v3s16(x,0,z); v3s16 p2 = p0 + v3s16(x,-1,z); - if(vmanip.m_area.contains(p2) - && vmanip.m_data[vmanip.m_area.index(p2)] == CONTENT_AIR) - vmanip.m_data[vmanip.m_area.index(p2)] = treenode; - else if(vmanip.m_area.contains(p1)) - vmanip.m_data[vmanip.m_area.index(p1)] = treenode; + u32 vi1 = vmanip.m_area.index(p1); + u32 vi2 = vmanip.m_area.index(p2); + + if (vmanip.m_area.contains(p2) && + vmanip.m_data[vi2].getContent() == CONTENT_AIR) + vmanip.m_data[vi2] = treenode; + else if (vmanip.m_area.contains(p1) && + vmanip.m_data[vi1].getContent() == CONTENT_AIR) + vmanip.m_data[vi1] = treenode; } + vmanip.m_data[vmanip.m_area.index(p0)] = treenode; s16 trunk_h = pr.range(8, 12); v3s16 p1 = p0; - for(s16 ii=0; ii