]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
Fix critical block logic
[r2c2.git] / source / libr2c2 / train.h
index 25392bd768db8f06493fe414fb6f9e038068cec1..dff9aae666fa3f301b02bf21203024c578a677dc 100644 (file)
@@ -36,7 +36,7 @@ public:
                void quantized_speed();
                void router();
                void timetable();
-               void vehicle(ArticleNumber);
+               void vehicle(const std::string &);
        };
 
        sigc::signal<void, const std::string &> signal_name_changed;
@@ -44,6 +44,7 @@ public:
        sigc::signal<void, unsigned, bool> signal_function_changed;
        sigc::signal<void, TrainAI &, const TrainAI::Message &> signal_ai_event;
        sigc::signal<void, Block &> signal_advanced;
+       sigc::signal<void, Block &> signal_rear_advanced;
        sigc::signal<void, unsigned, Vehicle &> signal_vehicle_added;
        sigc::signal<void, unsigned, Vehicle &> signal_vehicle_removed;
 
@@ -120,7 +121,10 @@ public:
        bool is_placed() const { return !allocator.empty(); }
        void stop_at(Block *);
        bool is_block_critical(const Block &) const;
-       BlockIter get_first_noncritical_block() const;
+       BlockIter get_last_critical_block() const;
+private:
+       BlockIter check_critical_blocks(const Block *) const;
+public:
        void refresh_blocks_from(Block &);
        const BlockAllocator &get_block_allocator() const { return allocator; }
        float get_reserved_distance() const;
@@ -132,7 +136,7 @@ private:
        void control_changed(const Controller::Control &);
        void loco_speed_event(unsigned, unsigned, bool);
        void loco_func_event(unsigned, unsigned, bool);
-       void sensor_state_changed(Sensor &, Sensor::State);
+       void advanced(Block &, Sensor *);
        void halt_event(bool);
        void block_reserved(const Block &, const Train *);
        float get_reserved_distance_until(const Block *) const;