X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicle.h;h=d259201f0ec4df982fc353e005c1730f80d29e72;hb=54392d65e2053d1eacb4cfcc435f1013993f2973;hp=bbd156ceb332347269e6c0811253ec74d344f5c9;hpb=0b75458245997b9df6da47cc4534341c8426084b;p=r2c2.git diff --git a/source/libr2c2/vehicle.h b/source/libr2c2/vehicle.h index bbd156c..d259201 100644 --- a/source/libr2c2/vehicle.h +++ b/source/libr2c2/vehicle.h @@ -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 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;