X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrain.cpp;fp=source%2Flibr2c2%2Ftrain.cpp;h=07461b80a9558ecc4000c176bf73565e4c6d922b;hb=d051af7264ee62d03473f1929414e262e918c30a;hp=95b78b567c9498ba687c05bbd445082d252ad065;hpb=77db8741430ca462e3b624dd42d5ead96be7f264;p=r2c2.git diff --git a/source/libr2c2/train.cpp b/source/libr2c2/train.cpp index 95b78b5..07461b8 100644 --- a/source/libr2c2/train.cpp +++ b/source/libr2c2/train.cpp @@ -185,21 +185,29 @@ void Train::ai_message(const TrainAI::Message &msg) (*i)->message(msg); } -void Train::place(const BlockIter &block) +bool Train::place(const BlockIter &block) { if(!block) throw invalid_argument("Train::place"); if(controller->get_speed()) throw logic_error("moving"); - allocator.start_from(block); accurate_position = false; last_entry_block = BlockIter(); - if(reverse) - vehicles.front()->place(block.reverse().track_iter(), VehiclePlacement::FRONT_BUFFER); + if(allocator.start_from(block)) + { + if(reverse) + vehicles.front()->place(block.reverse().track_iter(), VehiclePlacement::FRONT_BUFFER); + else + vehicles.back()->place(block.track_iter(), VehiclePlacement::BACK_BUFFER); + return true; + } else - vehicles.back()->place(block.track_iter(), VehiclePlacement::BACK_BUFFER); + { + unplace(); + return false; + } } void Train::unplace()