From 1e8e700ee645fa642e868c79c2717c82d3509f55 Mon Sep 17 00:00:00 2001
From: unknown <gregory.currie@gmail.com>
Date: Thu, 18 Dec 2014 23:25:36 +1100
Subject: [PATCH] Change TileSpec::frames to be std::vector not std::map

Signed-off-by: Craig Robbins <kde.psych@gmail.com>
---
 src/mapblock_mesh.cpp | 4 ++--
 src/nodedef.cpp       | 3 +++
 src/tile.h            | 4 ++--
 src/wieldmesh.cpp     | 6 +++---
 4 files changed, 10 insertions(+), 7 deletions(-)

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 <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;
 };
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);