Add Lua on_mapgen_init callback, and minetest.set_mapgen_params API
[oweals/minetest.git] / src / treegen.h
index 1435d6bb200d4ec773b8d27d17bbb721b04144ea..16c85cf0a301c079cce25c3e396fa2b37eefcb8a 100644 (file)
@@ -1,7 +1,7 @@
 /*
-Minetest-c55
-Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>,
-                                  2012 RealBadAngel, Maciej Kasatkin <mk@realbadangel.pl>
+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
 the Free Software Foundation; either version 2.1 of the License, or
@@ -21,54 +21,64 @@ 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,
                TreeDef tree_definition);
        // Spawn L-systems tree from LUA
-       void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef, TreeDef tree_definition);    
-       
+       void spawn_ltree (ServerEnvironment *env, v3s16 p0, INodeDefManager *ndef,
+               TreeDef tree_definition);
+
        // L-System tree gen helper functions
-       void make_tree_node_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+       void tree_node_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
                MapNode node);
-       void make_tree_trunk_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+       void tree_trunk_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+               TreeDef &tree_definition);
+       void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+               PseudoRandom ps, TreeDef &tree_definition);
+       void tree_single_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+               PseudoRandom ps, TreeDef &tree_definition);
+       void tree_fruit_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
                TreeDef &tree_definition);
-       void make_tree_leaves_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);
-                       
+
 }; // namespace treegen
 #endif