Move cook result properly to ContentFeatures
authorPerttu Ahola <celeron55@gmail.com>
Tue, 15 Nov 2011 23:34:09 +0000 (01:34 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Tue, 29 Nov 2011 17:13:46 +0000 (19:13 +0200)
src/content_inventory.cpp
src/content_inventory.h
src/content_mapnode.cpp
src/inventory.cpp
src/nodedef.cpp
src/nodedef.h

index 349d47d5b12da2d7724cc03143ea593845862f36..2a05b76f00cfe7174e98ada99f6d05a800d9b770 100644 (file)
@@ -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)
index 0b384f15e5c2ad0719b5134188291b043b9796fc..40e8f545a0f5fd137156f677702ba52492bcabec 100644 (file)
@@ -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,
index c33d8c4a2e3da1a0cb5efebf4c7cca8436fc2c4b..30a70679a88c602c5d472fb860e20483f604470c 100644 (file)
@@ -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;
index 1929761a58213897a00fa4637f08df0784f4c6af..6d0a2a21440b4171f26e302558579b3fbe3de37c 100644 (file)
@@ -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);
 }
 
 /*
index 4e43369b414d071984ecb8ff2cb5f0f0e30101da..2e0c6fad67f71e6e9d7d8aa955355b00b76a530f 100644 (file)
@@ -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)
index e0b7da4804620470f93b5d4db528b1b8f66a8dd8..d63f8df9d04dc2be12d452333a8c0d6bfa06e9bc 100644 (file)
@@ -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