X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Ftreegen.h;h=8e5306560df52be8e114eaa759fcf1acec2ca7a5;hb=a1e1a19ac355dbe7e1a2e060fd6b5fe082298eb6;hp=cb365f4bea5a9a6806b2147dbdd51c0ff5c47d9c;hpb=13358c29b8a754709c49b0ba997f029af26134bc;p=minetest.git diff --git a/src/treegen.h b/src/treegen.h index cb365f4be..8e5306560 100644 --- a/src/treegen.h +++ b/src/treegen.h @@ -1,6 +1,6 @@ /* -Minetest-c55 -Copyright (C) 2010-2012 celeron55, Perttu Ahola , +Minetest +Copyright (C) 2010-2013 celeron55, Perttu Ahola , 2012-2013 RealBadAngel, Maciej Kasatkin 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 @@ -17,63 +17,76 @@ 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 +#pragma once #include +#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; -}; +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); + 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, - TreeDef &tree_definition); - void tree_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0, - TreeDef &tree_definition); - void tree_single_leaves_placement(ManualMapVoxelManipulator &vmanip, v3f p0, + void tree_trunk_placement(MMVManip &vmanip, v3f p0, TreeDef &tree_definition); - void tree_fruit_placement(ManualMapVoxelManipulator &vmanip, v3f p0, + void tree_leaves_placement(MMVManip &vmanip, v3f p0, + PseudoRandom ps, TreeDef &tree_definition); + void tree_single_leaves_placement(MMVManip &vmanip, v3f p0, + PseudoRandom ps, TreeDef &tree_definition); + 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); }; // namespace treegen -#endif