]> git.tdb.fi Git - r2c2.git/blob - source/3d/vehicletype.h
Don't crash if a train has no router
[r2c2.git] / source / 3d / vehicletype.h
1 #ifndef R2C2_3D_VEHICLETYPE_H_
2 #define R2C2_3D_VEHICLETYPE_H_
3
4 #include <msp/gl/mesh.h>
5 #include <msp/gl/object.h>
6 #include "libr2c2/vehicletype.h"
7 #include "objecttype.h"
8
9 namespace R2C2 {
10
11 class VehicleType3D: public ObjectType3D
12 {
13 private:
14         const VehicleType &type;
15         std::map<std::string, Msp::GL::Object *> objects;
16         Msp::GL::Object *body_object;
17         std::vector<Msp::GL::Object *> bogie_objects;
18         std::vector<Msp::GL::Object *> axle_objects;
19         std::vector<Msp::GL::Object *> rod_objects;
20
21 public:
22         VehicleType3D(Catalogue3D &, const VehicleType &);
23         ~VehicleType3D();
24
25         const Msp::GL::Object *get_body_object() const { return body_object; }
26         const Msp::GL::Object *get_axle_object(unsigned) const;
27         const Msp::GL::Object *get_bogie_object(unsigned) const;
28         const Msp::GL::Object *get_rod_object(unsigned) const;
29 private:
30         Msp::GL::Object *get_object(const std::string &);
31         Msp::GL::Technique *create_technique(const std::map<std::string, std::string> &);
32         Msp::GL::Mesh *create_open_wagon(const std::map<std::string, std::string> &);
33         Msp::GL::Mesh *create_covered_wagon(const std::map<std::string, std::string> &);
34         Msp::GL::Mesh *create_flat_wagon(const std::map<std::string, std::string> &);
35 };
36
37 } // namespace R2C2
38
39 #endif