TrackPoint get_point() const;
};
+ struct Rod
+ {
+ Point position;
+ float angle;
+
+ Rod();
+ };
+
Layout &layout;
const VehicleType &type;
Vehicle *next;
Point position;
float direction;
std::vector<float> bogie_dirs;
+ std::vector<std::vector<float> > axle_angles;
+ std::vector<Rod> rods;
unsigned front_sensor;
unsigned back_sensor;
float get_offset() const { return track_pos.offs; }
const Point &get_position() const { return position; }
float get_direction() const { return direction; }
+ float get_axle_angle(unsigned) const;
float get_bogie_direction(unsigned) const;
+ float get_bogie_axle_angle(unsigned, unsigned) const;
+ const Point &get_rod_position(unsigned) const;
+ float get_rod_angle(unsigned) const;
private:
void update_position();
void update_position_from(const Vehicle &);
void propagate_forward();
void propagate_backward();
void check_sensor(float, unsigned &);
+ void turn_axles(float);
+ void update_rods();
void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const;
TrackPoint get_point(const Point &, const Point &, float = 0.5) const;