]> git.tdb.fi Git - r2c2.git/blob - source/3d/signal.cpp
8e0fea841aee940b62687bf03c1749fadbc807d8
[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         Object3D(s),
13         GL::ObjectInstance(l.get_catalogue().get_signal(s.get_type()).get_object()),
14         layout(l),
15         signal(s)
16 {
17         layout.add_signal(*this);
18         layout.get_scene().add(*this);
19 }
20
21 Signal3D::~Signal3D()
22 {
23         layout.remove_signal(*this);
24         layout.get_scene().remove(*this);
25 }
26
27 Vector Signal3D::get_node() const
28 {
29         return matrix*Vector(0, -0.035, 0.13);
30 }
31
32 void Signal3D::setup_render(GL::Renderer &renderer, const GL::Tag &) const
33 {
34         renderer.matrix_stack() *= matrix;
35         // XXX Use track gauge, configure signal side
36         renderer.matrix_stack() *= GL::Matrix::translation(0, -0.035, 0);
37 }
38
39 } // namespace R2C2