]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/vehicletype.cpp
Fix remaining exception class names
[r2c2.git] / source / 3d / vehicletype.cpp
index b283eddebe896b1307881fef7b96098117dd64b1..620e6d807a8332d2f02493a0105139b83cf953c2 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of the MSP Märklin suite
-Copyright © 2010  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #include <msp/gl/meshbuilder.h>
 #include <msp/gl/technique.h>
 #include <msp/gl/texture2d.h>
@@ -29,9 +22,9 @@ T get(const map<string, string> &params, const string &key, T def = T())
 
 }
 
-namespace Marklin {
+namespace R2C2 {
 
-VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t):
+VehicleType3D::VehicleType3D(Catalogue3D &c, const VehicleType &t):
        catalogue(c),
        type(t),
        body_object(0),
@@ -39,7 +32,7 @@ VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t):
 {
        body_object = get_object(type.get_object());
 
-       const vector<VehicleType::Axle> &axles = type.get_axles();
+       const vector<VehicleType::Axle> &axles = type.get_fixed_axles();
        for(vector<VehicleType::Axle>::const_iterator i=axles.begin(); i!=axles.end(); ++i)
                axle_objects[0].push_back(get_object(i->object));
 
@@ -51,6 +44,10 @@ VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t):
                for(vector<VehicleType::Axle>::const_iterator j=i->axles.begin(); j!=i->axles.end(); ++j)
                        axle_objects.back().push_back(get_object(j->object));
        }
+
+       const vector<VehicleType::Rod> &rods = type.get_rods();
+       for(vector<VehicleType::Rod>::const_iterator i=rods.begin(); i!=rods.end(); ++i)
+               rod_objects.push_back(get_object(i->object));
 }
 
 VehicleType3D::~VehicleType3D()
@@ -59,29 +56,36 @@ VehicleType3D::~VehicleType3D()
                delete i->second;
 }
 
-const GL::Object *VehicleType3D::get_axle_object(unsigned i) const
+const GL::Object *VehicleType3D::get_fixed_axle_object(unsigned i) const
 {
        if(i>=axle_objects[0].size())
-               throw InvalidParameterValue("Axle index out of range");
+               throw out_of_range("VehicleType3D::get_fixed_axle_object");
        return axle_objects[0][i];
 }
 
 const GL::Object *VehicleType3D::get_bogie_object(unsigned i) const
 {
        if(i>=bogie_objects.size())
-               throw InvalidParameterValue("Bogie index out of range");
+               throw out_of_range("VehicleType3D::get_bogie_object");
        return bogie_objects[i];
 }
 
 const GL::Object *VehicleType3D::get_bogie_axle_object(unsigned i, unsigned j) const
 {
        if(i>=bogie_objects.size())
-               throw InvalidParameterValue("Bogie index out of range");
+               throw out_of_range("VehicleType3D::get_bogie_axle_object");
        if(j>=axle_objects[i+1].size())
-               throw InvalidParameterValue("Axle index out of range");
+               throw out_of_range("VehicleType3D::get_bogie_axle_object");
        return axle_objects[i+1][j];
 }
 
+const GL::Object *VehicleType3D::get_rod_object(unsigned i) const
+{
+       if(i>=rod_objects.size())
+               throw out_of_range("VehicleType3D::get_rod_object");
+       return rod_objects[i];
+}
+
 GL::Object *VehicleType3D::get_object(const string &name)
 {
        if(name.empty())
@@ -133,10 +137,7 @@ GL::Object *VehicleType3D::get_object(const string &name)
                        }
                }
                else
-               {
-                       ptr = new GL::Object;
-                       DataFile::load(*ptr, name);
-               }
+                       return catalogue.get<GL::Object>(name);
        }
        return ptr;
 }
@@ -154,7 +155,7 @@ GL::Technique *VehicleType3D::create_technique(const map<string, string> &params
        mat->set_diffuse(GL::Color(1));
        pass.set_material(mat);
        GL::Texture2D *tex = new GL::Texture2D;
-       tex->storage(GL::RGB, 2, 1, 0);
+       tex->storage(GL::RGB, 2, 1);
        tex->set_min_filter(GL::NEAREST);
        tex->set_mag_filter(GL::NEAREST);
        unsigned char data[6] = { color>>16, color>>8, color, color2>>16, color2>>8, color2 };
@@ -342,4 +343,4 @@ GL::Mesh *VehicleType3D::create_flat_wagon(const map<string, string> &params)
        return mesh;
 }
 
-} // namespace Marklin
+} // namespace R2C2