diff options
author | kwolekr <kwolekr@minetest.net> | 2015-04-16 23:37:50 -0400 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2015-04-16 23:38:05 -0400 |
commit | 821d0025da3d7dec662e75c6ce2ea32e86aec508 (patch) | |
tree | c609455732a6bbcf12c4c00a6f1627bb5c15cf14 /src/mg_biome.cpp | |
parent | 4abb96fb546b5975c74ff2cc295255fe17126287 (diff) | |
download | minetest-821d0025da3d7dec662e75c6ce2ea32e86aec508.tar.gz minetest-821d0025da3d7dec662e75c6ce2ea32e86aec508.tar.bz2 minetest-821d0025da3d7dec662e75c6ce2ea32e86aec508.zip |
Biomes: Remove referenced biomes from Decorations on clear
Diffstat (limited to 'src/mg_biome.cpp')
-rw-r--r-- | src/mg_biome.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mg_biome.cpp b/src/mg_biome.cpp index c2040f542..854876545 100644 --- a/src/mg_biome.cpp +++ b/src/mg_biome.cpp @@ -18,6 +18,8 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "mg_biome.h" +#include "mg_decoration.h" +#include "emerge.h" #include "gamedef.h" #include "nodedef.h" #include "map.h" //for MMVManip @@ -33,6 +35,8 @@ with this program; if not, write to the Free Software Foundation, Inc., BiomeManager::BiomeManager(IGameDef *gamedef) : ObjDefManager(gamedef, OBJDEF_BIOME) { + m_gamedef = gamedef; + // Create default biome to be used in case none exist Biome *b = new Biome; @@ -103,7 +107,16 @@ Biome *BiomeManager::getBiome(float heat, float humidity, s16 y) void BiomeManager::clear() { + EmergeManager *emerge = m_gamedef->getEmergeManager(); + + // Remove all dangling references in Decorations + DecorationManager *decomgr = emerge->decomgr; + for (size_t i = 0; i != decomgr->getNumObjects(); i++) { + Decoration *deco = (Decoration *)decomgr->getRaw(i); + deco->biomes.clear(); + } + // Don't delete the first biome for (size_t i = 1; i < m_objects.size(); i++) { Biome *b = (Biome *)m_objects[i]; delete b; |