]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/mg_decoration.h
Fix #5617 - respect message and reconnect parameters when shutting down immediately...
[dragonfireclient.git] / src / mg_decoration.h
index dffb524f39f95ea43b7caff7e96d5f256083f428..986328ec3bc86be4a4ba741823d96bca45920057 100644 (file)
@@ -20,13 +20,14 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #ifndef MG_DECORATION_HEADER
 #define MG_DECORATION_HEADER
 
-#include <set>
-#include "mapgen.h"
+#include "util/cpp11_container.h"
+#include "objdef.h"
+#include "noise.h"
+#include "nodedef.h"
 
-struct NoiseParams;
 class Mapgen;
-class ManualMapVoxelManipulator;
-class PseudoRandom;
+class MMVManip;
+class PcgRandom;
 class Schematic;
 
 enum DecorationType {
@@ -35,10 +36,12 @@ enum DecorationType {
        DECO_LSYSTEM
 };
 
-#define DECO_PLACE_CENTER_X 0x01
-#define DECO_PLACE_CENTER_Y 0x02
-#define DECO_PLACE_CENTER_Z 0x04
-#define DECO_USE_NOISE      0x08
+#define DECO_PLACE_CENTER_X  0x01
+#define DECO_PLACE_CENTER_Y  0x02
+#define DECO_PLACE_CENTER_Z  0x04
+#define DECO_USE_NOISE       0x08
+#define DECO_FORCE_PLACEMENT 0x10
+#define DECO_LIQUID_SURFACE  0x20
 
 extern FlagDesc flagdesc_deco[];
 
@@ -58,58 +61,57 @@ struct CutoffData {
 };
 #endif
 
-class Decoration : public GenElement {
+class Decoration : public ObjDef, public NodeResolver {
 public:
-       INodeDefManager *ndef;
+       Decoration();
+       virtual ~Decoration();
+
+       virtual void resolveNodeNames();
+
+       bool canPlaceDecoration(MMVManip *vm, v3s16 p);
+       size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+       //size_t placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
+
+       virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p) = 0;
+       virtual int getHeight() = 0;
 
        u32 flags;
        int mapseed;
        std::vector<content_t> c_place_on;
        s16 sidelen;
+       s16 y_min;
+       s16 y_max;
        float fill_ratio;
        NoiseParams np;
+       std::vector<content_t> c_spawnby;
+       s16 nspawnby;
 
-       std::set<u8> biomes;
+       UNORDERED_SET<u8> biomes;
        //std::list<CutoffData> cutoffs;
-       //JMutex cutoff_mutex;
-
-       Decoration();
-       virtual ~Decoration();
-
-       size_t placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
-       size_t placeCutoffs(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
-
-       virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p) = 0;
-       virtual int getHeight() = 0;
-       virtual void dropResolverEntries(NodeResolver *resolver) {}
+       //Mutex cutoff_mutex;
 };
 
 class DecoSimple : public Decoration {
 public:
+       virtual void resolveNodeNames();
+       virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
+       virtual int getHeight();
+
        std::vector<content_t> c_decos;
-       std::vector<content_t> c_spawnby;
        s16 deco_height;
        s16 deco_height_max;
-       s16 nspawnby;
-
-       ~DecoSimple() {}
-
-       bool canPlaceDecoration(ManualMapVoxelManipulator *vm, v3s16 p);
-       virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p);
-       virtual int getHeight();
-       virtual void dropResolverEntries(NodeResolver *resolver);
+       u8 deco_param2;
 };
 
 class DecoSchematic : public Decoration {
 public:
-       Rotation rotation;
-       Schematic *schematic;
-       std::string filename;
-
-       ~DecoSchematic() {}
+       DecoSchematic();
 
-       virtual size_t generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p);
+       virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
        virtual int getHeight();
+
+       Rotation rotation;
+       Schematic *schematic;
 };
 
 
@@ -120,15 +122,17 @@ class DecoLSystem : public Decoration {
 };
 */
 
-class DecorationManager : public GenElementManager {
+class DecorationManager : public ObjDefManager {
 public:
-       static const char *ELEMENT_TITLE;
-       static const size_t ELEMENT_LIMIT = 0x10000;
-
        DecorationManager(IGameDef *gamedef);
-       ~DecorationManager() {}
+       virtual ~DecorationManager() {}
 
-       Decoration *create(int type)
+       const char *getObjectTitle() const
+       {
+               return "decoration";
+       }
+
+       static Decoration *create(DecorationType type)
        {
                switch (type) {
                case DECO_SIMPLE:
@@ -142,9 +146,7 @@ class DecorationManager : public GenElementManager {
                }
        }
 
-       void clear();
-
-       size_t placeAllDecos(Mapgen *mg, u32 seed, v3s16 nmin, v3s16 nmax);
+       size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
 };
 
 #endif