rendered paste bodyIndex: src/character/movement.h===================================================================--- src/character/movement.h (revision 9176)+++ src/character/movement.h (working copy)@@ -31,16 +31,18 @@ typedef struct _xmlNode xmlNode; +// Position of a member relative to its superior one class member_mvt-{ // Position of a member relative to its superior one+{ + MemberType type; Double angle_rad; // angle in radian public: Point2d pos; Point2d scale; /* SetAngle take radian values */- inline void SetAngle(Double angle) { angle_rad = RestrictAngle(angle); }+ void SetAngle(Double angle) { angle_rad = RestrictAngle(angle); } /* GetAngle returns radian values */- inline const Double &GetAngle() const { return angle_rad; }+ const Double &GetAngle() const { return angle_rad; } Double alpha; int follow_cursor_limit; bool follow_cursor;@@ -48,17 +50,22 @@ bool follow_half_crosshair; bool follow_speed; bool follow_direction;- member_mvt(): angle_rad(0), pos(0.0, 0.0), scale(1.0, 1.0), alpha(1),- follow_cursor_limit(0), follow_cursor(false),- follow_crosshair(false), follow_half_crosshair(false),- follow_speed(false), follow_direction(false)+ member_mvt(const std::string& name = DUMMY_MEMBER)+ : type(name)+ , angle_rad(ZERO), pos(ZERO, ZERO), scale(ONE, ONE), alpha(ONE)+ , follow_cursor_limit(0), follow_cursor(false)+ , follow_crosshair(false), follow_half_crosshair(false)+ , follow_speed(false), follow_direction(false) { };+ operator const MemberType& () const { return type; }+ bool operator==(const MemberType& other) const { return type == other; }+ bool operator!=(const MemberType& other) const { return type == other; } }; class Movement { public:- typedef std::map<MemberType, class member_mvt> member_def; // Describe the position of each member for a given frame+ typedef std::vector<class member_mvt> member_def; // Describe the position of each member for a given frame private: uint ref_count;Index: src/character/member.cpp===================================================================--- src/character/member.cpp (revision 9182)+++ src/character/member.cpp (working copy)@@ -18,7 +18,6 @@ ****************************************************************************** *****************************************************************************/ -#include <map> #include <iostream> #include "character/character.h" #include "character/member.h"Index: src/character/member_type.h===================================================================--- src/character/member_type.h (revision 9182)+++ src/character/member_type.h (working copy)@@ -21,13 +21,15 @@ #ifndef MEMBER_TYPE_H #define MEMBER_TYPE_H +#define DUMMY_MEMBER "dummy"+ class MemberType { typedef std::vector<std::string> Vector; static Vector Map; public: int type;- MemberType(const std::string& name)+ MemberType(const std::string& name = DUMMY_MEMBER) { uint count; for (count = 0; count<Map.size(); count++) {Index: src/character/movement.cpp===================================================================--- src/character/movement.cpp (revision 9176)+++ src/character/movement.cpp (working copy)@@ -18,7 +18,6 @@ ****************************************************************************** *****************************************************************************/ -#include <map> #include <iostream> #include <cstdio> #include "character/movement.h"@@ -61,19 +60,20 @@ * thr array to be able to get all of them. */ frames.resize(nodes.size()); + uint count=0; for (int frame_number=0; it != end; ++it, frame_number++) { xmlNodeArray members = XmlReader::GetNamedChildren(*it, "member"); xmlNodeArray::const_iterator it2; MSG_DEBUG("body.movement", " Found %i frame members", members.size());+ frames[frame_number].resize(members.size()); for (it2 = members.begin(); it2 != members.end(); ++it2) {- const xmlNode *child = *it2; std::string member_type; XmlReader::ReadStringAttr(child, "type", member_type); - member_mvt mvt;+ member_mvt mvt(member_type); int dx = 0, dy = 0, angle_deg = 0; Double scale_x = 1.0, scale_y = 1.0, tmp_alpha = 1.0; @@ -107,7 +107,7 @@ always_moving |= mvt.follow_speed; always_moving |= mvt.follow_direction; - frames[frame_number][member_type] = mvt;+ frames[frame_number].push_back(mvt); } } }Index: src/character/body.cpp===================================================================--- src/character/body.cpp (revision 9176)+++ src/character/body.cpp (working copy)@@ -20,7 +20,7 @@ *****************************************************************************/ #include <sstream> #include <iostream>-#include <map>+#include <algorithm> #include <WARMUX_debug.h> #include "character/body.h" #include "character/character.h"@@ -299,7 +299,6 @@ std::vector<junction *>::iterator member = skel_lst.begin(); bool useCrossHair;- member_mvt mb_mvt; Movement::member_def movMember = mvt->GetFrames()[frame]; Movement::member_def::iterator itMember; @@ -309,12 +308,12 @@ for (; member != skel_lst.end(); ++member) { ASSERT(frame < mvt->GetFrames().size()); - itMember = movMember.find((*member)->member->GetType());+ itMember = std::find(movMember.begin(), movMember.end(), (*member)->member->GetType()); if (itMember != movMember.end()) { // This member needs to be moved :- mb_mvt = itMember->second;+ member_mvt& mb_mvt = *itMember; useCrossHair = ActiveTeam().AccessWeapon().UseCrossHair();