Generic NodeMetadata text input
[oweals/minetest.git] / src / player.cpp
index 73291182813d3396081d98b98a8f5569e13de525..c8a3816e69913ddba82947ef0185d3d18ee4a867 100644 (file)
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <ITextSceneNode.h>
 #endif
 #include "settings.h"
+#include "mapnode_contentfeatures.h"
 
 Player::Player():
        touching_ground(false),
@@ -144,16 +145,12 @@ void Player::deSerialize(std::istream &is)
                args.parseConfigLine(line);
        }
 
-       //args.getS32("version");
+       //args.getS32("version"); // Version field value not used
        std::string name = args.get("name");
        updateName(name.c_str());
-       /*std::string password = "";
-       if(args.exists("password"))
-               password = args.get("password");
-       updatePassword(password.c_str());*/
-       m_pitch = args.getFloat("pitch");
-       m_yaw = args.getFloat("yaw");
-       m_position = args.getV3F("position");
+       setPitch(args.getFloat("pitch"));
+       setYaw(args.getFloat("yaw"));
+       setPosition(args.getV3F("position"));
        try{
                craftresult_is_preview = args.getBool("craftresult_is_preview");
        }catch(SettingNotFoundException &e){
@@ -164,24 +161,74 @@ void Player::deSerialize(std::istream &is)
        }catch(SettingNotFoundException &e){
                hp = 20;
        }
-       /*try{
-               std::string sprivs = args.get("privs");
-               if(sprivs == "all")
-               {
-                       privs = PRIV_ALL;
-               }
-               else
-               {
-                       std::istringstream ss(sprivs);
-                       ss>>privs;
-               }
-       }catch(SettingNotFoundException &e){
-               privs = PRIV_DEFAULT;
-       }*/
 
        inventory.deSerialize(is);
 }
 
+/*
+       ServerRemotePlayer
+*/
+
+/* ServerActiveObject interface */
+
+InventoryItem* ServerRemotePlayer::getWieldedItem()
+{
+       InventoryList *list = inventory.getList("main");
+       if (list)
+               return list->getItem(m_selected_item);
+       return NULL;
+}
+void ServerRemotePlayer::damageWieldedItem(u16 amount)
+{
+       infostream<<"Damaging "<<getName()<<"'s wielded item for amount="
+                       <<amount<<std::endl;
+       InventoryList *list = inventory.getList("main");
+       if(!list)
+               return;
+       InventoryItem *item = list->getItem(m_selected_item);
+       if(item && (std::string)item->getName() == "ToolItem"){
+               ToolItem *titem = (ToolItem*)item;
+               bool weared_out = titem->addWear(amount);
+               if(weared_out)
+                       list->deleteItem(m_selected_item);
+       }
+}
+bool ServerRemotePlayer::addToInventory(InventoryItem *item)
+{
+       infostream<<"Adding "<<item->getName()<<" into "<<getName()
+                       <<"'s inventory"<<std::endl;
+       
+       InventoryList *ilist = inventory.getList("main");
+       if(ilist == NULL)
+               return false;
+       
+       // In creative mode, just delete the item
+       if(g_settings->getBool("creative_mode")){
+               return false;
+       }
+
+       // Skip if inventory has no free space
+       if(ilist->roomForItem(item) == false)
+       {
+               infostream<<"Player inventory has no free space"<<std::endl;
+               return false;
+       }
+
+       // Add to inventory
+       InventoryItem *leftover = ilist->addItem(item);
+       assert(!leftover);
+
+       return true;
+}
+void ServerRemotePlayer::setHP(s16 hp_)
+{
+       hp = hp_;
+}
+s16 ServerRemotePlayer::getHP()
+{
+       return hp;
+}
+
 /*
        RemotePlayer
 */