TrackPosition track_pos;
Point position;
float direction;
+ std::vector<float> bogie_dirs;
+ unsigned front_sensor;
+ unsigned back_sensor;
public:
Vehicle(Layout &, const VehicleType &);
const VehicleType &get_type() const { return type; }
- void place(Track *, unsigned, float, PlaceMode = CENTER);
+ void attach_back(Vehicle &);
+ void attach_front(Vehicle &);
+ void detach_back();
+ void detach_front();
+ Vehicle *get_next() const { return next; }
+ Vehicle *get_previous() const { return prev; }
+
+ void place(Track &, unsigned, float, PlaceMode = CENTER);
+ void unplace();
void advance(float);
Track *get_track() const { return track_pos.track; }
unsigned get_entry() const { return track_pos.ep; }
float get_offset() const { return track_pos.offs; }
const Point &get_position() const { return position; }
float get_direction() const { return direction; }
+ float get_bogie_direction(unsigned) const;
private:
void update_position();
- TrackPoint get_position(float, float, const TrackPosition &);
+ void update_position_from(const Vehicle &);
+ void propagate_position();
+ void propagate_forward();
+ void propagate_backward();
+ void check_sensor(float, unsigned &);
+
+ void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const;
+ TrackPoint get_point(const Point &, const Point &, float = 0.5) const;
+ TrackPoint get_point(const TrackPosition &, float, float = 0.5) const;
};
} // namespace Marklin