signal_control_changed.emit(ctrl.name, ctrl.value);
}
-void Train::loco_speed_event(unsigned addr, unsigned speed, bool)
+void Train::loco_speed_event(unsigned addr, unsigned speed, bool rev)
{
if(addr==address)
{
current_speed_step = speed;
+ if(rev!=reverse)
+ layout.get_driver().set_loco_reverse(address, reverse);
speed_changing = false;
pure_speed = false;
}
if(!block || block->get_endpoints().size()<2)
{
if(!blocking_train)
+ {
good_end = blocks.end();
+ end_of_route = true;
+ }
break;
}
contested_blocks.push_back(block);
continue;
}
- else if(divert_track && (entry_conflict || exit_conflict))
+ else if(divert_track && (entry_conflict || exit_conflict || !other_train->is_active()))
// We are blocked, but there's a diversion possibility
try_divert = true;