summaryrefslogtreecommitdiff
path: root/src/mg_schematic.cpp
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2014-12-17 03:20:17 -0500
committerkwolekr <kwolekr@minetest.net>2014-12-27 02:12:21 -0500
commitb67f37f27ea7d89b2098fa9fcc2533fa1091e695 (patch)
treeb97d7c98fc29677dfc57fa8f8af4332ff9d0c87c /src/mg_schematic.cpp
parent3ea5ed4ffe600fa11a3deb3de58d5bd5bbb65ee1 (diff)
downloadminetest-b67f37f27ea7d89b2098fa9fcc2533fa1091e695.tar.gz
minetest-b67f37f27ea7d89b2098fa9fcc2533fa1091e695.tar.bz2
minetest-b67f37f27ea7d89b2098fa9fcc2533fa1091e695.zip
Redefine NodeResolver interface and replace with callback mechanism
Diffstat (limited to 'src/mg_schematic.cpp')
-rw-r--r--src/mg_schematic.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/mg_schematic.cpp b/src/mg_schematic.cpp
index a78824647..299a328c9 100644
--- a/src/mg_schematic.cpp
+++ b/src/mg_schematic.cpp
@@ -58,6 +58,12 @@ Schematic::~Schematic()
}
+void Schematic::resolveNodeNames(NodeResolveInfo *nri)
+{
+ m_ndef->getIdsFromResolveInfo(nri, c_nodes);
+}
+
+
void Schematic::updateContentIds()
{
if (flags & SCHEM_CIDS_UPDATED)
@@ -195,8 +201,7 @@ void Schematic::placeStructure(Map *map, v3s16 p, u32 flags,
bool Schematic::loadSchematicFromFile(const char *filename,
- NodeResolver *resolver,
- std::map<std::string, std::string> &replace_names)
+ INodeDefManager *ndef, std::map<std::string, std::string> &replace_names)
{
content_t cignore = CONTENT_IGNORE;
bool have_cignore = false;
@@ -224,10 +229,9 @@ bool Schematic::loadSchematicFromFile(const char *filename,
for (int y = 0; y != size.Y; y++)
slice_probs[y] = (version >= 3) ? readU8(is) : MTSCHEM_PROB_ALWAYS;
- int nodecount = size.X * size.Y * size.Z;
+ NodeResolveInfo *nri = new NodeResolveInfo(this);
u16 nidmapcount = readU16(is);
-
for (int i = 0; i != nidmapcount; i++) {
std::string name = deSerializeString(is);
if (name == "ignore") {
@@ -241,16 +245,22 @@ bool Schematic::loadSchematicFromFile(const char *filename,
if (it != replace_names.end())
name = it->second;
- resolver->addNodeList(name.c_str(), &c_nodes);
+ nri->nodenames.push_back(name);
}
+ nri->nodename_sizes.push_back(nidmapcount);
+ ndef->pendNodeResolve(nri);
+
+ size_t nodecount = size.X * size.Y * size.Z;
+
delete []schemdata;
schemdata = new MapNode[nodecount];
+
MapNode::deSerializeBulk(is, SER_FMT_VER_HIGHEST_READ, schemdata,
- nodecount, 2, 2, true);
+ nodecount, 2, 2, true);
if (version == 1) { // fix up the probability values
- for (int i = 0; i != nodecount; i++) {
+ for (size_t i = 0; i != nodecount; i++) {
if (schemdata[i].param1 == 0)
schemdata[i].param1 = MTSCHEM_PROB_ALWAYS;
if (have_cignore && schemdata[i].getContent() == cignore)