X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicle.h;h=94ae2b1683e648cc8f07cb9edfc1ff56d107ecdf;hb=107a7f787d406f1f664c4986557f9a896e0845ea;hp=bd815ab19f497bec7d07470d09700186765548ce;hpb=7a36d396eded897c421424905b2c938d770df341;p=r2c2.git diff --git a/source/libr2c2/vehicle.h b/source/libr2c2/vehicle.h index bd815ab..94ae2b1 100644 --- a/source/libr2c2/vehicle.h +++ b/source/libr2c2/vehicle.h @@ -3,12 +3,13 @@ #include "geometry.h" #include "object.h" +#include "trackiter.h" #include "vehicletype.h" namespace R2C2 { class Layout; -class Track; +class Train; class attachment_error: public std::logic_error { @@ -59,17 +60,17 @@ 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; }; const VehicleType &type; + Train *train; Vehicle *next; Vehicle *prev; TrackPosition track_pos; @@ -86,6 +87,8 @@ public: virtual Vehicle *clone(Layout * = 0) const; virtual const VehicleType &get_type() const { return type; } + void set_train(Train *); + Train *get_train() const { return train; } void attach_back(Vehicle &); void attach_front(Vehicle &); void detach_back(); @@ -96,11 +99,13 @@ public: // TODO implement these - should call place() with suitable parameters virtual void set_position(const Vector &) { } virtual void set_rotation(const Angle &) { } - void place(Track &, unsigned, float, PlaceMode = CENTER); + virtual void set_tilt(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; @@ -124,8 +129,6 @@ public: virtual unsigned get_n_link_slots() const; virtual Vehicle *get_link(unsigned) const; virtual int get_link_slot(const Object &) const; - - virtual bool collide_ray(const Vector &, const Vector &) const { return false; } }; } // namespace R2C2