X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Ftrackcircuit.cpp;fp=source%2F3d%2Ftrackcircuit.cpp;h=d74ee20fa6a9f7a303c969e29260f75f6dd6d05f;hb=5116fff210cdc3f0fbdae13046cc60450aad5e8f;hp=0000000000000000000000000000000000000000;hpb=7fac28fcb5afb17eff7c459474e4cf884a02719c;p=r2c2.git diff --git a/source/3d/trackcircuit.cpp b/source/3d/trackcircuit.cpp new file mode 100644 index 0000000..d74ee20 --- /dev/null +++ b/source/3d/trackcircuit.cpp @@ -0,0 +1,44 @@ +#include "libr2c2/blockiter.h" +#include "libr2c2/trackiter.h" +#include "layout.h" +#include "path.h" +#include "track.h" +#include "trackcircuit.h" + +using namespace std; +using namespace Msp; + +namespace R2C2 { + +TrackCircuit3D::TrackCircuit3D(Layout3D &l, TrackCircuit &tc): + Utility3D(l), + track_circuit(tc) +{ + Block *block = track_circuit.get_block(); + TrackIter iter = BlockIter(block, 0).track_iter(); + for(; (iter && &iter->get_block()==block); iter=iter.next()) + { + Path3D *path = new Path3D(layout.get(*iter)); + paths.push_back(path); + path->set_side(iter.entry()*2-1); + } + + track_circuit.signal_state_changed.connect(sigc::mem_fun(this, &TrackCircuit3D::state_changed)); + state_changed(track_circuit.get_state()); +} + +void TrackCircuit3D::state_changed(Sensor::State state) +{ + GL::Color color; + if(state>=Sensor::ACTIVE) + color = GL::Color(0.3f, 0.8f, 0.0f); + else if(state>Sensor::INACTIVE) + color = GL::Color(0.6f, 0.5f, 0.0f); + else + color = GL::Color(0.0f, 0.3f, 0.6f); + + for(list::const_iterator i=paths.begin(); i!=paths.end(); ++i) + (*i)->set_color(color); +} + +} // namespace R2C2