aboutsummaryrefslogtreecommitdiff
path: root/src/itemdef.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/itemdef.cpp')
-rw-r--r--src/itemdef.cpp62
1 files changed, 38 insertions, 24 deletions
diff --git a/src/itemdef.cpp b/src/itemdef.cpp
index 22ca9f088..98232c6d5 100644
--- a/src/itemdef.cpp
+++ b/src/itemdef.cpp
@@ -22,7 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "gamedef.h"
#include "nodedef.h"
-#include "materials.h"
+#include "tool.h"
#include "inventory.h"
#ifndef SERVER
#include "mapblock_mesh.h"
@@ -64,11 +64,12 @@ ItemDefinition& ItemDefinition::operator=(const ItemDefinition &def)
stack_max = def.stack_max;
usable = def.usable;
liquids_pointable = def.liquids_pointable;
- if(def.tool_digging_properties)
+ if(def.tool_capabilities)
{
- tool_digging_properties = new ToolDiggingProperties(
- *def.tool_digging_properties);
+ tool_capabilities = new ToolCapabilities(
+ *def.tool_capabilities);
}
+ groups = def.groups;
#ifndef SERVER
inventory_texture = def.inventory_texture;
if(def.wield_mesh)
@@ -88,7 +89,7 @@ ItemDefinition::~ItemDefinition()
void ItemDefinition::resetInitial()
{
// Initialize pointers to NULL so reset() does not delete undefined pointers
- tool_digging_properties = NULL;
+ tool_capabilities = NULL;
#ifndef SERVER
inventory_texture = NULL;
wield_mesh = NULL;
@@ -107,11 +108,12 @@ void ItemDefinition::reset()
stack_max = 99;
usable = false;
liquids_pointable = false;
- if(tool_digging_properties)
+ if(tool_capabilities)
{
- delete tool_digging_properties;
- tool_digging_properties = NULL;
+ delete tool_capabilities;
+ tool_capabilities = NULL;
}
+ groups.clear();
#ifndef SERVER
inventory_texture = NULL;
@@ -125,7 +127,7 @@ void ItemDefinition::reset()
void ItemDefinition::serialize(std::ostream &os) const
{
- writeU8(os, 0); // version
+ writeU8(os, 1); // version
writeU8(os, type);
os<<serializeString(name);
os<<serializeString(description);
@@ -135,14 +137,19 @@ void ItemDefinition::serialize(std::ostream &os) const
writeS16(os, stack_max);
writeU8(os, usable);
writeU8(os, liquids_pointable);
- std::string tool_digging_properties_s = "";
- if(tool_digging_properties)
- {
+ std::string tool_capabilities_s = "";
+ if(tool_capabilities){
std::ostringstream tmp_os(std::ios::binary);
- tool_digging_properties->serialize(tmp_os);
- tool_digging_properties_s = tmp_os.str();
+ tool_capabilities->serialize(tmp_os);
+ tool_capabilities_s = tmp_os.str();
+ }
+ os<<serializeString(tool_capabilities_s);
+ writeU16(os, groups.size());
+ for(std::map<std::string, int>::const_iterator
+ i = groups.begin(); i != groups.end(); i++){
+ os<<serializeString(i->first);
+ writeS16(os, i->second);
}
- os<<serializeString(tool_digging_properties_s);
}
void ItemDefinition::deSerialize(std::istream &is)
@@ -152,7 +159,7 @@ void ItemDefinition::deSerialize(std::istream &is)
// Deserialize
int version = readU8(is);
- if(version != 0)
+ if(version != 1)
throw SerializationError("unsupported ItemDefinition version");
type = (enum ItemType)readU8(is);
name = deSerializeString(is);
@@ -163,12 +170,19 @@ void ItemDefinition::deSerialize(std::istream &is)
stack_max = readS16(is);
usable = readU8(is);
liquids_pointable = readU8(is);
- std::string tool_digging_properties_s = deSerializeString(is);
- if(!tool_digging_properties_s.empty())
+ std::string tool_capabilities_s = deSerializeString(is);
+ if(!tool_capabilities_s.empty())
{
- std::istringstream tmp_is(tool_digging_properties_s, std::ios::binary);
- tool_digging_properties = new ToolDiggingProperties;
- tool_digging_properties->deSerialize(tmp_is);
+ std::istringstream tmp_is(tool_capabilities_s, std::ios::binary);
+ tool_capabilities = new ToolCapabilities;
+ tool_capabilities->deSerialize(tmp_is);
+ }
+ groups.clear();
+ u32 groups_size = readU16(is);
+ for(u32 i=0; i<groups_size; i++){
+ std::string name = deSerializeString(is);
+ int value = readS16(is);
+ groups[name] = value;
}
}
@@ -253,7 +267,7 @@ public:
ItemDefinition* hand_def = new ItemDefinition;
hand_def->name = "";
hand_def->wield_image = "wieldhand.png";
- hand_def->tool_digging_properties = new ToolDiggingProperties;
+ hand_def->tool_capabilities = new ToolCapabilities;
m_item_definitions.insert(std::make_pair("", hand_def));
ItemDefinition* unknown_def = new ItemDefinition;
@@ -273,9 +287,9 @@ public:
virtual void registerItem(const ItemDefinition &def)
{
infostream<<"ItemDefManager: registering \""<<def.name<<"\""<<std::endl;
- // Ensure that the "" item (the hand) always has ToolDiggingProperties
+ // Ensure that the "" item (the hand) always has ToolCapabilities
if(def.name == "")
- assert(def.tool_digging_properties != NULL);
+ assert(def.tool_capabilities != NULL);
m_item_definitions[def.name] = new ItemDefinition(def);