]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/aicontrol.cpp
Allow zones with no qualifier or no number
[r2c2.git] / source / libr2c2 / aicontrol.cpp
index 3e31aaf638e602412fa8a184dfbde2796dabe41d..f1f16bf1850a511c25059aa247356ec4445fbcee 100644 (file)
@@ -16,14 +16,11 @@ AIControl::AIControl(Train &t):
        state(NORMAL),
        need_update(false)
 {
-       train.signal_arrived.connect(sigc::mem_fun(this, &AIControl::arrived));
+       train.signal_ai_event.connect(sigc::mem_fun(this, &AIControl::event));
 }
 
 void AIControl::set_target_speed(float s)
 {
-       if(s && !train.is_active())
-               train.set_active(true);
-
        target_speed = s;
        need_update = true;
        signal_event.emit(Message("target-speed-changed", target_speed));
@@ -52,7 +49,7 @@ void AIControl::message(const Message &msg)
                set_reverse(!reverse);
 }
 
-void AIControl::tick(const Time::TimeStamp &, const Time::TimeDelta &)
+void AIControl::tick(const Time::TimeDelta &)
 {
        float scale = train.get_layout().get_catalogue().get_scale();
        float rsv_dist = train.get_reserved_distance();
@@ -83,7 +80,7 @@ void AIControl::tick(const Time::TimeStamp &, const Time::TimeDelta &)
                        speed_limit = 0;
                else if(state==APPROACH)
                        speed_limit = approach_speed;
-               else if(state==FOLLOW && train.get_preceding_train()->is_active())
+               else if(state==FOLLOW && train.get_preceding_train()->get_block_allocator().is_active())
                        speed_limit = train.get_preceding_train()->get_speed();
 
                if(speed_limit>=0 && target_speed>speed_limit)
@@ -99,14 +96,17 @@ void AIControl::tick(const Time::TimeStamp &, const Time::TimeDelta &)
                reverse = pending_reverse;
                train.set_control("reverse", reverse);
        }
+}
 
-       if(!target_speed && !train.get_controller().get_speed() && train.is_active())
-               train.set_active(false);
+bool AIControl::has_intent_to_move() const
+{
+       return target_speed;
 }
 
-void AIControl::arrived()
+void AIControl::event(TrainAI &, const Message &ev)
 {
-       set_target_speed(0);
+       if(ev.type=="arrived")
+               set_target_speed(0);
 }
 
 } // namespace R2C2