]> git.lizzy.rs Git - minetest.git/blobdiff - src/mg_decoration.cpp
NodeResolver: Remove NodeResolveMethod
[minetest.git] / src / mg_decoration.cpp
index 8f81b0d11eb90ec6165a6a5bd8739a6cfbf82af2..5176ccb68cb96e552e8254a22d1e8b0872b5b81c 100644 (file)
@@ -61,16 +61,6 @@ size_t DecorationManager::placeAllDecos(Mapgen *mg, u32 blockseed,
 }
 
 
-void DecorationManager::clear()
-{
-       for (size_t i = 0; i < m_objects.size(); i++) {
-               Decoration *deco = (Decoration *)m_objects[i];
-               delete deco;
-       }
-       m_objects.clear();
-}
-
-
 ///////////////////////////////////////////////////////////////////////////////
 
 
@@ -320,18 +310,17 @@ int DecoSimple::getHeight()
 ///////////////////////////////////////////////////////////////////////////////
 
 
-size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
+DecoSchematic::DecoSchematic()
 {
-       if (flags & DECO_PLACE_CENTER_X)
-               p.X -= (schematic->size.X + 1) / 2;
-       if (flags & DECO_PLACE_CENTER_Y)
-               p.Y -= (schematic->size.Y + 1) / 2;
-       if (flags & DECO_PLACE_CENTER_Z)
-               p.Z -= (schematic->size.Z + 1) / 2;
+       schematic = NULL;
+}
 
-       bool force_placement = (flags & DECO_FORCE_PLACEMENT);
 
-       if (!vm->m_area.contains(p))
+size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
+{
+       // Schematic could have been unloaded but not the decoration
+       // In this case generate() does nothing (but doesn't *fail*)
+       if (schematic == NULL)
                return 0;
 
        u32 vi = vm->m_area.index(p);
@@ -339,10 +328,19 @@ size_t DecoSchematic::generate(MMVManip *vm, PseudoRandom *pr, v3s16 p)
        if (!CONTAINS(c_place_on, c))
                return 0;
 
+       if (flags & DECO_PLACE_CENTER_X)
+               p.X -= (schematic->size.X - 1) / 2;
+       if (flags & DECO_PLACE_CENTER_Y)
+               p.Y -= (schematic->size.Y - 1) / 2;
+       if (flags & DECO_PLACE_CENTER_Z)
+               p.Z -= (schematic->size.Z - 1) / 2;
+
        Rotation rot = (rotation == ROTATE_RAND) ?
                (Rotation)pr->range(ROTATE_0, ROTATE_270) : rotation;
 
-       schematic->blitToVManip(p, vm, rot, force_placement, m_ndef);
+       bool force_placement = (flags & DECO_FORCE_PLACEMENT);
+
+       schematic->blitToVManip(p, vm, rot, force_placement);
 
        return 1;
 }