1 #ifndef LIBR2C2_VEHICLE_H_
2 #define LIBR2C2_VEHICLE_H_
5 #include "vehicletype.h"
26 const VehicleType::Axle *type;
29 Axle(const VehicleType::Axle &);
34 const VehicleType::Bogie *type;
36 std::vector<Axle> axles;
38 Bogie(const VehicleType::Bogie &);
43 const VehicleType::Rod *type;
47 Rod(const VehicleType::Rod &);
58 TrackPosition(Track *, unsigned, float);
60 TrackPoint get_point() const;
64 const VehicleType &type;
67 TrackPosition track_pos;
70 std::vector<Axle> axles;
71 std::vector<Bogie> bogies;
72 std::vector<Rod> rods;
73 unsigned front_sensor;
77 Vehicle(Layout &, const VehicleType &);
80 const VehicleType &get_type() const { return type; }
82 void attach_back(Vehicle &);
83 void attach_front(Vehicle &);
86 Vehicle *get_next() const { return next; }
87 Vehicle *get_previous() const { return prev; }
89 void place(Track &, unsigned, float, PlaceMode = CENTER);
92 Track *get_track() const { return track_pos.track; }
93 unsigned get_entry() const { return track_pos.ep; }
94 float get_offset() const { return track_pos.offs; }
95 const Vector &get_position() const { return position; }
96 float get_direction() const { return direction; }
97 const Axle &get_fixed_axle(unsigned) const;
98 const Bogie &get_bogie(unsigned) const;
99 const Axle &get_bogie_axle(unsigned, unsigned) const;
100 const Rod &get_rod(unsigned) const;
102 void update_position();
103 void update_position_from(const Vehicle &);
104 void propagate_position();
105 void propagate_forward();
106 void propagate_backward();
107 void check_sensor(float, unsigned &);
108 void turn_axles(float);
111 void adjust_for_distance(TrackPosition &, TrackPosition &, float, float = 0.5) const;
112 TrackPoint get_point(const Vector &, const Vector &, float = 0.5) const;
113 TrackPoint get_point(const TrackPosition &, float, float = 0.5) const;