X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrain.cpp;h=9cb032ec3f4a9a5663eece64a3048b76a103c10e;hb=0443ca05cbd306487131f5f5bd3b91181ae4a733;hp=b5f600e09e3a58a9744cbef5e7844cf57252aa78;hpb=14b71235fbf3406ed88fab9125ea646eb6a9b702;p=r2c2.git diff --git a/source/libr2c2/train.cpp b/source/libr2c2/train.cpp index b5f600e..9cb032e 100644 --- a/source/libr2c2/train.cpp +++ b/source/libr2c2/train.cpp @@ -6,6 +6,7 @@ #include #include #include "aicontrol.h" +#include "beamgate.h" #include "block.h" #include "catalogue.h" #include "driver.h" @@ -475,6 +476,25 @@ void Train::sensor_state_changed(Sensor &sensor, Sensor::State state) vehicles.front()->place(track, 0, Vehicle::FRONT_AXLE); } } + else if(BeamGate *gate = dynamic_cast(&sensor)) + { + if(!advancing && vehicles.front()->get_track()) + { + TrackIter track = allocator.iter_for(*block).track_iter(); + for(; (track && &track->get_block()==block); track=track.next()) + if(track.track()==gate->get_track()) + { + if(reverse) + track = track.reverse(); + float offset = gate->get_offset_from_endpoint(track.entry()); + if(reverse) + vehicles.back()->place(track, offset, Vehicle::BACK_BUFFER); + else + vehicles.front()->place(track, offset, Vehicle::FRONT_BUFFER); + break; + } + } + } } void Train::halt_event(bool h) @@ -490,7 +510,7 @@ float Train::get_reserved_distance_until(const Block *until_block) const Vehicle &veh = *(reverse ? vehicles.back() : vehicles.front()); - TrackIter track = veh.get_track_iter(); + TrackIter track = veh.get_track_iter().track_iter(); if(!track) // XXX Probably unnecessary return 0;