]> git.tdb.fi Git - r2c2.git/blob - source/3d/signal.cpp
Add basic support for signals
[r2c2.git] / source / 3d / signal.cpp
1 #include <msp/gl/renderer.h>
2 #include "catalogue.h"
3 #include "layout.h"
4 #include "signal.h"
5 #include "signaltype.h"
6
7 using namespace Msp;
8
9 namespace R2C2 {
10
11 Signal3D::Signal3D(Layout3D &l, Signal &s):
12         GL::ObjectInstance(l.get_catalogue().get_signal(s.get_type()).get_object()),
13         layout(l),
14         signal(s)
15 {
16         layout.add_signal(*this);
17         layout.get_scene().add(*this);
18 }
19
20 Signal3D::~Signal3D()
21 {
22         layout.remove_signal(*this);
23         layout.get_scene().remove(*this);
24 }
25
26 void Signal3D::setup_render(GL::Renderer &renderer, const GL::Tag &) const
27 {
28         const Vector &pos = signal.get_position();
29         renderer.matrix_stack() *= GL::Matrix::translation(pos.x, pos.y, pos.z);
30         renderer.matrix_stack() *= GL::Matrix::rotation(signal.get_direction(), 0, 0, 1);
31         // XXX Use track gauge, configure signal side
32         renderer.matrix_stack() *= GL::Matrix::translation(0, -0.035, 0);
33 }
34
35 } // namespace R2C2