]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicle.h
Simplify some interfaces by using track and block iterators
[r2c2.git] / source / libr2c2 / vehicle.h
index bbd156ceb332347269e6c0811253ec74d344f5c9..d259201f0ec4df982fc353e005c1730f80d29e72 100644 (file)
@@ -3,12 +3,12 @@
 
 #include "geometry.h"
 #include "object.h"
+#include "trackiter.h"
 #include "vehicletype.h"
 
 namespace R2C2 {
 
 class Layout;
-class Track;
 
 class attachment_error: public std::logic_error
 {
@@ -33,7 +33,7 @@ public:
        struct Axle
        {
                const VehicleType::Axle *type;
-               float angle;
+               Angle angle;
 
                Axle(const VehicleType::Axle &);
        };
@@ -41,7 +41,7 @@ public:
        struct Bogie
        {
                const VehicleType::Bogie *type;
-               float direction;
+               Angle direction;
                std::vector<Axle> axles;
 
                Bogie(const VehicleType::Bogie &);
@@ -51,7 +51,7 @@ public:
        {
                const VehicleType::Rod *type;
                Vector position;
-               float angle;
+               Angle angle;
 
                Rod(const VehicleType::Rod &);
        };
@@ -59,12 +59,11 @@ public:
 private:
        struct TrackPosition
        {
-               Track *track;
-               unsigned ep;
+               TrackIter track;
                float offs;
 
                TrackPosition();
-               TrackPosition(Track *, unsigned, float);
+               TrackPosition(const TrackIter &, float);
                void advance(float);
                TrackPoint get_point() const;
        };
@@ -95,12 +94,13 @@ public:
 
        // TODO implement these - should call place() with suitable parameters
        virtual void set_position(const Vector &) { }
-       virtual void set_rotation(float) { }
-       void place(Track &, unsigned, float, PlaceMode = CENTER);
+       virtual void set_rotation(const Angle &) { }
+       void place(const TrackIter &, float, PlaceMode = CENTER);
        void unplace();
        void advance(float);
-       Track *get_track() const { return track_pos.track; }
-       unsigned get_entry() const { return track_pos.ep; }
+       const TrackIter &get_track_iter() const { return track_pos.track; }
+       Track *get_track() const { return track_pos.track.track(); }
+       unsigned get_entry() const { return track_pos.track.entry(); }
        float get_offset() const { return track_pos.offs; }
        const Axle &get_fixed_axle(unsigned) const;
        const Bogie &get_bogie(unsigned) const;