summaryrefslogtreecommitdiff
path: root/src/mg_biome.cpp
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2015-04-16 23:37:50 -0400
committerkwolekr <kwolekr@minetest.net>2015-04-16 23:38:05 -0400
commit821d0025da3d7dec662e75c6ce2ea32e86aec508 (patch)
treec609455732a6bbcf12c4c00a6f1627bb5c15cf14 /src/mg_biome.cpp
parent4abb96fb546b5975c74ff2cc295255fe17126287 (diff)
downloadminetest-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.cpp13
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;