X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=blobdiff_plain;f=source%2Flibr2c2%2Fblockallocator.cpp;fp=source%2Flibr2c2%2Fblockallocator.cpp;h=cb6b912de53481552990bb5f76936bf5ee801778;hp=7cca79f795a61c9cad6ad11eb2689639f4574098;hb=d0881a98a6240758ac1aeceaa9443d718ab1ad5c;hpb=dfe3dd563981883f3b7c826102fed33c7ff0d12d diff --git a/source/libr2c2/blockallocator.cpp b/source/libr2c2/blockallocator.cpp index 7cca79f..cb6b912 100644 --- a/source/libr2c2/blockallocator.cpp +++ b/source/libr2c2/blockallocator.cpp @@ -34,7 +34,8 @@ BlockAllocator::BlockAllocator(Train &t): pending_block(0), stop_at_block(0), reserving(false), - advancing(false) + advancing(false), + reserve_pending(false) { Layout &layout = train.get_layout(); layout.signal_block_reserved.connect(sigc::mem_fun(this, &BlockAllocator::block_reserved)); @@ -59,6 +60,7 @@ void BlockAllocator::set_active(bool a) { release_blocks_end(cur_blocks_end); pending_block = 0; + reserve_pending = false; } } @@ -186,6 +188,15 @@ bool BlockAllocator::is_block_current(const Block &block) const return find_if(blocks.begin(), end, BlockMatch(block))!=cur_blocks_end; } +void BlockAllocator::tick() +{ + if(reserve_pending) + { + reserve_pending = false; + reserve_more(); + } +} + void BlockAllocator::reserve_more() { if(blocks.empty()) @@ -483,13 +494,13 @@ void BlockAllocator::turnout_path_changing(Track &track) void BlockAllocator::turnout_path_changed(Track &track) { if(&track.get_block()==pending_block && !reserving) - reserve_more(); + reserve_pending = true; } void BlockAllocator::block_reserved(Block &block, const Train *tr) { if(&block==pending_block && !tr && !reserving) - reserve_more(); + reserve_pending = true; } void BlockAllocator::sensor_state_changed(Sensor &sensor, Sensor::State state) @@ -508,7 +519,7 @@ void BlockAllocator::sensor_state_changed(Sensor &sensor, Sensor::State state) advance_front(next_sensor); if(active) - reserve_more(); + reserve_pending = true; } else if(!is_block_current(*block)) train.get_layout().emergency(block, "Sensor for "+train.get_name()+" triggered out of order");