/*! Return `true` if `c`'s car frame collide with `this` border. */
bool collide(BicycleCar const& c) const;
+ /*! \brief Set car `c` to the start position.
+ *
+ * \param c Bicycle car.
+ */
+ void set_to_start(BicycleCar& c);
+
/*! \brief Drive car `c` into the parking slot `this`.
*
* \param c Starting bicycle car.
|| c.front().intersects_with(this->_front);
}
+void
+ParkingSlot::set_to_start(BicycleCar& c)
+{
+ c.h(this->h());
+ double clen = -this->_offset + this->len() - c.df();
+ double cw = c.w() / 2.0;
+ c.x(this->lrx() + clen * cos(c.h()) + cw * cos(c.h() + M_PI / 2.0));
+ c.y(this->lry() + clen * sin(c.h()) + cw * sin(c.h() + M_PI / 2.0));
+ c.set_max_steer();
+ assert(this->_parking_speed < 0.0);
+ c.sp(this->_parking_speed);
+}
+
std::vector<BicycleCar>
ParkingSlot::drive_in_slot(BicycleCar c)
{
this->swap_side();
swapped = true;
}
- c.h(this->h());
- double clen = -this->_offset + this->len() - c.df();
- double cw = c.w() / 2.0;
- c.x(this->lrx() + clen * cos(c.h()) + cw * cos(c.h() + M_PI / 2.0));
- c.y(this->lry() + clen * sin(c.h()) + cw * sin(c.h() + M_PI / 2.0));
- c.set_max_steer();
- assert(this->_parking_speed < 0.0);
- c.sp(this->_parking_speed);
+ this->set_to_start(c);
auto const rc = c.rf();
this->_curb.intersects_with(rc, c.len());
double max_to_slot;