]> git.tdb.fi Git - r2c2.git/blob - source/3d/layout.h
76f1b91d7a3c21ee577c183c732f28151415df5e
[r2c2.git] / source / 3d / layout.h
1 #ifndef R2C2_3D_LAYOUT_H_
2 #define R2C2_3D_LAYOUT_H_
3
4 #include <sigc++/trackable.h>
5 #include <msp/gl/instancescene.h>
6 #include <msp/gl/light.h>
7 #include <msp/gl/lighting.h>
8 #include <msp/gl/simplescene.h>
9 #include "libr2c2/layout.h"
10 #include "catalogue.h"
11
12 namespace R2C2 {
13
14 class Object3D;
15 class Track3D;
16 class Vehicle3D;
17
18 class Layout3D: public sigc::trackable
19 {
20 public:
21         typedef std::map<Track *, Track3D *> TrackMap;
22         typedef std::map<Vehicle *, Vehicle3D *> VehicleMap;
23
24 private:
25         Layout &layout;
26         Catalogue3D catalogue;
27         TrackMap tracks;
28         VehicleMap vehicles;
29         Msp::GL::InstanceScene scene;
30         Msp::GL::SimpleScene ep_scene;
31         Msp::GL::InstanceScene path_scene;
32         Msp::GL::Light sun;
33         Msp::GL::Lighting lighting;
34
35 public:
36         Layout3D(Layout &);
37         ~Layout3D();
38
39         Layout &get_layout() const { return layout; }
40         const Catalogue3D &get_catalogue() const { return catalogue; }
41         void get_bounds(Vector &, Vector &) const;
42
43         void add_track(Track3D &);
44         void remove_track(Track3D &);
45         const TrackMap &get_tracks() const { return tracks; }
46         Track3D &get_track(Track &) const;
47
48         void add_vehicle(Vehicle3D &);
49         void remove_vehicle(Vehicle3D &);
50         Vehicle3D &get_vehicle(Vehicle &) const;
51
52         Msp::GL::Scene &get_scene() { return scene; }
53         Msp::GL::Scene &get_endpoint_scene() { return ep_scene; }
54         Msp::GL::Scene &get_path_scene() { return path_scene; }
55         const Msp::GL::Lighting &get_lighting() const { return lighting; }
56
57 private:
58         void track_added(Track &);
59         void track_removed(Track &);
60         void vehicle_added(Vehicle &);
61         void vehicle_removed(Vehicle &);
62 };
63
64 } // namespace R2C2
65
66 #endif
67