diff --git a/src/content_cao.cpp b/src/content_cao.cpp index d87c905bc..627da056a 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -249,260 +249,6 @@ void TestCAO::processMessage(const std::string &data) } } -/* - ItemCAO -*/ - -class ItemCAO : public ClientActiveObject -{ -public: - ItemCAO(Client *client, ClientEnvironment *env); - virtual ~ItemCAO() = default; - - ActiveObjectType getType() const - { - return ACTIVEOBJECT_TYPE_ITEM; - } - - static ClientActiveObject* create(Client *client, ClientEnvironment *env); - - void addToScene(ITextureSource *tsrc); - void removeFromScene(bool permanent); - void updateLight(u8 light_at_pos); - v3s16 getLightPosition(); - void updateNodePos(); - void updateInfoText(); - void updateTexture(); - - void step(float dtime, ClientEnvironment *env); - - void processMessage(const std::string &data); - - void initialize(const std::string &data); - - - virtual bool getSelectionBox(aabb3f *toset) const - { - *toset = m_selection_box; - return true; - } - - - v3f getPosition() - {return m_position;} - inline float getYaw() const - {return 0;} - std::string infoText() - {return m_infotext;} - - bool getCollisionBox(aabb3f *toset) const { return false; } -private: - aabb3f m_selection_box; - scene::IMeshSceneNode *m_node; - v3f m_position; - std::string m_itemstring; - std::string m_infotext; -}; - -// Prototype -ItemCAO proto_ItemCAO(NULL, NULL); - -ItemCAO::ItemCAO(Client *client, ClientEnvironment *env): - ClientActiveObject(0, client, env), - m_selection_box(-BS/3.,0.0,-BS/3., BS/3.,BS*2./3.,BS/3.), - m_node(NULL), - m_position(v3f(0,10*BS,0)) -{ - if(!client && !env) - { - ClientActiveObject::registerType(getType(), create); - } -} - -ClientActiveObject* ItemCAO::create(Client *client, ClientEnvironment *env) -{ - return new ItemCAO(client, env); -} - -void ItemCAO::addToScene(ITextureSource *tsrc) -{ - if(m_node != NULL) - return; - - //video::IVideoDriver* driver = smgr->getVideoDriver(); - - scene::SMesh *mesh = new scene::SMesh(); - scene::IMeshBuffer *buf = new scene::SMeshBuffer(); - video::SColor c(255,255,255,255); - video::S3DVertex vertices[4] = - { - /*video::S3DVertex(-BS/2,-BS/4,0, 0,0,0, c, 0,1), - video::S3DVertex(BS/2,-BS/4,0, 0,0,0, c, 1,1), - video::S3DVertex(BS/2,BS/4,0, 0,0,0, c, 1,0), - video::S3DVertex(-BS/2,BS/4,0, 0,0,0, c, 0,0),*/ - video::S3DVertex(BS/3.,0,0, 0,0,0, c, 0,1), - video::S3DVertex(-BS/3.,0,0, 0,0,0, c, 1,1), - video::S3DVertex(-BS/3.,0+BS*2./3.,0, 0,0,0, c, 1,0), - video::S3DVertex(BS/3.,0+BS*2./3.,0, 0,0,0, c, 0,0), - }; - u16 indices[] = {0,1,2,2,3,0}; - buf->append(vertices, 4, indices, 6); - // Set material - buf->getMaterial().setFlag(video::EMF_LIGHTING, false); - buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false); - // Initialize with a generated placeholder texture - buf->getMaterial().setTexture(0, tsrc->getTexture("")); - buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false); - buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true); - buf->getMaterial().MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL; - // Add to mesh - mesh->addMeshBuffer(buf); - buf->drop(); - m_node = RenderingEngine::get_scene_manager()->addMeshSceneNode(mesh, NULL); - mesh->drop(); - updateNodePos(); - - /* - Update image of node - */ - - updateTexture(); -} - -void ItemCAO::removeFromScene(bool permanent) -{ - if (!m_node) - return; - - m_node->remove(); - m_node = nullptr; -} - -void ItemCAO::updateLight(u8 light_at_pos) -{ - if (!m_node) - return; - - u8 li = decode_light(light_at_pos); - video::SColor color(255,li,li,li); - setMeshColor(m_node->getMesh(), color); -} - -v3s16 ItemCAO::getLightPosition() -{ - return floatToInt(m_position + v3f(0,0.5*BS,0), BS); -} - -void ItemCAO::updateNodePos() -{ - if (!m_node) - return; - - m_node->setPosition(m_position); -} - -void ItemCAO::updateInfoText() -{ - try{ - IItemDefManager *idef = m_client->idef(); - ItemStack item; - item.deSerialize(m_itemstring, idef); - if(item.isKnown(idef)) - m_infotext = item.getDefinition(idef).description; - else - m_infotext = "Unknown item: '" + m_itemstring + "'"; - if(item.count >= 2) - m_infotext += " (" + itos(item.count) + ")"; - } - catch(SerializationError &e) - { - m_infotext = "Unknown item: '" + m_itemstring + "'"; - } -} - -void ItemCAO::updateTexture() -{ - if (!m_node) - return; - - // Create an inventory item to see what is its image - std::istringstream is(m_itemstring, std::ios_base::binary); - video::ITexture *texture = NULL; - try{ - IItemDefManager *idef = m_client->idef(); - ItemStack item; - item.deSerialize(is, idef); - texture = idef->getInventoryTexture(item.getDefinition(idef).name, m_client); - } - catch(SerializationError &e) - { - warningstream<getMaterial(0).setTexture(0, texture); -} - - -void ItemCAO::step(float dtime, ClientEnvironment *env) -{ - if(m_node) - { - /*v3f rot = m_node->getRotation(); - rot.Y += dtime * 120; - m_node->setRotation(rot);*/ - LocalPlayer *player = env->getLocalPlayer(); - assert(player); - v3f rot = m_node->getRotation(); - rot.Y = 180.0 - (player->getYaw()); - m_node->setRotation(rot); - } -} - -void ItemCAO::processMessage(const std::string &data) -{ - //infostream<<"ItemCAO: Got message"<