#include <matrix4.h>
#include "noise.h"
-class ManualMapVoxelManipulator;
+class MMVManip;
class INodeDefManager;
class ServerEnvironment;
namespace treegen {
+ enum error {
+ SUCCESS,
+ UNBALANCED_BRACKETS
+ };
+
struct TreeDef {
std::string initial_axiom;
std::string rules_a;
bool thin_branches;
MapNode fruitnode;
int fruit_chance;
- int seed;
+ s32 seed;
+ bool explicit_seed;
};
// Add default tree
- void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0,
- bool is_apple_tree, INodeDefManager *ndef, int seed);
+ void make_tree(MMVManip &vmanip, v3s16 p0,
+ bool is_apple_tree, INodeDefManager *ndef, s32 seed);
// Add jungle tree
- void make_jungletree(VoxelManipulator &vmanip, v3s16 p0,
- INodeDefManager *ndef, int seed);
+ void make_jungletree(MMVManip &vmanip, v3s16 p0,
+ INodeDefManager *ndef, s32 seed);
+ // Add pine tree
+ void make_pine_tree(MMVManip &vmanip, v3s16 p0,
+ INodeDefManager *ndef, s32 seed);
// Add L-Systems tree (used by engine)
- void make_ltree(ManualMapVoxelManipulator &vmanip, v3s16 p0, INodeDefManager *ndef,
+ treegen::error make_ltree(MMVManip &vmanip, v3s16 p0, INodeDefManager *ndef,
TreeDef tree_definition);
// Spawn L-systems tree from LUA
- void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef,
- TreeDef tree_definition);
+ treegen::error spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef,
+ const TreeDef &tree_definition);
// L-System tree gen helper functions
- void tree_node_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ void tree_node_placement(MMVManip &vmanip, v3f p0,
MapNode node);
- void tree_trunk_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ void tree_trunk_placement(MMVManip &vmanip, v3f p0,
TreeDef &tree_definition);
- void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ void tree_leaves_placement(MMVManip &vmanip, v3f p0,
PseudoRandom ps, TreeDef &tree_definition);
- void tree_single_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ void tree_single_leaves_placement(MMVManip &vmanip, v3f p0,
PseudoRandom ps, TreeDef &tree_definition);
- void tree_fruit_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ void tree_fruit_placement(MMVManip &vmanip, v3f p0,
TreeDef &tree_definition);
irr::core::matrix4 setRotationAxisRadians(irr::core::matrix4 M, double angle, v3f axis);