X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicle.h;h=df251c11ac3df1a90d6ec6300bf3534c74acb183;hb=64d23de66c33d0f77454c3db2e40cccc18f7851b;hp=616ad366d2de5ce2973a48848e2e33fb2d169719;hpb=0c2a3e6c435fd4cf05cc5275f750d341842aa543;p=r2c2.git diff --git a/source/libr2c2/vehicle.h b/source/libr2c2/vehicle.h index 616ad36..df251c1 100644 --- a/source/libr2c2/vehicle.h +++ b/source/libr2c2/vehicle.h @@ -3,7 +3,7 @@ #include "geometry.h" #include "object.h" -#include "trackiter.h" +#include "trackoffsetiter.h" #include "vehicletype.h" namespace R2C2 { @@ -58,22 +58,11 @@ public: }; private: - struct TrackPosition - { - TrackIter track; - float offs; - - TrackPosition(); - TrackPosition(const TrackIter &, float); - void advance(float); - TrackPoint get_point() const; - }; - const VehicleType &type; Train *train; Vehicle *next; Vehicle *prev; - TrackPosition track_pos; + TrackOffsetIter track; std::vector axles; std::vector bogies; std::vector rods; @@ -99,13 +88,14 @@ public: // TODO implement these - should call place() with suitable parameters virtual void set_position(const Vector &) { } virtual void set_rotation(const Angle &) { } + virtual void set_tilt(const Angle &) { } void place(const TrackIter &, float, PlaceMode = CENTER); void unplace(); void advance(float); - 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 TrackOffsetIter &get_track_iter() const { return track; } + Track *get_track() const { return track.track(); } + unsigned get_entry() const { return track.entry(); } + float get_offset() const { return track.offset(); } const Axle &get_fixed_axle(unsigned) const; const Bogie &get_bogie(unsigned) const; const Axle &get_bogie_axle(unsigned, unsigned) const; @@ -120,9 +110,9 @@ private: void turn_axles(float); void update_rods(); - void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const; - TrackPoint get_point(const Vector &, const Vector &, float = 0.5) const; - TrackPoint get_point(const TrackPosition &, float, float = 0.5) const; + void adjust_for_distance(TrackOffsetIter &, TrackOffsetIter &, float, float = 0.5) const; + OrientedPoint get_point(const Vector &, const Vector &, float = 0.5) const; + OrientedPoint get_point(const TrackOffsetIter &, float, float = 0.5) const; public: virtual unsigned get_n_link_slots() const;