]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicle.h
Add single get_stuff methods with index to VehicleType
[r2c2.git] / source / libr2c2 / vehicle.h
index 2e91962842f2d319153ea4e8a2592f9f7af2275b..1f118cc579b15c76a90b9eb86c686e7f82d5c0a9 100644 (file)
@@ -9,12 +9,12 @@ Distributed under the GPL
 #define LIBR2C2_VEHICLE_H_
 
 #include "geometry.h"
+#include "vehicletype.h"
 
 namespace R2C2 {
 
 class Layout;
 class Track;
-class VehicleType;
 
 class Vehicle
 {
@@ -28,6 +28,32 @@ public:
                BACK_BUFFER
        };
 
+       struct Axle
+       {
+               const VehicleType::Axle *type;
+               float angle;
+
+               Axle(const VehicleType::Axle &);
+       };
+
+       struct Bogie
+       {
+               const VehicleType::Bogie *type;
+               float direction;
+               std::vector<Axle> axles;
+
+               Bogie(const VehicleType::Bogie &);
+       };
+
+       struct Rod
+       {
+               const VehicleType::Rod *type;
+               Point position;
+               float angle;
+
+               Rod(const VehicleType::Rod &);
+       };
+
 private:
        struct TrackPosition
        {
@@ -41,14 +67,6 @@ private:
                TrackPoint get_point() const;
        };
 
-       struct Rod
-       {
-               Point position;
-               float angle;
-
-               Rod();
-       };
-
        Layout &layout;
        const VehicleType &type;
        Vehicle *next;
@@ -56,8 +74,8 @@ private:
        TrackPosition track_pos;
        Point position;
        float direction;
-       std::vector<float> bogie_dirs;
-       std::vector<std::vector<float> > axle_angles;
+       std::vector<Axle> axles;
+       std::vector<Bogie> bogies;
        std::vector<Rod> rods;
        unsigned front_sensor;
        unsigned back_sensor;
@@ -83,11 +101,10 @@ public:
        float get_offset() const { return track_pos.offs; }
        const Point &get_position() const { return position; }
        float get_direction() const { return direction; }
-       float get_axle_angle(unsigned) const;
-       float get_bogie_direction(unsigned) const;
-       float get_bogie_axle_angle(unsigned, unsigned) const;
-       const Point &get_rod_position(unsigned) const;
-       float get_rod_angle(unsigned) const;
+       const Axle &get_axle(unsigned) const;
+       const Bogie &get_bogie(unsigned) const;
+       const Axle &get_bogie_axle(unsigned, unsigned) const;
+       const Rod &get_rod(unsigned) const;
 private:
        void update_position();
        void update_position_from(const Vehicle &);