#include <matrix4.h>
#include "noise.h"
-class ManualMapVoxelManipulator;
+class MMVManip;
class INodeDefManager;
+class ServerEnvironment;
-namespace treegen
-{
-
-struct TreeDef
-{
-std::string initial_axiom;
-std::string rules_a;
-std::string rules_b;
-std::string rules_c;
-std::string rules_d;
-MapNode trunknode;
-MapNode leavesnode;
-MapNode leaves2node;
-int leaves2_chance;
-int angle;
-int iterations;
-int iterations_random_level;
-std::string trunk_type;
-bool thin_branches;
-MapNode fruitnode;
-int fruit_chance;
-int seed;
-};
+namespace treegen {
+
+ enum error {
+ SUCCESS,
+ UNBALANCED_BRACKETS
+ };
+
+ struct TreeDef {
+ std::string initial_axiom;
+ std::string rules_a;
+ std::string rules_b;
+ std::string rules_c;
+ std::string rules_d;
+
+ MapNode trunknode;
+ MapNode leavesnode;
+ MapNode leaves2node;
+
+ int leaves2_chance;
+ int angle;
+ int iterations;
+ int iterations_random_level;
+ std::string trunk_type;
+ bool thin_branches;
+ MapNode fruitnode;
+ int fruit_chance;
+ 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(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);
+ irr::core::matrix4 setRotationAxisRadians(irr::core::matrix4 M, double angle, v3f axis);
v3f transposeMatrix(irr::core::matrix4 M ,v3f v);