]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/vehicle.h
Framework for supporting multiple control protocols in a single driver
[r2c2.git] / source / libmarklin / vehicle.h
index d24bebea60f491568302fead5aff1c3545b58142..75ae85954c4ef1e4b2f5fb128873c41aa767140c 100644 (file)
@@ -48,6 +48,9 @@ private:
        TrackPosition track_pos;
        Point position;
        float direction;
+       std::vector<float> bogie_dirs;
+       unsigned front_sensor;
+       unsigned back_sensor;
 
 public:
        Vehicle(Layout &, const VehicleType &);
@@ -55,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