#include "driver.h"
#include "layout.h"
#include "route.h"
+#include "trackcircuit.h"
#include "trackiter.h"
#include "tracktype.h"
id(0),
sensor_id(start.get_sensor_id()),
turnout_id(start.get_turnout_id()),
- state(INACTIVE),
train(0)
{
tracks.insert(&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);
}
}
layout.remove_block(*this);
+
+ delete sensor;
}
bool Block::has_track(Track &t) const
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;
}
}
-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),