X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fblock.cpp;fp=source%2Flibr2c2%2Fblock.cpp;h=6103509f3647ce053d7c653f3eae28ab3a2b3ca9;hb=59bae8acd679127602cf35d22bcd37e316a5a056;hp=386f2378a3b20011733cb54a17880cdd64a2d50b;hpb=5c1ddd2f213af3fea15237e02f7da112c0abba36;p=r2c2.git diff --git a/source/libr2c2/block.cpp b/source/libr2c2/block.cpp index 386f237..6103509 100644 --- a/source/libr2c2/block.cpp +++ b/source/libr2c2/block.cpp @@ -4,6 +4,7 @@ #include "driver.h" #include "layout.h" #include "route.h" +#include "trackcircuit.h" #include "trackiter.h" #include "tracktype.h" @@ -17,7 +18,6 @@ Block::Block(Layout &l, Track &start): id(0), sensor_id(start.get_sensor_id()), turnout_id(start.get_turnout_id()), - state(INACTIVE), train(0) { tracks.insert(&start); @@ -55,8 +55,7 @@ Block::Block(Layout &l, Track &start): find_paths(endpoints[i].track_iter(), path); } - if(sensor_id && layout.has_driver()) - layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Block::sensor_event)); + sensor = new TrackCircuit(layout, *this); layout.add_block(*this); } @@ -76,6 +75,8 @@ Block::~Block() } layout.remove_block(*this); + + delete sensor; } bool Block::has_track(Track &t) const @@ -168,23 +169,6 @@ bool Block::reserve(Train *t) return false; } -void Block::tick(const Time::TimeDelta &dt) -{ - if(state_confirm_timeout) - { - state_confirm_timeout -= dt; - if(state_confirm_timeout<=Time::zero) - { - if(state==MAYBE_INACTIVE) - state = INACTIVE; - else if(state==MAYBE_ACTIVE) - state = ACTIVE; - state_confirm_timeout = Time::zero; - signal_state_changed.emit(state); - } - } -} - void Block::find_paths(const TrackIter &track, unsigned path) { unsigned mask = track.endpoint().paths; @@ -227,25 +211,6 @@ void Block::determine_id() } } -void Block::sensor_event(unsigned addr, bool s) -{ - if(addr==sensor_id) - { - if(s && stateMAYBE_INACTIVE) - { - state = MAYBE_INACTIVE; - state_confirm_timeout = 700*Time::msec; - signal_state_changed.emit(state); - } - } -} - Block::Endpoint::Endpoint(Track *t, unsigned e): track(t),