TrackPosition track_pos;
Point position;
float direction;
+ std::vector<float> bogie_dirs;
+ unsigned front_sensor;
+ unsigned back_sensor;
public:
Vehicle(Layout &, const VehicleType &);
Vehicle *get_next() const { return next; }
Vehicle *get_previous() const { return prev; }
- void place(Track *, unsigned, float, PlaceMode = CENTER);
+ 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();
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;