X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicle.h;h=b9c36d95d1e42bdbd6b06b5bc655138ac8ab3fb2;hb=629ded2c61ef25ec34cc52b03fe69d02e72db50f;hp=ec33edea0db503763c005ed717b3523186703fd5;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/libr2c2/vehicle.h b/source/libr2c2/vehicle.h index ec33ede..b9c36d9 100644 --- a/source/libr2c2/vehicle.h +++ b/source/libr2c2/vehicle.h @@ -9,12 +9,12 @@ Distributed under the GPL #define LIBR2C2_VEHICLE_H_ #include "geometry.h" +#include "vehicletype.h" namespace R2C2 { class Layout; class Track; -class VehicleType; class Vehicle { @@ -28,6 +28,32 @@ public: BACK_BUFFER }; + struct Axle + { + const VehicleType::Axle *type; + float angle; + + Axle(const VehicleType::Axle &); + }; + + struct Bogie + { + const VehicleType::Bogie *type; + float direction; + std::vector axles; + + Bogie(const VehicleType::Bogie &); + }; + + struct Rod + { + const VehicleType::Rod *type; + Vector position; + float angle; + + Rod(const VehicleType::Rod &); + }; + private: struct TrackPosition { @@ -46,9 +72,11 @@ private: Vehicle *next; Vehicle *prev; TrackPosition track_pos; - Point position; + Vector position; float direction; - std::vector bogie_dirs; + std::vector axles; + std::vector bogies; + std::vector rods; unsigned front_sensor; unsigned back_sensor; @@ -71,9 +99,12 @@ public: 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; } + const Vector &get_position() const { return position; } float get_direction() const { return direction; } - float get_bogie_direction(unsigned) const; + const Axle &get_axle(unsigned) const; + const Bogie &get_bogie(unsigned) const; + const Axle &get_bogie_axle(unsigned, unsigned) const; + const Rod &get_rod(unsigned) const; private: void update_position(); void update_position_from(const Vehicle &); @@ -81,9 +112,11 @@ private: 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; + TrackPoint get_point(const Vector &, const Vector &, float = 0.5) const; TrackPoint get_point(const TrackPosition &, float, float = 0.5) const; };