diff options
author | kwolekr <mirrorisim@gmail.com> | 2013-02-25 20:52:24 -0800 |
---|---|---|
committer | kwolekr <mirrorisim@gmail.com> | 2013-02-25 20:52:24 -0800 |
commit | 979ca23f1eae1adeb8b0083dffe7203c54d87395 (patch) | |
tree | 689ce00fbfe55861f4df39e1801fc9bc990b141f /src/content_abm.cpp | |
parent | 9b5f182642416add39aab7782b1d155dafead160 (diff) | |
parent | b90e431fc785961e7913023999d1f570ad7ca151 (diff) | |
download | minetest-979ca23f1eae1adeb8b0083dffe7203c54d87395.tar.gz minetest-979ca23f1eae1adeb8b0083dffe7203c54d87395.tar.bz2 minetest-979ca23f1eae1adeb8b0083dffe7203c54d87395.zip |
Merge pull request #482 from proller/liquid
finite liquid
Diffstat (limited to 'src/content_abm.cpp')
-rw-r--r-- | src/content_abm.cpp | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/content_abm.cpp b/src/content_abm.cpp index cbfdd2e9f..03fc82ed4 100644 --- a/src/content_abm.cpp +++ b/src/content_abm.cpp @@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" #include "mapblock.h" // For getNodeBlockPos #include "treegen.h" // For treegen::make_tree +#include "main.h" // for g_settings #include "map.h" #define PP(x) "("<<(x).X<<","<<(x).Y<<","<<(x).Z<<")" @@ -146,11 +147,42 @@ public: } }; +class LiquidFlowABM : public ActiveBlockModifier +{ +private: + std::set<std::string> contents; + +public: + LiquidFlowABM(ServerEnvironment *env, INodeDefManager *nodemgr) + { + std::set<content_t> liquids; + nodemgr->getIds("group:liquid", liquids); + for(std::set<content_t>::const_iterator k = liquids.begin(); k != liquids.end(); k++) + contents.insert(nodemgr->get(*k).liquid_alternative_flowing); + + } + virtual std::set<std::string> getTriggerContents() + { + return contents; + } + virtual float getTriggerInterval() + { return 10.0; } + virtual u32 getTriggerChance() + { return 10; } + virtual void trigger(ServerEnvironment *env, v3s16 p, MapNode n) + { + ServerMap *map = &env->getServerMap(); + if (map->transforming_liquid_size() < 500) + map->transforming_liquid_add(p); + //if ((*map).m_transforming_liquid.size() < 500) (*map).m_transforming_liquid.push_back(p); + } +}; + void add_legacy_abms(ServerEnvironment *env, INodeDefManager *nodedef) { env->addActiveBlockModifier(new GrowGrassABM()); env->addActiveBlockModifier(new RemoveGrassABM()); env->addActiveBlockModifier(new MakeTreesFromSaplingsABM()); + if (g_settings->getBool("liquid_finite")) + env->addActiveBlockModifier(new LiquidFlowABM(env, nodedef)); } - - |