#define MG_DECORATION_HEADER
#include <set>
-#include "mapgen.h"
+#include "objdef.h"
+#include "noise.h"
+#include "nodedef.h"
-struct NoiseParams;
class Mapgen;
class MMVManip;
-class PseudoRandom;
+class PcgRandom;
class Schematic;
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[];
};
#endif
-class Decoration : public GenElement, public NodeResolver {
+class Decoration : public ObjDef, public NodeResolver {
public:
- INodeDefManager *ndef;
+ Decoration();
+ virtual ~Decoration();
+
+ virtual void resolveNodeNames();
+
+ 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::set<u8> biomes;
//std::list<CutoffData> cutoffs;
- //JMutex cutoff_mutex;
-
- Decoration();
- virtual ~Decoration();
-
- virtual void resolveNodeNames(NodeResolveInfo *nri);
-
- 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, PseudoRandom *pr, s16 max_y, v3s16 p) = 0;
- virtual int getHeight() = 0;
+ //Mutex cutoff_mutex;
};
class DecoSimple : public Decoration {
public:
+ virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
+ bool canPlaceDecoration(MMVManip *vm, v3s16 p);
+ virtual int getHeight();
+
+ virtual void resolveNodeNames();
+
std::vector<content_t> c_decos;
std::vector<content_t> c_spawnby;
s16 deco_height;
s16 deco_height_max;
s16 nspawnby;
-
- virtual void resolveNodeNames(NodeResolveInfo *nri);
-
- bool canPlaceDecoration(MMVManip *vm, v3s16 p);
- virtual size_t generate(MMVManip *vm, PseudoRandom *pr, s16 max_y, v3s16 p);
- virtual int getHeight();
};
class DecoSchematic : public Decoration {
public:
- Rotation rotation;
- Schematic *schematic;
- std::string filename;
+ DecoSchematic();
- virtual size_t generate(MMVManip *vm, PseudoRandom *pr, s16 max_y, v3s16 p);
+ virtual size_t generate(MMVManip *vm, PcgRandom *pr, v3s16 p);
virtual int getHeight();
+
+ Rotation rotation;
+ Schematic *schematic;
};
};
*/
-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:
}
}
- void clear();
-
size_t placeAllDecos(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax);
};