summaryrefslogtreecommitdiff
path: root/src/craftdef.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-02-11 18:10:13 +0100
committerPerttu Ahola <celeron55@gmail.com>2012-06-06 00:22:34 +0300
commite070f1e5250b6853788cb827bb2f46ecdbe300a8 (patch)
tree134c70f4ea01c12db0b12b5352cec7b3f8b13300 /src/craftdef.cpp
parent430d6e1cca2c970aa6b78194526ce3c28cca8656 (diff)
downloadminetest-e070f1e5250b6853788cb827bb2f46ecdbe300a8.tar.gz
minetest-e070f1e5250b6853788cb827bb2f46ecdbe300a8.tar.bz2
minetest-e070f1e5250b6853788cb827bb2f46ecdbe300a8.zip
Allow replacements in cooking and fuel recipes
Diffstat (limited to 'src/craftdef.cpp')
-rw-r--r--src/craftdef.cpp68
1 files changed, 36 insertions, 32 deletions
diff --git a/src/craftdef.cpp b/src/craftdef.cpp
index e8f67442f..57a1851af 100644
--- a/src/craftdef.cpp
+++ b/src/craftdef.cpp
@@ -260,6 +260,7 @@ std::string CraftOutput::dump() const
/*
CraftReplacements
*/
+
std::string CraftReplacements::dump() const
{
std::ostringstream os(std::ios::binary);
@@ -276,6 +277,27 @@ std::string CraftReplacements::dump() const
return os.str();
}
+void CraftReplacements::serialize(std::ostream &os) const
+{
+ writeU16(os, pairs.size());
+ for(u32 i=0; i<pairs.size(); i++)
+ {
+ os<<serializeString(pairs[i].first);
+ os<<serializeString(pairs[i].second);
+ }
+}
+
+void CraftReplacements::deSerialize(std::istream &is)
+{
+ pairs.clear();
+ u32 count = readU16(is);
+ for(u32 i=0; i<count; i++)
+ {
+ std::string first = deSerializeString(is);
+ std::string second = deSerializeString(is);
+ pairs.push_back(std::make_pair(first, second));
+ }
+}
/*
CraftDefinition
@@ -418,12 +440,7 @@ void CraftDefinitionShaped::serializeBody(std::ostream &os) const
writeU16(os, recipe.size());
for(u32 i=0; i<recipe.size(); i++)
os<<serializeString(recipe[i]);
- writeU16(os, replacements.pairs.size());
- for(u32 i=0; i<replacements.pairs.size(); i++)
- {
- os<<serializeString(replacements.pairs[i].first);
- os<<serializeString(replacements.pairs[i].second);
- }
+ replacements.serialize(os);
}
void CraftDefinitionShaped::deSerializeBody(std::istream &is, int version)
@@ -436,14 +453,7 @@ void CraftDefinitionShaped::deSerializeBody(std::istream &is, int version)
u32 count = readU16(is);
for(u32 i=0; i<count; i++)
recipe.push_back(deSerializeString(is));
- replacements.pairs.clear();
- count = readU16(is);
- for(u32 i=0; i<count; i++)
- {
- std::string first = deSerializeString(is);
- std::string second = deSerializeString(is);
- replacements.pairs.push_back(std::make_pair(first, second));
- }
+ replacements.deSerialize(is);
}
/*
@@ -497,12 +507,7 @@ void CraftDefinitionShapeless::serializeBody(std::ostream &os) const
writeU16(os, recipe.size());
for(u32 i=0; i<recipe.size(); i++)
os<<serializeString(recipe[i]);
- writeU16(os, replacements.pairs.size());
- for(u32 i=0; i<replacements.pairs.size(); i++)
- {
- os<<serializeString(replacements.pairs[i].first);
- os<<serializeString(replacements.pairs[i].second);
- }
+ replacements.serialize(os);
}
void CraftDefinitionShapeless::deSerializeBody(std::istream &is, int version)
@@ -514,14 +519,7 @@ void CraftDefinitionShapeless::deSerializeBody(std::istream &is, int version)
u32 count = readU16(is);
for(u32 i=0; i<count; i++)
recipe.push_back(deSerializeString(is));
- replacements.pairs.clear();
- count = readU16(is);
- for(u32 i=0; i<count; i++)
- {
- std::string first = deSerializeString(is);
- std::string second = deSerializeString(is);
- replacements.pairs.push_back(std::make_pair(first, second));
- }
+ replacements.deSerialize(is);
}
/*
@@ -664,7 +662,7 @@ CraftOutput CraftDefinitionCooking::getOutput(const CraftInput &input, IGameDef
void CraftDefinitionCooking::decrementInput(CraftInput &input, IGameDef *gamedef) const
{
- craftDecrementInput(input, gamedef);
+ craftDecrementOrReplaceInput(input, replacements, gamedef);
}
std::string CraftDefinitionCooking::dump() const
@@ -672,7 +670,8 @@ std::string CraftDefinitionCooking::dump() const
std::ostringstream os(std::ios::binary);
os<<"(cooking, output=\""<<output
<<"\", recipe=\""<<recipe
- <<"\", cooktime="<<cooktime<<")";
+ <<"\", cooktime="<<cooktime<<")"
+ <<", replacements="<<replacements.dump()<<")";
return os.str();
}
@@ -681,6 +680,7 @@ void CraftDefinitionCooking::serializeBody(std::ostream &os) const
os<<serializeString(output);
os<<serializeString(recipe);
writeF1000(os, cooktime);
+ replacements.serialize(os);
}
void CraftDefinitionCooking::deSerializeBody(std::istream &is, int version)
@@ -690,6 +690,7 @@ void CraftDefinitionCooking::deSerializeBody(std::istream &is, int version)
output = deSerializeString(is);
recipe = deSerializeString(is);
cooktime = readF1000(is);
+ replacements.deSerialize(is);
}
/*
@@ -725,14 +726,15 @@ CraftOutput CraftDefinitionFuel::getOutput(const CraftInput &input, IGameDef *ga
void CraftDefinitionFuel::decrementInput(CraftInput &input, IGameDef *gamedef) const
{
- craftDecrementInput(input, gamedef);
+ craftDecrementOrReplaceInput(input, replacements, gamedef);
}
std::string CraftDefinitionFuel::dump() const
{
std::ostringstream os(std::ios::binary);
os<<"(fuel, recipe=\""<<recipe
- <<"\", burntime="<<burntime<<")";
+ <<"\", burntime="<<burntime<<")"
+ <<", replacements="<<replacements.dump()<<")";
return os.str();
}
@@ -740,6 +742,7 @@ void CraftDefinitionFuel::serializeBody(std::ostream &os) const
{
os<<serializeString(recipe);
writeF1000(os, burntime);
+ replacements.serialize(os);
}
void CraftDefinitionFuel::deSerializeBody(std::istream &is, int version)
@@ -748,6 +751,7 @@ void CraftDefinitionFuel::deSerializeBody(std::istream &is, int version)
"unsupported CraftDefinitionFuel version");
recipe = deSerializeString(is);
burntime = readF1000(is);
+ replacements.deSerialize(is);
}
/*