X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fvehicletype.cpp;h=5c14cbada6b5dc43905d6b064b087533bd87d066;hb=e392d397f6b86a49a05e9738357ccbfc2a922f01;hp=0913401e45b89b12c301361b6bc56655cf7444c5;hpb=e5cd9e4fbc577036a0385c985b6b65df8218d0a2;p=r2c2.git diff --git a/source/libmarklin/vehicletype.cpp b/source/libmarklin/vehicletype.cpp index 0913401..5c14cba 100644 --- a/source/libmarklin/vehicletype.cpp +++ b/source/libmarklin/vehicletype.cpp @@ -7,27 +7,78 @@ Distributed under the GPL #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(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() @@ -44,6 +95,11 @@ void VehicleType::Loader::bogie() 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; @@ -63,9 +119,10 @@ void VehicleType::Loader::width(float w) VehicleType::Axle::Loader::Loader(Axle &a): DataFile::ObjectLoader(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) @@ -82,8 +139,10 @@ void VehicleType::Axle::Loader::wheel_diameter(float d) VehicleType::Bogie::Loader::Loader(Bogie &b): DataFile::ObjectLoader(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()