@@ -259,14 +259,20 @@ void WieldMeshSceneNode::setCube(const TileSpec tiles[6],
259
259
}
260
260
261
261
void WieldMeshSceneNode::setExtruded (const std::string &imagename,
262
- v3f wield_scale, ITextureSource *tsrc)
262
+ v3f wield_scale, ITextureSource *tsrc, u8 num_frames )
263
263
{
264
264
video::ITexture *texture = tsrc->getTexture (imagename);
265
265
if (!texture) {
266
266
changeToMesh (NULL );
267
267
return ;
268
268
}
269
+
269
270
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
+ }
270
276
scene::IMesh *mesh = g_extrusion_mesh_cache->create (dim);
271
277
changeToMesh (mesh);
272
278
mesh->drop ();
@@ -319,7 +325,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
319
325
320
326
// If wield_image is defined, it overrides everything else
321
327
if (def.wield_image != " " ) {
322
- setExtruded (def.wield_image , def.wield_scale , tsrc);
328
+ setExtruded (def.wield_image , def.wield_scale , tsrc, 1 );
323
329
return ;
324
330
}
325
331
// Handle nodes
@@ -335,7 +341,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
335
341
} else if (f.drawtype == NDT_AIRLIKE) {
336
342
changeToMesh (NULL );
337
343
} 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 );
339
345
} else if (f.drawtype == NDT_NORMAL || f.drawtype == NDT_ALLFACES) {
340
346
setCube (f.tiles , def.wield_scale , tsrc);
341
347
} else {
@@ -385,7 +391,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef)
385
391
return ;
386
392
}
387
393
else if (def.inventory_image != " " ) {
388
- setExtruded (def.inventory_image , def.wield_scale , tsrc);
394
+ setExtruded (def.inventory_image , def.wield_scale , tsrc, 1 );
389
395
return ;
390
396
}
391
397
0 commit comments