]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicletype.cpp
Add a vehicle property for swapping directions
[r2c2.git] / source / libr2c2 / vehicletype.cpp
index b9c6ed2f72fe093c37043d3504bc226b225abe84..6c9d387ad7978f1da7ae4d65701050633eabe719 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of R²C²
-Copyright © 2010  Mikkosoft Productions, Mikko Rasa
+Copyright © 2010-2011  Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
@@ -15,6 +15,7 @@ namespace R2C2 {
 VehicleType::VehicleType(const ArticleNumber &an):
        art_nr(an),
        locomotive(false),
+       swap_direction(false),
        length(0),
        width(0),
        height(0)
@@ -27,6 +28,36 @@ unsigned VehicleType::get_max_function() const
        return (--functions.end())->first;
 }
 
+const VehicleType::Axle &VehicleType::get_fixed_axle(unsigned i) const
+{
+       if(i>=axles.size())
+               throw InvalidParameterValue("Axle index out of range");
+       return axles[i];
+}
+
+const VehicleType::Bogie &VehicleType::get_bogie(unsigned i) const
+{
+       if(i>=bogies.size())
+               throw InvalidParameterValue("Axle index out of range");
+       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");
+       if(j>=bogies[i].axles.size())
+               throw InvalidParameterValue("Axle index out of range");
+       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");
+       return rods[i];
+}
+
 float VehicleType::get_front_axle_offset() const
 {
        float front = length/2;
@@ -89,6 +120,7 @@ VehicleType::Loader::Loader(VehicleType &vt):
        add("name",       &VehicleType::name);
        add("object",     &VehicleType::object);
        add("rod",        &Loader::rod);
+       add("swap_direction", &VehicleType::swap_direction);
        add("width",      &Loader::width);
 }
 
@@ -202,8 +234,8 @@ void VehicleType::Rod::Loader::connect(const string &t, float px, float pz, floa
        if(i==tags.end())
                throw KeyError("Unknown rod tag", t);
        obj.connect_index = i->second;
-       obj.connect_point = Point(px/1000, 0, pz/1000);
-       obj.connect_offset = Point(ox/1000, 0, oz/1000);
+       obj.connect_point = Vector(px/1000, 0, pz/1000);
+       obj.connect_offset = Vector(ox/1000, 0, oz/1000);
 }
 
 void VehicleType::Rod::Loader::pivot_body()
@@ -235,7 +267,7 @@ void VehicleType::Rod::Loader::pivot_rod(const string &t)
 
 void VehicleType::Rod::Loader::position(float x, float y, float z)
 {
-       obj.pivot_point = Point(x/1000, y/1000, z/1000);
+       obj.pivot_point = Vector(x/1000, y/1000, z/1000);
 }
 
 void VehicleType::Rod::Loader::set_tag(const string &t)