#include "geometry.h"
#include "object.h"
-#include "trackiter.h"
+#include "trackoffsetiter.h"
#include "vehicletype.h"
namespace R2C2 {
class Layout;
+class Train;
class attachment_error: public std::logic_error
{
};
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<Axle> axles;
std::vector<Bogie> bogies;
std::vector<Rod> rods;
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();
// 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;
void turn_axles(float);
void update_rods();
- void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const;
+ void adjust_for_distance(TrackOffsetIter &, TrackOffsetIter &, 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;
+ TrackPoint get_point(const TrackOffsetIter &, float, float = 0.5) const;
public:
virtual unsigned get_n_link_slots() const;