]> git.lizzy.rs Git - minetest.git/commitdiff
Add object visual type 'item' (#7870)
authorAlex <24834740+GreenXenith@users.noreply.github.com>
Tue, 11 Dec 2018 02:57:04 +0000 (18:57 -0800)
committerParamat <paramat@users.noreply.github.com>
Tue, 11 Dec 2018 02:57:04 +0000 (02:57 +0000)
doc/lua_api.txt
src/client/content_cao.cpp
src/client/wieldmesh.cpp
src/client/wieldmesh.h

index adde1112fc7fef0a20eb77a7a60a4ae59b35f7b3..dc87eee0efd2d0192f7d83449b2d48db5f9762f1 100644 (file)
@@ -5472,7 +5472,7 @@ Used by `ObjectRef` methods. Part of an Entity definition.
         pointable = true,
         -- Overrides selection box when false
 
-        visual = "cube" / "sprite" / "upright_sprite" / "mesh" / "wielditem",
+        visual = "cube" / "sprite" / "upright_sprite" / "mesh" / "wielditem" / "item",
         -- "cube" is a node-sized cube.
         -- "sprite" is a flat texture always facing the player.
         -- "upright_sprite" is a vertical flat texture.
@@ -5488,6 +5488,7 @@ Used by `ObjectRef` methods. Part of an Entity definition.
         --   of its texture.
         --   Otherwise for non-node items, the object will be an extrusion of
         --   'inventory_image'.
+        -- "item" is similar to "wielditem" but ignores the 'wield_image' parameter.
 
         visual_size = {x = 1, y = 1},
         -- `x` multiplies horizontal (X and Z) visual size.
index db59ae5c5a59db475716a953e5fe6ebd56a67211..e2517f7cabe3750b741ff9a75107d377f9f8c793 100644 (file)
@@ -662,7 +662,7 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
                }
                else
                        errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
-       } else if (m_prop.visual == "wielditem") {
+       } else if (m_prop.visual == "wielditem" || m_prop.visual == "item") {
                ItemStack item;
                infostream << "GenericCAO::addToScene(): wielditem" << std::endl;
                if (m_prop.wield_item.empty()) {
@@ -680,7 +680,8 @@ void GenericCAO::addToScene(ITextureSource *tsrc)
                }
                m_wield_meshnode = new WieldMeshSceneNode(
                        RenderingEngine::get_scene_manager(), -1);
-               m_wield_meshnode->setItem(item, m_client);
+               m_wield_meshnode->setItem(item, m_client,
+                       (m_prop.visual == "wielditem"));
 
                m_wield_meshnode->setScale(
                        v3f(m_prop.visual_size.X / 2, m_prop.visual_size.Y / 2,
index 7791a5a92e71482fd2eb1d8a6c3039ca75e58a49..4c25fafb1e94ceac449d3258ef11d27b5b38dda1 100644 (file)
@@ -333,7 +333,7 @@ scene::SMesh *createSpecialNodeMesh(Client *client, content_t id, std::vector<It
        return mesh;
 }
 
-void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client)
+void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool check_wield_image)
 {
        ITextureSource *tsrc = client->getTextureSource();
        IItemDefManager *idef = client->getItemDefManager();
@@ -354,8 +354,8 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client)
        m_colors.clear();
        m_base_color = idef->getItemstackColor(item, client);
 
-       // If wield_image is defined, it overrides everything else
-       if (!def.wield_image.empty()) {
+       // If wield_image needs to be checked and is defined, it overrides everything else
+       if (!def.wield_image.empty() && check_wield_image) {
                setExtruded(def.wield_image, def.wield_overlay, def.wield_scale, tsrc,
                        1);
                m_colors.emplace_back();
index 0908d3ac28f42edac8d57f26d0195ea9ea066132..7c80a811b885b0d3dd957bf669e74d06a4d1f7b2 100644 (file)
@@ -80,7 +80,8 @@ class WieldMeshSceneNode : public scene::ISceneNode
        void setCube(const ContentFeatures &f, v3f wield_scale);
        void setExtruded(const std::string &imagename, const std::string &overlay_image,
                        v3f wield_scale, ITextureSource *tsrc, u8 num_frames);
-       void setItem(const ItemStack &item, Client *client);
+       void setItem(const ItemStack &item, Client *client,
+                       bool check_wield_image = true);
 
        // Sets the vertex color of the wield mesh.
        // Must only be used if the constructor was called with lighting = false