Add Lua on_mapgen_init callback, and minetest.set_mapgen_params API
[oweals/minetest.git] / src / treegen.h
index cb365f4bea5a9a6806b2147dbdd51c0ff5c47d9c..16c85cf0a301c079cce25c3e396fa2b37eefcb8a 100644 (file)
@@ -1,6 +1,6 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>,
+Minetest
+Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>,
                          2012-2013 RealBadAngel, Maciej Kasatkin <mk@realbadangel.pl>
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
@@ -21,37 +21,42 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #define TREEGEN_HEADER
 
 #include <matrix4.h>
+#include "noise.h"
 
 class ManualMapVoxelManipulator;
 class INodeDefManager;
 
 
-namespace treegen
-{
+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;
-};
+       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;
+       };
 
        // Add default tree
        void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0,
-               bool is_apple_tree, INodeDefManager *ndef);
+               bool is_apple_tree, INodeDefManager *ndef, int seed);
+       // Add jungle tree
+       void make_jungletree(VoxelManipulator &vmanip, v3s16 p0,
+               INodeDefManager *ndef, int seed);
 
        // Add L-Systems tree (used by engine)
        void make_ltree(ManualMapVoxelManipulator &vmanip, v3s16 p0, INodeDefManager *ndef,
@@ -66,12 +71,12 @@ int fruit_chance;
        void tree_trunk_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
                TreeDef &tree_definition);
        void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
-               TreeDef &tree_definition);
+               PseudoRandom ps, TreeDef &tree_definition);
        void tree_single_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
-               TreeDef &tree_definition);
+               PseudoRandom ps, TreeDef &tree_definition);
        void tree_fruit_placement(ManualMapVoxelManipulator &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);