+ struct Rod
+ {
+ enum Anchor
+ {
+ BODY,
+ AXLE,
+ BOGIE_AXLE,
+ ROD
+ };
+
+ enum Limit
+ {
+ FIXED,
+ ROTATE,
+ SLIDE_X
+ };
+
+ class Loader: public Msp::DataFile::ObjectLoader<Rod>
+ {
+ private:
+ const std::map<std::string, unsigned> &tags;
+ std::string tag;
+
+ public:
+ Loader(Rod &, const std::map<std::string, unsigned> &);
+ const std::string &get_tag() const { return tag; }
+ private:
+ void connect(const std::string &, float, float, float, float);
+ void limit(Limit);
+ void pivot_body();
+ void pivot_axle(unsigned);
+ void pivot_bogie_axle(unsigned, unsigned);
+ void pivot_rod(const std::string &);
+ void position(float, float, float);
+ void set_tag(const std::string &);
+ };
+
+ Anchor pivot;
+ unsigned pivot_index;
+ unsigned pivot_index2;
+ Point pivot_point;
+ Limit limit;
+ int connect_index;
+ Point connect_point;
+ Point connect_offset;
+ std::string object;
+ bool mirror_object;
+
+ Rod();
+ };
+