}
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();
// 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
} 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 {
return;
}
else if (def.inventory_image != "") {
- setExtruded(def.inventory_image, def.wield_scale, tsrc);
+ setExtruded(def.inventory_image, def.wield_scale, tsrc, 1);
return;
}
void setCube(const TileSpec tiles[6],
v3f wield_scale, ITextureSource *tsrc);
void setExtruded(const std::string &imagename,
- v3f wield_scale, ITextureSource *tsrc);
+ v3f wield_scale, ITextureSource *tsrc, u8 num_frames);
void setItem(const ItemStack &item, IGameDef *gamedef);
// Sets the vertex color of the wield mesh.