-/* $Id$
-
-This file is part of R²C²
-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>
namespace R2C2 {
-VehicleType3D::VehicleType3D(const Catalogue3D &c, const VehicleType &t):
+VehicleType3D::VehicleType3D(Catalogue3D &c, const VehicleType &t):
catalogue(c),
type(t),
body_object(0),
{
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));
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()
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())
}
}
else
- {
- ptr = new GL::Object;
- DataFile::load(*ptr, name);
- }
+ return catalogue.get<GL::Object>(name);
}
return ptr;
}
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 };