]> git.tdb.fi Git - r2c2.git/blob - source/3d/trackcircuit.cpp
Limit timestep to 10 milliseconds
[r2c2.git] / source / 3d / trackcircuit.cpp
1 #include "libr2c2/blockiter.h"
2 #include "libr2c2/trackiter.h"
3 #include "layout.h"
4 #include "path.h"
5 #include "track.h"
6 #include "trackcircuit.h"
7
8 using namespace std;
9 using namespace Msp;
10
11 namespace R2C2 {
12
13 TrackCircuit3D::TrackCircuit3D(Layout3D &l, TrackCircuit &tc):
14         Utility3D(l),
15         track_circuit(tc)
16 {
17         Block *block = track_circuit.get_block();
18         TrackIter iter = BlockIter(block, 0).track_iter();
19         for(; (iter && &iter->get_block()==block); iter=iter.next())
20         {
21                 Path3D *path = new Path3D(layout.get_3d(*iter));
22                 paths.push_back(path);
23                 path->set_side(iter.entry()*2-1);
24         }
25
26         track_circuit.signal_state_changed.connect(sigc::mem_fun(this, &TrackCircuit3D::state_changed));
27         state_changed(track_circuit.get_state());
28 }
29
30 void TrackCircuit3D::state_changed(Sensor::State state)
31 {
32         GL::Color color;
33         if(state>=Sensor::ACTIVE)
34                 color = GL::Color(0.3f, 0.8f, 0.0f);
35         else if(state>Sensor::INACTIVE)
36                 color = GL::Color(0.6f, 0.5f, 0.0f);
37         else
38                 color = GL::Color(0.0f, 0.3f, 0.6f);
39
40         for(list<Path3D *>::const_iterator i=paths.begin(); i!=paths.end(); ++i)
41                 (*i)->set_color(color);
42 }
43
44 } // namespace R2C2