X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fvehicle.h;h=75ae85954c4ef1e4b2f5fb128873c41aa767140c;hb=975ea87cc7be179618b06291cb2506a2523cad1f;hp=dcf773736bac3d08b13131a02901279fda00db0b;hpb=e5cd9e4fbc577036a0385c985b6b65df8218d0a2;p=r2c2.git diff --git a/source/libmarklin/vehicle.h b/source/libmarklin/vehicle.h index dcf7737..75ae859 100644 --- a/source/libmarklin/vehicle.h +++ b/source/libmarklin/vehicle.h @@ -22,7 +22,10 @@ public: enum PlaceMode { CENTER, - FRONT_AXLE + FRONT_AXLE, + FRONT_BUFFER, + BACK_AXLE, + BACK_BUFFER }; private: @@ -45,6 +48,9 @@ private: TrackPosition track_pos; Point position; float direction; + std::vector bogie_dirs; + unsigned front_sensor; + unsigned back_sensor; public: Vehicle(Layout &, const VehicleType &); @@ -52,14 +58,33 @@ public: 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