X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrain.cpp;h=b1664633bc75e06dbb13fbcb92b1fadcea8945f5;hb=7c98e23312cf01ce1fa6c1ffd8e36c22d2fa6110;hp=95b78b567c9498ba687c05bbd445082d252ad065;hpb=18c529dfdd34e07f4f6021151ddce29fa85437bc;p=r2c2.git diff --git a/source/libr2c2/train.cpp b/source/libr2c2/train.cpp index 95b78b5..b166463 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() @@ -522,14 +530,14 @@ float Train::get_reserved_distance_until(const Block *until_block) const if(reverse) track = track.reverse(); else - result = track->get_type().get_path_length(track->get_active_path())-result; + result = track->get_path_length()-result; result -= veh.get_type().get_length()/2; BlockIter block = track.block_iter(); // Count remaining distance in the vehicle's current block for(track=track.next(); &track->get_block()==&*block; track=track.next()) - result += track->get_type().get_path_length(track->get_active_path()); + result += track->get_path_length(); const BlockIter &last = allocator.last(); if(&*block==&*last) @@ -594,7 +602,7 @@ void Train::Loader::router() void Train::Loader::vehicle(ArticleNumber art_nr) { - const VehicleType &vtype = obj.layout.get_catalogue().get_vehicle(art_nr); + const VehicleType &vtype = obj.layout.get_catalogue().get(art_nr); Vehicle *veh = new Vehicle(obj.layout, vtype); obj.vehicles.back()->attach_back(*veh); obj.vehicles.push_back(veh);