]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicle.cpp
Get rid of some obsolete #includes
[r2c2.git] / source / libr2c2 / vehicle.cpp
index 79e3cbef9370f57ce0eaaf4c620e90cd4f72daae..62671fccab1c95fdad2e811fe9c77bc5895884a0 100644 (file)
@@ -3,6 +3,7 @@
 #include "driver.h"
 #include "layout.h"
 #include "track.h"
+#include "trackappearance.h"
 #include "trackiter.h"
 #include "tracktype.h"
 #include "vehicle.h"
@@ -106,6 +107,9 @@ void Vehicle::place(const TrackOffsetIter &t, VehiclePlacement::Anchor a)
 {
        if(!t)
                throw invalid_argument("Vehicle::place");
+       float gauge_ratio = t->get_type().get_gauge()/type.get_gauge();
+       if(gauge_ratio<0.99 || gauge_ratio>1.01)
+               throw logic_error("Incompatible gauge");
 
        placement.place(t, a);
 
@@ -175,7 +179,8 @@ void Vehicle::update_position(int sign)
 {
        OrientedPoint p = placement.get_point();
        position = p.position;
-       position.z += layout.get_catalogue().get_rail_elevation();
+       // TODO Move the z adjustment to VehiclePlacement
+       position.z += placement.get_position(VehiclePlacement::FRONT_AXLE)->get_type().get_appearance().get_rail_elevation();
        rotation = p.rotation;
        tilt = p.tilt;
 
@@ -247,7 +252,7 @@ void Vehicle::propagate_backward()
 
 void Vehicle::check_sensor(const TrackOffsetIter &t, unsigned &sensor, bool release)
 {
-       unsigned s = t->get_sensor_id();
+       unsigned s = t->get_sensor_address();
        if(s!=sensor)
        {
                unsigned old = sensor;
@@ -355,6 +360,14 @@ int Vehicle::get_link_slot(const Object &other) const
                return -1;
 }
 
+bool Vehicle::collide_ray(const Ray &ray, float *d) const
+{
+       if(is_placed())
+               return Object::collide_ray(ray, d);
+       else
+               return false;
+}
+
 
 Vehicle::Axle::Axle(const VehicleType::Axle &t):
        type(&t)