diff options
author | Alex <24834740+GreenXenith@users.noreply.github.com> | 2018-12-10 18:57:04 -0800 |
---|---|---|
committer | Paramat <paramat@users.noreply.github.com> | 2018-12-11 02:57:04 +0000 |
commit | a833bee9edaeb6df69d1e510759a7b33915a41e0 (patch) | |
tree | e316ad0094a27816d89af10fce16ccf125cc90a1 | |
parent | 98fa8a154d8136ad19d723fd89164c9d833da52b (diff) | |
download | minetest-a833bee9edaeb6df69d1e510759a7b33915a41e0.tar.gz minetest-a833bee9edaeb6df69d1e510759a7b33915a41e0.tar.bz2 minetest-a833bee9edaeb6df69d1e510759a7b33915a41e0.zip |
Add object visual type 'item' (#7870)
-rw-r--r-- | doc/lua_api.txt | 3 | ||||
-rw-r--r-- | src/client/content_cao.cpp | 5 | ||||
-rw-r--r-- | src/client/wieldmesh.cpp | 6 | ||||
-rw-r--r-- | src/client/wieldmesh.h | 3 |
4 files changed, 10 insertions, 7 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt index adde1112f..dc87eee0e 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -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. diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp index db59ae5c5..e2517f7ca 100644 --- a/src/client/content_cao.cpp +++ b/src/client/content_cao.cpp @@ -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, diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp index 7791a5a92..4c25fafb1 100644 --- a/src/client/wieldmesh.cpp +++ b/src/client/wieldmesh.cpp @@ -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(); diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h index 0908d3ac2..7c80a811b 100644 --- a/src/client/wieldmesh.h +++ b/src/client/wieldmesh.h @@ -80,7 +80,8 @@ public: 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 |