]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicletype.h
Split vehicle placement code to a separate class
[r2c2.git] / source / libr2c2 / vehicletype.h
index 841664e375f10f61b079b52a535318c79cd4ea76..31b6992a134773c474cf1ab2868b054ccbcaca83 100644 (file)
@@ -18,6 +18,7 @@ public:
        public:
                Loader(VehicleType &);
        private:
+               virtual void finish();
                void axle();
                void bogie();
                void function(unsigned, const std::string &);
@@ -27,6 +28,8 @@ public:
                void width(float);
        };
 
+       struct Bogie;
+
        struct Axle
        {
                class Loader: public Msp::DataFile::ObjectLoader<Axle>
@@ -38,6 +41,9 @@ public:
                        void wheel_diameter(float);
                };
 
+               unsigned index;
+               Bogie *bogie;
+               float local_position;
                float position;
                float wheel_dia;
                bool powered;
@@ -46,29 +52,30 @@ public:
                Axle();
        };
 
-       typedef std::vector<Axle> AxleArray;
-
        struct Bogie
        {
                class Loader: public Msp::DataFile::ObjectLoader<Bogie>
                {
+               private:
+                       VehicleType &parent;
+
                public:
-                       Loader(Bogie &);
+                       Loader(VehicleType &, Bogie &);
                private:
                        void axle();
                        void position(float);
                };
 
+               unsigned index;
                float position;
-               AxleArray axles;
+               unsigned first_axle;
+               std::vector<Axle *> axles;
                std::string object;
                bool rotate_object;
 
                Bogie();
        };
 
-       typedef std::vector<Bogie> BogieArray;
-
        struct Rod
        {
                enum Anchor
@@ -120,8 +127,9 @@ public:
                Rod();
        };
 
+       typedef std::vector<Axle> AxleArray;
+       typedef std::vector<Bogie> BogieArray;
        typedef std::vector<Rod> RodArray;
-
        typedef std::map<unsigned, std::string> FunctionMap;
 
 private:
@@ -132,6 +140,7 @@ private:
        float width;
        float height;
        AxleArray axles;
+       std::vector<Axle *> fixed_axles;
        BogieArray bogies;
        RodArray rods;
        std::string object;
@@ -147,7 +156,8 @@ public:
        float get_length() const { return length; }
        float get_width() const { return width; }
        float get_height() const { return height; }
-       const AxleArray &get_fixed_axles() const { return axles; }
+       const AxleArray &get_axles() const { return axles; }
+       const Axle &get_axle(unsigned) const;
        const Axle &get_fixed_axle(unsigned) const;
        const BogieArray &get_bogies() const { return bogies; }
        const Bogie &get_bogie(unsigned) const;