diff --git a/src/mapblock_mesh.cpp b/src/mapblock_mesh.cpp index 29b0e92f5..f4a44a256 100644 --- a/src/mapblock_mesh.cpp +++ b/src/mapblock_mesh.cpp @@ -1136,7 +1136,7 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset): m_animation_frame_offsets[i] = 0; } // Replace tile texture with the first animation frame - FrameSpec animation_frame = p.tile.frames.find(0)->second; + FrameSpec animation_frame = p.tile.frames[0]; p.tile.texture = animation_frame.texture; } @@ -1322,7 +1322,7 @@ bool MapBlockMesh::animate(bool faraway, float time, int crack, u32 daynight_rat scene::IMeshBuffer *buf = m_mesh->getMeshBuffer(i->first); ITextureSource *tsrc = m_gamedef->getTextureSource(); - FrameSpec animation_frame = tile.frames.find(frame)->second; + FrameSpec animation_frame = tile.frames[frame]; buf->getMaterial().setTexture(0, animation_frame.texture); if (m_enable_shaders) { if (animation_frame.normal_texture) { diff --git a/src/nodedef.cpp b/src/nodedef.cpp index b046957e6..e7bf9091f 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -934,7 +934,10 @@ void CNodeDefManager::fillTileAttribs(ITextureSource *tsrc, TileSpec *tile, tile->material_flags &= ~MATERIAL_FLAG_ANIMATION_VERTICAL_FRAMES; } else { std::ostringstream os(std::ios::binary); + tile->frames.resize(frame_count); + for (int i = 0; i < frame_count; i++) { + FrameSpec frame; os.str(""); diff --git a/src/tile.h b/src/tile.h index f4dc572e7..ea7a9135a 100644 --- a/src/tile.h +++ b/src/tile.h @@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include #include "threads.h" #include -#include +#include class IGameDef; @@ -272,7 +272,7 @@ struct TileSpec // Animation parameters u8 animation_frame_count; u16 animation_frame_length_ms; - std::map frames; + std::vector frames; u8 rotation; }; diff --git a/src/wieldmesh.cpp b/src/wieldmesh.cpp index 66793249a..2a69bb2a0 100644 --- a/src/wieldmesh.cpp +++ b/src/wieldmesh.cpp @@ -252,7 +252,7 @@ void WieldMeshSceneNode::setCube(const TileSpec tiles[6], if (tiles[i].animation_frame_count == 1) { material.setTexture(0, tiles[i].texture); } else { - FrameSpec animation_frame = tiles[i].frames.find(0)->second; + FrameSpec animation_frame = tiles[i].frames[0]; material.setTexture(0, animation_frame.texture); } tiles[i].applyMaterialOptions(material); @@ -351,7 +351,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) material.setFlag(video::EMF_TRILINEAR_FILTER, m_trilinear_filter); bool animated = (f.tiles[i].animation_frame_count > 1); if (animated) { - FrameSpec animation_frame = f.tiles[i].frames.find(0)->second; + FrameSpec animation_frame = f.tiles[i].frames[0]; material.setTexture(0, animation_frame.texture); } else { material.setTexture(0, f.tiles[i].texture); @@ -360,7 +360,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, IGameDef *gamedef) if (m_enable_shaders) { if (f.tiles[i].normal_texture) { if (animated) { - FrameSpec animation_frame = f.tiles[i].frames.find(0)->second; + FrameSpec animation_frame = f.tiles[i].frames[0]; material.setTexture(1, animation_frame.normal_texture); } else { material.setTexture(1, f.tiles[i].normal_texture);