X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Flibr2c2%2Ftrain.cpp;h=1447ca58df834c86f7a14d27610e0959bb38c560;hb=598631d530a20ba8f4710f45747a9742e149f604;hp=218b6861da183b0d24c3279046c4dc122aaae9ba;hpb=b41c7409da959420aed91e8a2e1fdab95ef473c4;p=r2c2.git diff --git a/source/libr2c2/train.cpp b/source/libr2c2/train.cpp index 218b686..1447ca5 100644 --- a/source/libr2c2/train.cpp +++ b/source/libr2c2/train.cpp @@ -443,8 +443,7 @@ void Train::unplace() bool Train::free_block(Block &block) { - float margin = 10*layout.get_catalogue().get_scale(); - if(get_reserved_distance_until(&block, false)get_braking_distance()*1.3+margin) + if(get_reserved_distance_until(&block, false)get_braking_distance()*1.3) return false; unsigned nsens = 0; @@ -534,7 +533,15 @@ int Train::get_entry_to_block(Block &block) const float Train::get_reserved_distance() const { - return get_reserved_distance_until(0, false); + if(blocks.empty()) + return 0; + + float margin = 0; + TrackIter next = blocks.back().next().track_iter(); + if(next->get_type().is_turnout()) + margin = 15*layout.get_catalogue().get_scale(); + + return max(get_reserved_distance_until(0, false)-margin, 0.0f); } void Train::tick(const Time::TimeStamp &t, const Time::TimeDelta &dt) @@ -775,6 +782,8 @@ void Train::sensor_event(unsigned addr, bool state) } // Move blocks up to the next sensor to our current blocks + for(BlockList::iterator j=cur_blocks_end; j!=end; ++j) + signal_advanced.emit(**j); cur_blocks_end = end; // Try to get more blocks if we're moving