+#include <msp/core/maputils.h>
+#include <msp/strings/format.h>
#include "vehicletype.h"
using namespace std;
namespace R2C2 {
VehicleType::VehicleType(const ArticleNumber &an):
- art_nr(an),
+ ObjectType(an),
locomotive(false),
swap_direction(false),
length(0),
width(0),
- height(0)
+ height(0),
+ rotate_object(false)
{ }
unsigned VehicleType::get_max_function() const
const VehicleType::Axle &VehicleType::get_fixed_axle(unsigned i) const
{
if(i>=axles.size())
- throw InvalidParameterValue("Axle index out of range");
+ throw out_of_range("VehicleType::get_fixed_axle");
return axles[i];
}
const VehicleType::Bogie &VehicleType::get_bogie(unsigned i) const
{
if(i>=bogies.size())
- throw InvalidParameterValue("Axle index out of range");
+ throw out_of_range("VehicleType::get_bogie");
return bogies[i];
}
const VehicleType::Axle &VehicleType::get_bogie_axle(unsigned i, unsigned j) const
{
if(i>=bogies.size())
- throw InvalidParameterValue("Axle index out of range");
+ throw out_of_range("VehicleType::get_bogie_axle");
if(j>=bogies[i].axles.size())
- throw InvalidParameterValue("Axle index out of range");
+ throw out_of_range("VehicleType::get_bogie_axle");
return bogies[i].axles[j];
}
const VehicleType::Rod &VehicleType::get_rod(unsigned i) const
{
if(i>=rods.size())
- throw InvalidParameterValue("Rod index out of range");
+ throw out_of_range("VehicleType::get_rod");
return rods[i];
}
VehicleType::Loader::Loader(VehicleType &vt):
- DataFile::ObjectLoader<VehicleType>(vt)
+ DataFile::DerivedObjectLoader<VehicleType, ObjectType::Loader>(vt)
{
add("axle", &Loader::axle);
add("bogie", &Loader::bogie);
add("height", &Loader::height);
add("length", &Loader::length);
add("locomotive", &VehicleType::locomotive);
- add("name", &VehicleType::name);
add("object", &VehicleType::object);
add("rod", &Loader::rod);
+ add("rotate_object", &VehicleType::rotate_object);
add("swap_direction", &VehicleType::swap_direction);
add("width", &Loader::width);
}
void VehicleType::Rod::Loader::connect(const string &t, float px, float pz, float ox, float oz)
{
- map<string, unsigned>::const_iterator i = tags.find(t);
- if(i==tags.end())
- throw KeyError("Unknown rod tag", t);
- obj.connect_index = i->second;
+ obj.connect_index = get_item(tags, t);
obj.connect_point = Vector(px/1000, 0, pz/1000);
obj.connect_offset = Vector(ox/1000, 0, oz/1000);
}
void VehicleType::Rod::Loader::pivot_rod(const string &t)
{
- map<string, unsigned>::const_iterator i = tags.find(t);
- if(i==tags.end())
- throw KeyError("Unknown rod tag", t);
+ obj.pivot_index = get_item(tags, t);
obj.pivot = ROD;
- obj.pivot_index = i->second;
}
void VehicleType::Rod::Loader::position(float x, float y, float z)
else if(s=="SLIDE_X")
l = VehicleType::Rod::SLIDE_X;
else
- throw LexicalError("Invalid value for Rod::Limit");
+ throw lexical_error(format("conversion of '%s' to Rod::Limit", s));
}
} // namespace R2C2