X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fsensor.cpp;h=618a06b7b609c6ac8a930bc62c197bb4ac2db768;hb=5a02a4f42dfc5dc6b4daef5fc02431bdfb2968d8;hp=1b7e8cc10c08881a49a22743684046b64683a9fe;hpb=59bae8acd679127602cf35d22bcd37e316a5a056;p=r2c2.git diff --git a/source/libr2c2/sensor.cpp b/source/libr2c2/sensor.cpp index 1b7e8cc..618a06b 100644 --- a/source/libr2c2/sensor.cpp +++ b/source/libr2c2/sensor.cpp @@ -9,17 +9,30 @@ 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); + if(layout.has_driver() && address) + layout.get_driver().remove_sensor(address); + layout.remove(*this); +} + +void Sensor::set_address(unsigned a) +{ + Driver *driver = (layout.has_driver() ? &layout.get_driver() : 0); + if(driver && address) + driver->remove_sensor(address); + address = a; + if(driver && address) + driver->add_sensor(address); } void Sensor::tick(const Time::TimeDelta &dt) @@ -43,13 +56,13 @@ void Sensor::event(unsigned a, bool s) { if(a==address) { - if(s && stateMAYBE_INACTIVE) + else if(s==invert && state>MAYBE_INACTIVE) { state = MAYBE_INACTIVE; state_confirm_timeout = 700*Time::msec;