]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicletype.h
Make shoppinglist ignore zones
[r2c2.git] / source / libr2c2 / vehicletype.h
index b97fb921519212f8b74e7d1681514ed3dacd4971..c0fe0ea5136f3c56bf7a94a6089fe2cc7db64a88 100644 (file)
@@ -10,6 +10,7 @@ Distributed under the GPL
 
 #include <msp/datafile/objectloader.h>
 #include "articlenumber.h"
+#include "geometry.h"
 
 namespace R2C2 {
 
@@ -18,6 +19,9 @@ class VehicleType
 public:
        class Loader: public Msp::DataFile::ObjectLoader<VehicleType>
        {
+       private:
+               std::map<std::string, unsigned> rod_tags;
+
        public:
                Loader(VehicleType &);
        private:
@@ -26,6 +30,7 @@ public:
                void function(unsigned, const std::string &);
                void height(float);
                void length(float);
+               void rod();
                void width(float);
        };
 
@@ -67,6 +72,57 @@ public:
                Bogie();
        };
 
+       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();
+       };
+
 private:
        ArticleNumber art_nr;
        std::string name;
@@ -77,6 +133,7 @@ private:
        float height;
        std::vector<Axle> axles;
        std::vector<Bogie> bogies;
+       std::vector<Rod> rods;
        std::string object;
 
 public:
@@ -92,6 +149,7 @@ public:
        float get_height() const { return height; }
        const std::vector<Axle> &get_axles() const { return axles; }
        const std::vector<Bogie> &get_bogies() const { return bogies; }
+       const std::vector<Rod> &get_rods() const { return rods; }
        float get_front_axle_offset() const;
        float get_back_axle_offset() const;
        const std::string &get_object() const { return object; }