#ifndef MAPGEN_HEADER
#define MAPGEN_HEADER
+#include "noise.h"
#include "nodedef.h"
#include "mapnode.h"
#include "util/string.h"
#define MG_FLAT 0x08
#define MG_LIGHT 0x10
-#define NUM_GEN_NOTIFY 6
-
class Settings;
class ManualMapVoxelManipulator;
class INodeDefManager;
MGOBJ_GENNOTIFY
};
-enum GenNotify {
+enum GenNotifyType {
GENNOTIFY_DUNGEON,
GENNOTIFY_TEMPLE,
GENNOTIFY_CAVE_BEGIN,
GENNOTIFY_CAVE_END,
GENNOTIFY_LARGECAVE_BEGIN,
- GENNOTIFY_LARGECAVE_END
+ GENNOTIFY_LARGECAVE_END,
+ GENNOTIFY_DECORATION,
+ NUM_GENNOTIFY_TYPES
+};
+
+struct GenNotifyEvent {
+ GenNotifyType type;
+ v3s16 pos;
+ u32 id;
+};
+
+class GenerateNotifier {
+public:
+ GenerateNotifier();
+ GenerateNotifier(u32 notify_on, std::set<u32> *notify_on_deco_ids);
+
+ void setNotifyOn(u32 notify_on);
+ void setNotifyOnDecoIds(std::set<u32> *notify_on_deco_ids);
+
+ bool addEvent(GenNotifyType type, v3s16 pos, u32 id=0);
+ void getEvents(std::map<std::string, std::vector<v3s16> > &event_map,
+ bool peek_events=false);
+
+private:
+ u32 m_notify_on;
+ std::set<u32> *m_notify_on_deco_ids;
+ std::list<GenNotifyEvent> m_notify_events;
};
struct MapgenSpecificParams {
s16 water_level;
u32 flags;
+ NoiseParams np_biome_heat;
+ NoiseParams np_biome_humidity;
+
MapgenSpecificParams *sparams;
- MapgenParams() {
+ MapgenParams()
+ {
mg_name = DEFAULT_MAPGEN;
seed = 0;
water_level = 1;
chunksize = 5;
flags = MG_TREES | MG_CAVES | MG_LIGHT;
sparams = NULL;
+ np_biome_heat = NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 5349, 3, 0.5, 2.0);
+ np_biome_humidity = NoiseParams(50, 50, v3f(500.0, 500.0, 500.0), 842, 3, 0.5, 2.0);
}
};
public:
int seed;
int water_level;
+ u32 flags;
bool generating;
int id;
ManualMapVoxelManipulator *vm;
u8 *biomemap;
v3s16 csize;
- u32 gennotify;
- std::vector<v3s16> *gen_notifications[NUM_GEN_NOTIFY];
+ GenerateNotifier gennotify;
Mapgen();
+ Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge);
virtual ~Mapgen();
s16 findGroundLevelFull(v2s16 p2d);
class GenElement {
public:
- uint32_t id;
+ virtual ~GenElement() {}
+ u32 id;
std::string name;
};
static const char *ELEMENT_TITLE;
static const size_t ELEMENT_LIMIT = -1;
- GenElementManager() {}
+ GenElementManager(IGameDef *gamedef);
virtual ~GenElementManager();
virtual GenElement *create(int type) = 0;
virtual GenElement *get(u32 id);
virtual GenElement *update(u32 id, GenElement *elem);
virtual GenElement *remove(u32 id);
+ virtual void clear();
- virtual GenElement *getByName(const char *name);
- virtual GenElement *getByName(std::string &name);
+ virtual GenElement *getByName(const std::string &name);
protected:
+ INodeDefManager *m_ndef;
std::vector<GenElement *> m_elements;
};