]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/block.cpp
Handle sensors in a separate class
[r2c2.git] / source / libr2c2 / block.cpp
index 386f2378a3b20011733cb54a17880cdd64a2d50b..6103509f3647ce053d7c653f3eae28ab3a2b3ca9 100644 (file)
@@ -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 && state<MAYBE_ACTIVE)
-               {
-                       state = MAYBE_ACTIVE;
-                       state_confirm_timeout = 300*Time::msec;
-                       signal_state_changed.emit(state);
-               }
-               else if(!s && state>MAYBE_INACTIVE)
-               {
-                       state = MAYBE_INACTIVE;
-                       state_confirm_timeout = 700*Time::msec;
-                       signal_state_changed.emit(state);
-               }
-       }
-}
-
 
 Block::Endpoint::Endpoint(Track *t, unsigned e):
        track(t),