]> git.tdb.fi Git - r2c2.git/commitdiff
Allow rotating the body object of a vehicle
authorMikko Rasa <tdb@tdb.fi>
Fri, 26 Apr 2013 18:21:58 +0000 (21:21 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 26 Apr 2013 18:21:58 +0000 (21:21 +0300)
This is a quick and dirty solution to support multiple units.  A better
solution is to allow rotating the vehicle instance, but that needs some
additional coding to handle correctly.

source/3d/vehicle.cpp
source/libr2c2/vehicletype.cpp
source/libr2c2/vehicletype.h

index 4e5965b2de44860d90881f21c3c18918d3786d60..0bd57e95da2b80d276fdf82cef0015649dc1d53d 100644 (file)
@@ -95,7 +95,10 @@ void Vehicle3D::setup_render(GL::Renderer &renderer, const GL::Tag &) const
        GL::Matrix matrix;
        const Vector &pos = vehicle.get_position();
        matrix.translate(pos.x, pos.y, pos.z);
-       matrix.rotate(vehicle.get_direction(), 0, 0, 1);
+       float dir = vehicle.get_direction();
+       if(vehicle.get_type().get_rotate_object())
+               dir += M_PI;
+       matrix.rotate(dir, 0, 0, 1);
        renderer.matrix_stack() *= matrix;
 }
 
index 720b922a183a911bef72f9b916243a0bc1d9a63e..2da44cc992f340f7c73e7f44e104fc4285327078 100644 (file)
@@ -13,7 +13,8 @@ VehicleType::VehicleType(const ArticleNumber &an):
        swap_direction(false),
        length(0),
        width(0),
-       height(0)
+       height(0),
+       rotate_object(false)
 { }
 
 unsigned VehicleType::get_max_function() const
@@ -115,6 +116,7 @@ VehicleType::Loader::Loader(VehicleType &vt):
        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);
 }
index d9afdbce8c00aa60f4e32e224c782176cd239b22..d8bec87a31a1ff9d47ddc2b702e26d1c190389f0 100644 (file)
@@ -137,6 +137,7 @@ private:
        BogieArray bogies;
        RodArray rods;
        std::string object;
+       bool rotate_object;
 
 public:
        VehicleType(const ArticleNumber &);
@@ -160,6 +161,7 @@ public:
        float get_front_axle_offset() const;
        float get_back_axle_offset() const;
        const std::string &get_object() const { return object; }
+       bool get_rotate_object() const { return rotate_object; }
 };
 
 } // namespace R2C2