]> git.tdb.fi Git - r2c2.git/blob - source/3d/track.h
Render tracks through GL::Objects
[r2c2.git] / source / 3d / track.h
1 /* $Id$
2
3 This file is part of R²C²
4 Copyright © 2006-2010 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef R2C2_3D_TRACK_H_
9 #define R2C2_3D_TRACK_H_
10
11 #include <list>
12 #include <msp/gl/matrix.h>
13 #include <msp/gl/objectinstance.h>
14 #include "libr2c2/track.h"
15 #include "libr2c2/trackpart.h"
16 #include "object.h"
17
18 namespace R2C2 {
19
20 class Endpoint3D;
21 class Layout3D;
22 class Path3D;
23 class TrackType3D;
24
25 class Track3D: public Object3D, public Msp::GL::ObjectInstance
26 {
27 private:
28         Layout3D &layout;
29         Track &track;
30         const TrackType3D &type;
31         std::vector<Endpoint3D *> endpoints;
32         Path3D *path;
33
34 public:
35         Track3D(Layout3D &, Track &);
36         ~Track3D();
37
38         Layout3D &get_layout() const { return layout; }
39         Track &get_track() const { return track; }
40         const TrackType3D &get_type() const { return type; }
41         void get_bounds(float, Point &, Point &) const;
42         Path3D &get_path() { return *path; }
43
44         virtual Point get_node() const;
45         virtual bool is_visible() const { return true; }
46
47         Msp::GL::Matrix get_matrix() const;
48         virtual void setup_render(const Msp::GL::Tag &) const;
49         virtual void finish_render(const Msp::GL::Tag &) const;
50 };
51
52 } // namespace R2C2
53
54 #endif