Move tool stuff to tool.{h,cpp}
[oweals/minetest.git] / src / inventory.cpp
index 5d4a6e4089e09f967025e637c36ae5dcfe18960d..ea5b696366ee1daac9bdb0bfedefdec2d8bdcb56 100644 (file)
@@ -33,6 +33,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "content_sao.h"
 #include "player.h"
 #include "log.h"
+#include "mapnode_contentfeatures.h"
+#include "tool.h"
 
 /*
        InventoryItem
@@ -135,6 +137,10 @@ ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f
        /*
                Create an ItemSAO
        */
+       pos.Y -= BS*0.25; // let it drop a bit
+       // Randomize a bit
+       pos.X += BS*0.2*(float)myrand_range(-1000,1000)/1000.0;
+       pos.Z += BS*0.2*(float)myrand_range(-1000,1000)/1000.0;
        // Create object
        ServerActiveObject *obj = new ItemSAO(env, pos, getItemString());
        return obj;
@@ -144,6 +150,13 @@ ServerActiveObject* InventoryItem::createSAO(ServerEnvironment *env, u16 id, v3f
        MaterialItem
 */
 
+#ifndef SERVER
+video::ITexture * MaterialItem::getImage() const
+{
+       return content_features(m_content).inventory_texture;
+}
+#endif
+
 bool MaterialItem::isCookable() const
 {
        return item_material_is_cookable(m_content);
@@ -154,6 +167,15 @@ InventoryItem *MaterialItem::createCookResult() const
        return item_material_create_cook_result(m_content);
 }
 
+/*
+       ToolItem
+*/
+
+std::string ToolItem::getImageBasename() const
+{
+       return tool_get_imagename(m_toolname);
+}
+
 /*
        CraftItem
 */
@@ -201,22 +223,23 @@ InventoryItem *CraftItem::createCookResult() const
        return item_craft_create_cook_result(m_subname);
 }
 
-bool CraftItem::use(ServerEnvironment *env, Player *player)
+bool CraftItem::use(ServerEnvironment *env, ServerActiveObject *user)
 {
-       if(item_craft_is_eatable(m_subname))
-       {
-               u16 result_count = getCount() - 1; // Eat one at a time
-               s16 hp_change = item_craft_eat_hp_change(m_subname);
-               if(player->hp + hp_change > 20)
-                       player->hp = 20;
-               else
-                       player->hp += hp_change;
+       if(!item_craft_is_eatable(m_subname))
+               return false;
+       
+       u16 result_count = getCount() - 1; // Eat one at a time
+       s16 hp_change = item_craft_eat_hp_change(m_subname);
+       s16 hp = user->getHP();
+       hp += hp_change;
+       if(hp < 0)
+               hp = 0;
+       user->setHP(hp);
+       
+       if(result_count < 1)
+               return true;
                
-               if(result_count < 1)
-                       return true;
-               else
-                       setCount(result_count);
-       }
+       setCount(result_count);
        return false;
 }