summaryrefslogtreecommitdiff
path: root/src/mg_schematic.h
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2014-11-12 23:01:13 -0500
committerkwolekr <kwolekr@minetest.net>2014-11-12 23:02:41 -0500
commit7616537bc071bc93f8d36c84b94603528be1efb0 (patch)
tree487185069e4f39f1f828a831b1d1ba9c88ed4298 /src/mg_schematic.h
parentf25cc0dbae0209f2647ac5eec9fe6ddb08174f55 (diff)
downloadminetest-7616537bc071bc93f8d36c84b94603528be1efb0.tar.gz
minetest-7616537bc071bc93f8d36c84b94603528be1efb0.tar.bz2
minetest-7616537bc071bc93f8d36c84b94603528be1efb0.zip
Add Generator Element Management framework
Add BiomeManager, OreManager, DecorationManager, and SchematicManager
Diffstat (limited to 'src/mg_schematic.h')
-rw-r--r--src/mg_schematic.h47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/mg_schematic.h b/src/mg_schematic.h
index 8a495fef2..9d4d4a716 100644
--- a/src/mg_schematic.h
+++ b/src/mg_schematic.h
@@ -30,11 +30,8 @@ class ManualMapVoxelManipulator;
class PseudoRandom;
class NodeResolver;
-/////////////////// Decoration flags
-#define DECO_PLACE_CENTER_X 1
-#define DECO_PLACE_CENTER_Y 2
-#define DECO_PLACE_CENTER_Z 4
-#define DECO_SCHEM_CIDS_UPDATED 8
+/////////////////// Schematic flags
+#define SCHEM_CIDS_UPDATED 0x08
#define MTSCHEM_FILE_SIGNATURE 0x4d54534d // 'MTSM'
@@ -44,42 +41,50 @@ class NodeResolver;
#define MTSCHEM_PROB_NEVER 0x00
#define MTSCHEM_PROB_ALWAYS 0xFF
-extern FlagDesc flagdesc_deco_schematic[];
-class DecoSchematic : public Decoration {
+class Schematic : public GenElement {
public:
- std::string filename;
-
std::vector<content_t> c_nodes;
u32 flags;
- Rotation rotation;
v3s16 size;
- MapNode *schematic;
+ MapNode *schemdata;
u8 *slice_probs;
- DecoSchematic();
- ~DecoSchematic();
+ Schematic();
+ ~Schematic();
void updateContentIds();
- virtual void generate(Mapgen *mg, PseudoRandom *pr, s16 max_y, v3s16 p);
- virtual int getHeight();
- virtual std::string getName();
void blitToVManip(v3s16 p, ManualMapVoxelManipulator *vm,
- Rotation rot, bool force_placement);
+ Rotation rot, bool force_placement, INodeDefManager *ndef);
- bool loadSchematicFile(NodeResolver *resolver,
+ bool loadSchematicFromFile(const char *filename, NodeResolver *resolver,
std::map<std::string, std::string> &replace_names);
- void saveSchematicFile(INodeDefManager *ndef);
-
+ void saveSchematicToFile(const char *filename, INodeDefManager *ndef);
bool getSchematicFromMap(Map *map, v3s16 p1, v3s16 p2);
- void placeStructure(Map *map, v3s16 p, bool force_placement);
+
+ void placeStructure(Map *map, v3s16 p, u32 flags,
+ Rotation rot, bool force_placement, INodeDefManager *nef);
void applyProbabilities(v3s16 p0,
std::vector<std::pair<v3s16, u8> > *plist,
std::vector<std::pair<s16, u8> > *splist);
};
+class SchematicManager : public GenElementManager {
+public:
+ static const char *ELEMENT_TITLE;
+ static const size_t ELEMENT_LIMIT = 0x10000;
+
+ SchematicManager(IGameDef *gamedef) {}
+ ~SchematicManager() {}
+
+ Schematic *create(int type)
+ {
+ return new Schematic;
+ }
+};
+
void build_nnlist_and_update_ids(MapNode *nodes, u32 nodecount,
std::vector<content_t> *usednodes);