Fix items showing up as sticks when placed in world
authorPerttu Ahola <celeron55@gmail.com>
Sun, 16 Oct 2011 21:08:27 +0000 (00:08 +0300)
committerPerttu Ahola <celeron55@gmail.com>
Sun, 16 Oct 2011 21:08:27 +0000 (00:08 +0300)
src/content_cao.cpp

index d3a1813f161645e78a9c6d1bee7dc6a960a37110..b17c28109f356046e7c7a653a07f2ac0b7f986dd 100644 (file)
@@ -208,6 +208,35 @@ void ItemCAO::addToScene(scene::ISceneManager *smgr)
        // This is needed for changing the texture in the future
        m_node->setReadOnlyMaterials(true);
        updateNodePos();
+
+       /*
+               Update image of node
+       */
+
+       // Create an inventory item to see what is its image
+       std::istringstream is(m_inventorystring, std::ios_base::binary);
+       video::ITexture *texture = NULL;
+       try{
+               InventoryItem *item = NULL;
+               item = InventoryItem::deSerialize(is);
+               infostream<<__FUNCTION_NAME<<": m_inventorystring=\""
+                               <<m_inventorystring<<"\" -> item="<<item
+                               <<std::endl;
+               if(item)
+               {
+                       texture = item->getImage();
+                       delete item;
+               }
+       }
+       catch(SerializationError &e)
+       {
+               infostream<<"WARNING: "<<__FUNCTION_NAME
+                               <<": error deSerializing inventorystring \""
+                               <<m_inventorystring<<"\""<<std::endl;
+       }
+       
+       // Set meshbuffer texture
+       buf->getMaterial().setTexture(0, texture);
 }
 
 void ItemCAO::removeFromScene()
@@ -289,49 +318,6 @@ void ItemCAO::initialize(const std::string &data)
        }
        
        updateNodePos();
-
-       /*
-               Update image of node
-       */
-
-       if(m_node == NULL)
-               return;
-
-       scene::IMesh *mesh = m_node->getMesh();
-
-       if(mesh == NULL)
-               return;
-       
-       scene::IMeshBuffer *buf = mesh->getMeshBuffer(0);
-
-       if(buf == NULL)
-               return;
-
-       // Create an inventory item to see what is its image
-       std::istringstream is(m_inventorystring, std::ios_base::binary);
-       video::ITexture *texture = NULL;
-       try{
-               InventoryItem *item = NULL;
-               item = InventoryItem::deSerialize(is);
-               infostream<<__FUNCTION_NAME<<": m_inventorystring=\""
-                               <<m_inventorystring<<"\" -> item="<<item
-                               <<std::endl;
-               if(item)
-               {
-                       texture = item->getImage();
-                       delete item;
-               }
-       }
-       catch(SerializationError &e)
-       {
-               infostream<<"WARNING: "<<__FUNCTION_NAME
-                               <<": error deSerializing inventorystring \""
-                               <<m_inventorystring<<"\""<<std::endl;
-       }
-       
-       // Set meshbuffer texture
-       buf->getMaterial().setTexture(0, texture);
-       
 }
 
 /*