From a833bee9edaeb6df69d1e510759a7b33915a41e0 Mon Sep 17 00:00:00 2001 From: Alex <24834740+GreenXenith@users.noreply.github.com> Date: Mon, 10 Dec 2018 18:57:04 -0800 Subject: [PATCH] Add object visual type 'item' (#7870) --- doc/lua_api.txt | 3 ++- src/client/content_cao.cpp | 5 +++-- src/client/wieldmesh.cpp | 6 +++--- 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 "<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::vectorgetTextureSource(); 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