]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.cpp
Include block in the emergency signal
[r2c2.git] / source / libr2c2 / train.cpp
index 34b80ddcc39d213635431e50613ecdce29776d51..78137b8703ddfc7162ec173f83046ff31bfe877b 100644 (file)
@@ -358,7 +358,8 @@ void Train::tick(const Time::TimeDelta &dt)
                Vehicle &vehicle = *(reverse ? vehicles.back() : vehicles.front());
 
                float d = speed*(dt/Time::sec);
-               if(allocator.is_block_current(vehicle.get_placement().get_position(reverse ? VehiclePlacement::BACK_AXLE : VehiclePlacement::FRONT_AXLE)->get_block()))
+               Block &block = vehicle.get_placement().get_position(reverse ? VehiclePlacement::BACK_AXLE : VehiclePlacement::FRONT_AXLE)->get_block();
+               if(allocator.is_block_current(block))
                {
                        SetFlag setf(advancing);
                        vehicle.advance(reverse ? -d : d);
@@ -368,7 +369,7 @@ void Train::tick(const Time::TimeDelta &dt)
                        overshoot_dist += d;
                        if(overshoot_dist>40*layout.get_catalogue().get_scale())
                        {
-                               layout.emergency(name+" has not arrived at sensor");
+                               layout.emergency(&block, name+" has not arrived at sensor");
                                accurate_position = false;
                        }
                }
@@ -487,8 +488,11 @@ void Train::sensor_state_changed(Sensor &sensor, Sensor::State state)
 
                last_entry_block = allocator.iter_for(*block);
                travel_time = Time::zero;
-               pure_speed = true;
-               accurate_position = true;
+               if(!layout.get_driver().is_halted())
+               {
+                       pure_speed = true;
+                       accurate_position = true;
+               }
                overshoot_dist = 0;
 
                if(!advancing && vehicles.front()->is_placed())