X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fmg_decoration.h;h=986328ec3bc86be4a4ba741823d96bca45920057;hb=f151b2322003bbc89c2cd3c603ef1e1ab9d46439;hp=dffb524f39f95ea43b7caff7e96d5f256083f428;hpb=cf8213ea827f38ae5d4b8ef16c396545e3e59657;p=dragonfireclient.git diff --git a/src/mg_decoration.h b/src/mg_decoration.h index dffb524f3..986328ec3 100644 --- a/src/mg_decoration.h +++ b/src/mg_decoration.h @@ -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 -#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 c_place_on; s16 sidelen; + s16 y_min; + s16 y_max; float fill_ratio; NoiseParams np; + std::vector c_spawnby; + s16 nspawnby; - std::set biomes; + UNORDERED_SET biomes; //std::list 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 c_decos; - std::vector 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