summaryrefslogtreecommitdiff
path: root/src/wieldmesh.cpp
diff options
context:
space:
mode:
authorKevin Ott <supercodingmonkey@gmail.com>2015-05-03 22:32:29 -0400
committerkwolekr <kwolekr@minetest.net>2015-05-04 02:11:36 -0400
commit5fa4fed09731fa869cfcee5c15e53d9fbdedc28b (patch)
tree69e9d1e8be714daa3710371caf392fc0b83a850d /src/wieldmesh.cpp
parent9af7f38e3f077ec42fcc3086c82d2676c53c84a6 (diff)
downloadminetest-5fa4fed09731fa869cfcee5c15e53d9fbdedc28b.tar.gz
minetest-5fa4fed09731fa869cfcee5c15e53d9fbdedc28b.tar.bz2
minetest-5fa4fed09731fa869cfcee5c15e53d9fbdedc28b.zip
Add a check for animation when getting an extruded mesh
Fixes issue #2667
Diffstat (limited to 'src/wieldmesh.cpp')
-rw-r--r--src/wieldmesh.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp
index b1d82b706..63c09786b 100644
--- a/src/wieldmesh.cpp
+++ b/src/wieldmesh.cpp
@@ -259,14 +259,20 @@ void WieldMeshSceneNode::setCube(const TileSpec tiles[6],
}
void WieldMeshSceneNode::setExtruded(const std::string &imagename,
- v3f wield_scale, ITextureSource *tsrc)
+ v3f wield_scale, ITextureSource *tsrc, u8 num_frames)
{
video::ITexture *texture = tsrc->getTexture(imagename);
if (!texture) {
changeToMesh(NULL);
return;
}
+
core::dimension2d<u32> dim = texture->getSize();
+ // Detect animation texture and pull off top frame instead of using entire thing
+ if (num_frames > 1) {
+ u32 frame_height = dim.Height / num_frames;
+ dim = core::dimension2d<u32>(dim.Width, frame_height);
+ }
scene::IMesh *mesh = g_extrusion_mesh_cache->create(dim);
changeToMesh(mesh);
mesh->drop();
@@ -319,7 +325,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
// If wield_image is defined, it overrides everything else
if (def.wield_image != "") {
- setExtruded(def.wield_image, def.wield_scale, tsrc);
+ setExtruded(def.wield_image, def.wield_scale, tsrc, 1);
return;
}
// Handle nodes
@@ -335,7 +341,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
} else if (f.drawtype == NDT_AIRLIKE) {
changeToMesh(NULL);
} else if (f.drawtype == NDT_PLANTLIKE) {
- setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc);
+ setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc, f.tiles[0].animation_frame_count);
} else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) {
setCube(f.tiles, def.wield_scale, tsrc);
} else {
@@ -385,7 +391,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
return;
}
else if (def.inventory_image != "") {
- setExtruded(def.inventory_image, def.wield_scale, tsrc);
+ setExtruded(def.inventory_image, def.wield_scale, tsrc, 1);
return;
}