]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/vehicle.cpp
Things with different gauges don't go together
[r2c2.git] / source / libr2c2 / vehicle.cpp
index 79e3cbef9370f57ce0eaaf4c620e90cd4f72daae..6615fb25b768cebf6c05003eb1e52fba5d2efcd2 100644 (file)
@@ -106,6 +106,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 +178,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 +251,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 +359,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)