X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Flayout.cpp;h=bc149dff1f904a014a0518052dacb36818a62fe6;hb=065d35f5f86a5b9cda95736f59e63845e0bb6fa6;hp=70a9f106849d26ec2f9b59ad0eb2d5b8d13a2169;hpb=1709c7afe41a96b079f3d34c9625d1a790dcc805;p=r2c2.git diff --git a/source/libr2c2/layout.cpp b/source/libr2c2/layout.cpp index 70a9f10..bc149df 100644 --- a/source/libr2c2/layout.cpp +++ b/source/libr2c2/layout.cpp @@ -414,7 +414,7 @@ void Layout::remove_train(Train &t) signal_train_removed.emit(t); } -void Layout::tick() +void Layout::tick(float speed) { if(driver) driver->tick(); @@ -425,6 +425,7 @@ void Layout::tick() dt = t-last_tick; last_tick = t; + dt *= speed; unsigned count = dt/(10*Time::msec)+1; dt /= count; while(count--) @@ -564,7 +565,19 @@ void Layout::sensor_state_changed(Sensor &sensor, Sensor::State state) void Layout::block_reserved(Block &block, Train *train) { if(emitting_block_reserved) + { + if(!train) + { + for(deque::iterator i=block_reserve_queue.end(); i!=block_reserve_queue.begin(); ) + if((--i)->block==&block) + { + block_reserve_queue.erase(i); + return; + } + } + block_reserve_queue.push_back(BlockReservation(block, train)); + } else { SetFlag setf(emitting_block_reserved); @@ -573,7 +586,7 @@ void Layout::block_reserved(Block &block, Train *train) { BlockReservation br = block_reserve_queue.front(); block_reserve_queue.pop_front(); - signal_block_reserved.emit(br.block, br.train); + signal_block_reserved.emit(*br.block, br.train); } } } @@ -633,7 +646,7 @@ void Layout::Storage::del() Layout::BlockReservation::BlockReservation(Block &b, Train *t): - block(b), + block(&b), train(t) { }