X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrain.cpp;h=72714d730032094f5ae5419c24ffdef38a13ff1e;hb=54392d65e2053d1eacb4cfcc435f1013993f2973;hp=aa6cc481855ff3655ad2e29ff7ad65bdc5db66d1;hpb=ca9d278f9472206ad9a01190dcef9f0eb1bcc274;p=r2c2.git diff --git a/source/libr2c2/train.cpp b/source/libr2c2/train.cpp index aa6cc48..72714d7 100644 --- a/source/libr2c2/train.cpp +++ b/source/libr2c2/train.cpp @@ -192,26 +192,22 @@ void Train::ai_message(const TrainAI::Message &msg) (*i)->message(msg); } -void Train::place(Block &block, unsigned entry) +void Train::place(const BlockIter &block) { + if(!block) + throw invalid_argument("Train::place"); if(controller->get_speed()) throw logic_error("moving"); set_active(false); accurate_position = false; - allocator.start_from(block, entry); + allocator.start_from(block); if(reverse) - { - TrackIter track = BlockIter(&block, entry).reverse().track_iter(); - vehicles.front()->place(*track, track.entry(), 0, Vehicle::FRONT_BUFFER); - } + vehicles.front()->place(block.reverse().track_iter(), 0, Vehicle::FRONT_BUFFER); else - { - const Block::Endpoint &bep = block.get_endpoint(entry); - vehicles.back()->place(*bep.track, bep.track_ep, 0, Vehicle::BACK_BUFFER); - } + vehicles.back()->place(block.track_iter(), 0, Vehicle::BACK_BUFFER); } void Train::unplace() @@ -259,7 +255,7 @@ void Train::free_noncritical_blocks() Vehicle &veh = *(reverse ? vehicles.back() : vehicles.front()); - TrackIter track(veh.get_track(), veh.get_entry()); + TrackIter track = veh.get_track_iter(); BlockIter block = allocator.first(); const BlockIter &last_cur = allocator.last_current(); const BlockIter &last = allocator.last(); @@ -519,10 +515,10 @@ void Train::block_state_changed(Block &block, Block::State state) if(reverse) { track = track.flip(); - vehicles.back()->place(*track, track.entry(), 0, Vehicle::BACK_AXLE); + vehicles.back()->place(track, 0, Vehicle::BACK_AXLE); } else - vehicles.front()->place(*track, track.entry(), 0, Vehicle::FRONT_AXLE); + vehicles.front()->place(track, 0, Vehicle::FRONT_AXLE); } if(i==last_cur) @@ -550,7 +546,7 @@ float Train::get_reserved_distance_until(const Block *until_block, bool back) co Vehicle &veh = *(reverse!=back ? vehicles.back() : vehicles.front()); const VehicleType &vtype = veh.get_type(); - TrackIter track(veh.get_track(), veh.get_entry()); + TrackIter track = veh.get_track_iter(); if(!track) // XXX Probably unnecessary return 0; @@ -626,7 +622,7 @@ void Train::Loader::finish() { TrackIter track = obj.allocator.first().track_iter(); float offset = 2*obj.layout.get_catalogue().get_scale(); - obj.vehicles.back()->place(*track, track.entry(), offset, Vehicle::BACK_BUFFER); + obj.vehicles.back()->place(track, offset, Vehicle::BACK_BUFFER); } }