#include "vehicletype.h"
+using namespace std;
using namespace Msp;
namespace Marklin {
-VehicleType::VehicleType(unsigned n):
- art_nr(n),
+VehicleType::VehicleType(const ArticleNumber &an):
+ art_nr(an),
+ locomotive(false),
length(0),
width(0),
height(0)
{ }
+unsigned VehicleType::get_max_function() const
+{
+ if(functions.empty())
+ return 0;
+ return (--functions.end())->first;
+}
+
+float VehicleType::get_front_axle_offset() const
+{
+ float front = length/2;
+ if(!axles.empty())
+ front = axles.front().position;
+ if(!bogies.empty())
+ {
+ const Bogie &bogie = bogies.front();
+ front = max(front, bogie.position+bogie.axles.front().position);
+ }
+ return front;
+}
+
+float VehicleType::get_back_axle_offset() const
+{
+ float back = -length/2;
+ if(!axles.empty())
+ back = axles.back().position;
+ if(!bogies.empty())
+ {
+ const Bogie &bogie = bogies.back();
+ back = min(back, bogie.position+bogie.axles.back().position);
+ }
+ return back;
+}
+
+
+VehicleType::Axle::Axle():
+ position(0),
+ wheel_dia(0),
+ powered(false)
+{ }
+
+
+VehicleType::Bogie::Bogie():
+ position(0),
+ rotate_object(false)
+{ }
+
VehicleType::Loader::Loader(VehicleType &vt):
DataFile::ObjectLoader<VehicleType>(vt)
{
- add("axle", &Loader::axle);
- add("bogie", &Loader::bogie);
- add("height", &Loader::height);
- add("length", &Loader::length);
- add("name", &VehicleType::name);
- add("width", &Loader::width);
+ add("axle", &Loader::axle);
+ add("bogie", &Loader::bogie);
+ add("function", &Loader::function);
+ add("height", &Loader::height);
+ add("length", &Loader::length);
+ add("locomotive", &VehicleType::locomotive);
+ add("object", &VehicleType::object);
+ add("name", &VehicleType::name);
+ add("width", &Loader::width);
}
void VehicleType::Loader::axle()
obj.bogies.push_back(bog);
}
+void VehicleType::Loader::function(unsigned i, const string &f)
+{
+ obj.functions[i] = f;
+}
+
void VehicleType::Loader::height(float h)
{
obj.height = h/1000;
VehicleType::Axle::Loader::Loader(Axle &a):
DataFile::ObjectLoader<Axle>(a)
{
+ add("object", &Axle::object);
add("position", &Loader::position);
- add("wheel_diameter", &Loader::wheel_diameter);
add("powered", &Axle::powered);
+ add("wheel_diameter", &Loader::wheel_diameter);
}
void VehicleType::Axle::Loader::position(float p)
VehicleType::Bogie::Loader::Loader(Bogie &b):
DataFile::ObjectLoader<Bogie>(b)
{
- add("position", &Loader::position);
- add("axle", &Loader::axle);
+ add("axle", &Loader::axle);
+ add("object", &Bogie::object);
+ add("position", &Loader::position);
+ add("rotate_object", &Bogie::rotate_object);
}
void VehicleType::Bogie::Loader::axle()