summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-11-16 01:34:09 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-11-29 19:13:46 +0200
commit37a5f8a30bc2e267909d699faef4910a3a261555 (patch)
treef210efc6d415f2ffb16ed2747c4d7d77196244e8
parentf107967fdcfd66add9638b2932723e55c4f4ae2d (diff)
downloadminetest-37a5f8a30bc2e267909d699faef4910a3a261555.tar.gz
minetest-37a5f8a30bc2e267909d699faef4910a3a261555.tar.bz2
minetest-37a5f8a30bc2e267909d699faef4910a3a261555.zip
Move cook result properly to ContentFeatures
-rw-r--r--src/content_inventory.cpp25
-rw-r--r--src/content_inventory.h4
-rw-r--r--src/content_mapnode.cpp3
-rw-r--r--src/inventory.cpp9
-rw-r--r--src/nodedef.cpp5
-rw-r--r--src/nodedef.h2
6 files changed, 19 insertions, 29 deletions
diff --git a/src/content_inventory.cpp b/src/content_inventory.cpp
index 349d47d5b..2a05b76f0 100644
--- a/src/content_inventory.cpp
+++ b/src/content_inventory.cpp
@@ -22,29 +22,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "content_mapnode.h"
//#include "serverobject.h"
#include "content_sao.h"
-
-bool item_material_is_cookable(content_t content, IGameDef *gamedef)
-{
- if(content == CONTENT_TREE)
- return true;
- else if(content == CONTENT_COBBLE)
- return true;
- else if(content == CONTENT_SAND)
- return true;
- return false;
-}
-
-InventoryItem* item_material_create_cook_result(content_t content,
- IGameDef *gamedef)
-{
- if(content == CONTENT_TREE)
- return new CraftItem(gamedef, "lump_of_coal", 1);
- else if(content == CONTENT_COBBLE)
- return new MaterialItem(gamedef, CONTENT_STONE, 1);
- else if(content == CONTENT_SAND)
- return new MaterialItem(gamedef, CONTENT_GLASS, 1);
- return NULL;
-}
+//#include "gamedef.h"
+//#include "nodedef.h"
std::string item_craft_get_image_name(const std::string &subname,
IGameDef *gamedef)
diff --git a/src/content_inventory.h b/src/content_inventory.h
index 0b384f15e..40e8f545a 100644
--- a/src/content_inventory.h
+++ b/src/content_inventory.h
@@ -29,10 +29,6 @@ class ServerActiveObject;
class ServerEnvironment;
class IGameDef;
-bool item_material_is_cookable(content_t content, IGameDef *gamedef);
-InventoryItem* item_material_create_cook_result(content_t content,
- IGameDef *gamedef);
-
std::string item_craft_get_image_name(const std::string &subname,
IGameDef *gamedef);
ServerActiveObject* item_craft_create_object(const std::string &subname,
diff --git a/src/content_mapnode.cpp b/src/content_mapnode.cpp
index c33d8c4a2..30a70679a 100644
--- a/src/content_mapnode.cpp
+++ b/src/content_mapnode.cpp
@@ -206,6 +206,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = std::string("MaterialItem2 ")+itos(CONTENT_GLASS)+" 1";
setDirtLikeMaterialProperties(f->material, 1.0);
i = CONTENT_GRAVEL;
@@ -252,6 +253,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->param_type = CPT_MINERAL;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = "CraftItem lump_of_coal 1";
setWoodLikeMaterialProperties(f->material, 1.0);
i = CONTENT_JUNGLETREE;
@@ -596,6 +598,7 @@ void content_mapnode_init(IWritableNodeDefManager *nodemgr)
f->param_type = CPT_NONE;
f->is_ground_content = true;
f->dug_item = std::string("MaterialItem2 ")+itos(i)+" 1";
+ f->cookresult_item = std::string("MaterialItem2 ")+itos(CONTENT_STONE)+" 1";
setStoneLikeMaterialProperties(f->material, 0.9);
i = CONTENT_MOSSYCOBBLE;
diff --git a/src/inventory.cpp b/src/inventory.cpp
index 1929761a5..6d0a2a214 100644
--- a/src/inventory.cpp
+++ b/src/inventory.cpp
@@ -158,12 +158,17 @@ video::ITexture * MaterialItem::getImage(ITextureSource *tsrc) const
bool MaterialItem::isCookable() const
{
- return item_material_is_cookable(m_content, m_gamedef);
+ INodeDefManager *ndef = m_gamedef->ndef();
+ const ContentFeatures &f = ndef->get(m_content);
+ return (f.cookresult_item != "");
}
InventoryItem *MaterialItem::createCookResult() const
{
- return item_material_create_cook_result(m_content, m_gamedef);
+ INodeDefManager *ndef = m_gamedef->ndef();
+ const ContentFeatures &f = ndef->get(m_content);
+ std::istringstream is(f.cookresult_item, std::ios::binary);
+ return InventoryItem::deSerialize(is, m_gamedef);
}
/*
diff --git a/src/nodedef.cpp b/src/nodedef.cpp
index 4e43369b4..2e0c6fad6 100644
--- a/src/nodedef.cpp
+++ b/src/nodedef.cpp
@@ -140,6 +140,8 @@ void ContentFeatures::reset()
air_equivalent = false;
often_contains_mineral = false;
dug_item = "";
+ extra_dug_item = "";
+ extra_dug_item_rarity = 2;
initial_metadata = NULL;
liquid_type = LIQUID_NONE;
liquid_alternative_flowing = CONTENT_IGNORE;
@@ -149,6 +151,7 @@ void ContentFeatures::reset()
damage_per_second = 0;
selection_box = NodeBox();
material = MaterialProperties();
+ cookresult_item = "";
}
void ContentFeatures::serialize(std::ostream &os)
@@ -198,6 +201,7 @@ void ContentFeatures::serialize(std::ostream &os)
writeU32(os, damage_per_second);
selection_box.serialize(os);
material.serialize(os);
+ os<<serializeString(cookresult_item);
}
void ContentFeatures::deSerialize(std::istream &is, IGameDef *gamedef)
@@ -250,6 +254,7 @@ void ContentFeatures::deSerialize(std::istream &is, IGameDef *gamedef)
damage_per_second = readU32(is);
selection_box.deSerialize(is);
material.deSerialize(is);
+ cookresult_item = deSerializeString(is);
}
void ContentFeatures::setTexture(u16 i, std::string name)
diff --git a/src/nodedef.h b/src/nodedef.h
index e0b7da480..d63f8df9d 100644
--- a/src/nodedef.h
+++ b/src/nodedef.h
@@ -209,6 +209,7 @@ struct ContentFeatures
std::string dug_item;
// Extra dug item and its rarity
std::string extra_dug_item;
+ // Usual get interval for extra dug item
s32 extra_dug_item_rarity;
// Initial metadata is cloned from this
NodeMetadata *initial_metadata;
@@ -227,6 +228,7 @@ struct ContentFeatures
u32 damage_per_second;
NodeBox selection_box;
MaterialProperties material;
+ std::string cookresult_item;
/*
Methods