summaryrefslogtreecommitdiff
path: root/src/treegen.h
diff options
context:
space:
mode:
authorRealBadAngel <mk@realbadangel.pl>2012-12-29 16:20:09 +0100
committerIlya Zhuravlev <zhuravlevilya@ya.ru>2012-12-30 13:42:19 +0400
commitb40e5998664ad6f03a59b70f1ddcdf651f4560ab (patch)
tree62d41a6161dbcfa75092f39686a22f34f4ebf03f /src/treegen.h
parent45029117f5d7ccef36508cf66f6659665530dabc (diff)
downloadminetest-b40e5998664ad6f03a59b70f1ddcdf651f4560ab.tar.gz
minetest-b40e5998664ad6f03a59b70f1ddcdf651f4560ab.tar.bz2
minetest-b40e5998664ad6f03a59b70f1ddcdf651f4560ab.zip
L-System treegen
Diffstat (limited to 'src/treegen.h')
-rw-r--r--src/treegen.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/treegen.h b/src/treegen.h
new file mode 100644
index 000000000..62a220ee2
--- /dev/null
+++ b/src/treegen.h
@@ -0,0 +1,71 @@
+/*
+Minetest-c55
+Copyright (C) 2010-2012 celeron55, Perttu Ahola <celeron55@gmail.com>,
+ 2012 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
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef TREEGEN_HEADER
+#define TREEGEN_HEADER
+
+#include <matrix4.h>
+
+class ManualMapVoxelManipulator;
+class INodeDefManager;
+
+
+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;
+int angle;
+int iterations;
+int iterations_random_level;
+bool thin_trunks;
+bool fruit_tree;
+MapNode fruitnode;
+};
+
+ // Add default tree
+ void make_tree(ManualMapVoxelManipulator &vmanip, v3s16 p0,
+ bool is_apple_tree, INodeDefManager *ndef);
+
+ // 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);
+
+ // L-System tree gen helper functions
+ void make_tree_node_placement(ManualMapVoxelManipulator &vmanip, v3f p0,
+ MapNode node);
+ void make_tree_trunk_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);
+
+ v3f transposeMatrix(irr::core::matrix4 M ,v3f v);
+
+}; // namespace treegen
+#endif