]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/sensor.cpp
Ignore path change events on currently occupied blocks
[r2c2.git] / source / libr2c2 / sensor.cpp
index 1b7e8cc10c08881a49a22743684046b64683a9fe..c31c795f12986e32fbd4f23e95c885e03d1aff2f 100644 (file)
@@ -9,17 +9,25 @@ namespace R2C2 {
 Sensor::Sensor(Layout &l):
        layout(l),
        address(0),
+       invert(false),
        state(INACTIVE)
 {
        if(layout.has_driver())
                layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Sensor::event));
 
-       layout.add_sensor(*this);
+       layout.add(*this);
 }
 
 Sensor::~Sensor()
 {
-       layout.remove_sensor(*this);
+       layout.remove(*this);
+}
+
+void Sensor::set_address(unsigned a)
+{
+       address = a;
+       if(layout.has_driver())
+               layout.get_driver().add_sensor(address);
 }
 
 void Sensor::tick(const Time::TimeDelta &dt)
@@ -43,13 +51,13 @@ void Sensor::event(unsigned a, bool s)
 {
        if(a==address)
        {
-               if(s && state<MAYBE_ACTIVE)
+               if(s!=invert && state<MAYBE_ACTIVE)
                {
                        state = MAYBE_ACTIVE;
                        state_confirm_timeout = 300*Time::msec;
                        signal_state_changed.emit(state);
                }
-               else if(!s && state>MAYBE_INACTIVE)
+               else if(s==invert && state>MAYBE_INACTIVE)
                {
                        state = MAYBE_INACTIVE;
                        state_confirm_timeout = 700*Time::msec;