X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fvehicletype.cpp;h=15733c33842bfb79282b5b50988160e92bd25cbf;hb=c52c0e591be55cb2c7251689c69c642e3cb3601c;hp=786d18aa40f1ac3abec97fa603b7ff120b9f5f56;hpb=dd05e8ed55a9072daaf18e4c63c3b66e386ba7f4;p=r2c2.git diff --git a/source/libr2c2/vehicletype.cpp b/source/libr2c2/vehicletype.cpp index 786d18a..15733c3 100644 --- a/source/libr2c2/vehicletype.cpp +++ b/source/libr2c2/vehicletype.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include "vehicletype.h" @@ -16,7 +17,8 @@ VehicleType::VehicleType(const ArticleNumber &an): length(0), width(0), height(0), - rotate_object(false) + rotate_object(false), + max_speed(0) { } unsigned VehicleType::get_max_function() const @@ -108,6 +110,7 @@ VehicleType::Loader::Loader(VehicleType &vt): add("height", &Loader::height); add("length", &Loader::length); add("locomotive", &VehicleType::locomotive); + add("maximum_speed", &VehicleType::max_speed); add("mirror_rods", &Loader::mirror_rods); add("object", &VehicleType::object); add("rod", &Loader::rod); @@ -179,12 +182,24 @@ void VehicleType::Loader::mirror_rods() { MirrorParametersLoader params; load_sub_with(params); + Regex r_filter(params.filter); + + vector mirror_indices(obj.rods.size(), 0); + for(TagMap::const_iterator i=rod_tags.begin(); i!=rod_tags.end(); ++i) + if(i->second<0x10000 && r_filter.match(i->first)) + mirror_indices[i->second] = 1; + + for(unsigned i=0, j=obj.rods.size(); itarget_position.y = -j->target_position.y; j->local_position.y = -j->local_position.y; j->axis.y = -j->axis.y; - if(j->target==RodConstraint::ROD) - j->target_index += index_offset; + if(j->target==RodConstraint::ROD && mirror_indices[j->target_index]) + j->target_index = mirror_indices[j->target_index]; else if(j->target==RodConstraint::AXLE) j->target_position = axle_trans.transform(j->target_position); } @@ -360,9 +375,15 @@ void VehicleType::Rod::Loader::initial_position(float x, float y, float z) VehicleType::MirrorParametersLoader::MirrorParametersLoader() { + add("filter", &MirrorParametersLoader::filt); add("phase_offset", &MirrorParametersLoader::phase_offs); } +void VehicleType::MirrorParametersLoader::filt(const string &f) +{ + filter = f; +} + void VehicleType::MirrorParametersLoader::phase_offs(float o) { phase_offset = Angle::from_degrees(o);