Skip to content

Commit 5fa4fed

Browse files
Etzoskwolekr
authored andcommittedMay 4, 2015
Add a check for animation when getting an extruded mesh
Fixes issue #2667
1 parent 9af7f38 commit 5fa4fed

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed
 

‎src/wieldmesh.cpp

+10-4
Original file line numberDiff line numberDiff line change
@@ -259,14 +259,20 @@ void WieldMeshSceneNode::setCube(const TileSpec tiles[6],
259259
}
260260

261261
void WieldMeshSceneNode::setExtruded(const std::string &imagename,
262-
v3f wield_scale, ITextureSource *tsrc)
262+
v3f wield_scale, ITextureSource *tsrc, u8 num_frames)
263263
{
264264
video::ITexture *texture = tsrc->getTexture(imagename);
265265
if (!texture) {
266266
changeToMesh(NULL);
267267
return;
268268
}
269+
269270
core::dimension2d<u32> dim = texture->getSize();
271+
// Detect animation texture and pull off top frame instead of using entire thing
272+
if (num_frames > 1) {
273+
u32 frame_height = dim.Height / num_frames;
274+
dim = core::dimension2d<u32>(dim.Width, frame_height);
275+
}
270276
scene::IMesh *mesh = g_extrusion_mesh_cache->create(dim);
271277
changeToMesh(mesh);
272278
mesh->drop();
@@ -319,7 +325,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
319325

320326
// If wield_image is defined, it overrides everything else
321327
if (def.wield_image != "") {
322-
setExtruded(def.wield_image, def.wield_scale, tsrc);
328+
setExtruded(def.wield_image, def.wield_scale, tsrc, 1);
323329
return;
324330
}
325331
// Handle nodes
@@ -335,7 +341,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
335341
} else if (f.drawtype == NDT_AIRLIKE) {
336342
changeToMesh(NULL);
337343
} else if (f.drawtype == NDT_PLANTLIKE) {
338-
setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc);
344+
setExtruded(tsrc->getTextureName(f.tiles[0].texture_id), def.wield_scale, tsrc, f.tiles[0].animation_frame_count);
339345
} else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) {
340346
setCube(f.tiles, def.wield_scale, tsrc);
341347
} else {
@@ -385,7 +391,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
385391
return;
386392
}
387393
else if (def.inventory_image != "") {
388-
setExtruded(def.inventory_image, def.wield_scale, tsrc);
394+
setExtruded(def.inventory_image, def.wield_scale, tsrc, 1);
389395
return;
390396
}
391397

‎src/wieldmesh.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class WieldMeshSceneNode: public scene::ISceneNode
4141
void setCube(const TileSpec tiles[6],
4242
v3f wield_scale, ITextureSource *tsrc);
4343
void setExtruded(const std::string &imagename,
44-
v3f wield_scale, ITextureSource *tsrc);
44+
v3f wield_scale, ITextureSource *tsrc, u8 num_frames);
4545
void setItem(const ItemStack &item, IGameDef *gamedef);
4646

4747
// Sets the vertex color of the wield mesh.

0 commit comments

Comments
 (0)
Please sign in to comment.