Change TileSpec::frames to be std::vector not std::map
authorunknown <gregory.currie@gmail.com>
Thu, 18 Dec 2014 12:25:36 +0000 (23:25 +1100)
committerCraig Robbins <kde.psych@gmail.com>
Sat, 20 Dec 2014 16:41:17 +0000 (02:41 +1000)
Signed-off-by: Craig Robbins <kde.psych@gmail.com>
src/mapblock_mesh.cpp
src/nodedef.cpp
src/tile.h
src/wieldmesh.cpp

index 29b0e92f5855a117f3a113d3536bebd53aed5d48..f4a44a25692b4363e942fc0a3472e61bae0aa12a 100644 (file)
@@ -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) {
index b046957e639acf5a8c2f3678ab155781066807fe..e7bf9091f12898b43b9dbfd90e4e82e7a76271d3 100644 (file)
@@ -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("");
index f4dc572e7cbbe668ed2165a4df2a15c2d9c0549b..ea7a9135afb554133c159ddd6a2eba559408f32e 100644 (file)
@@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include <IrrlichtDevice.h>
 #include "threads.h"
 #include <string>
-#include <map>
+#include <vector>
 
 class IGameDef;
 
@@ -272,7 +272,7 @@ struct TileSpec
        // Animation parameters
        u8 animation_frame_count;
        u16 animation_frame_length_ms;
-       std::map<u32, FrameSpec> frames;
+       std::vector<FrameSpec> frames;
 
        u8 rotation;
 };
index 66793249abe08baef47c3f1eca65634c72cccc4c..2a69bb2a008a71952c0b5855dab5958f76b780f8 100644 (file)
@@ -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);