]> rtime.felk.cvut.cz Git - hubacji1/bcar.git/blobdiff - src/pslot.cc
Fix collide
[hubacji1/bcar.git] / src / pslot.cc
index ec88e634f8bea7861a16d6028a8b956d15702228..ec6462776b71842d65313b7c107e2c250db140e6 100644 (file)
@@ -112,6 +112,10 @@ ParkingSlot::swap_side()
 {
        this->border_[1].rotate(this->border_[0], M_PI);
        this->border_[2].rotate(this->border_[3], M_PI);
+       this->entry_ = Line(this->border_[0], this->border_[3]);
+       this->rear_ = Line(this->border_[0], this->border_[1]);
+       this->curb_ = Line(this->border_[1], this->border_[2]);
+       this->front_ = Line(this->border_[2], this->border_[3]);
 }
 
 bool
@@ -127,17 +131,17 @@ bool
 ParkingSlot::collide(BicycleCar const& c) const
 {
        return c.left().intersects_with(this->rear_)
-               && c.left().intersects_with(this->curb_)
-               && c.left().intersects_with(this->front_)
-               && c.rear().intersects_with(this->rear_)
-               && c.rear().intersects_with(this->curb_)
-               && c.rear().intersects_with(this->front_)
-               && c.right().intersects_with(this->rear_)
-               && c.right().intersects_with(this->curb_)
-               && c.right().intersects_with(this->front_)
-               && c.front().intersects_with(this->rear_)
-               && c.front().intersects_with(this->curb_)
-               && c.front().intersects_with(this->front_);
+               || c.left().intersects_with(this->curb_)
+               || c.left().intersects_with(this->front_)
+               || c.rear().intersects_with(this->rear_)
+               || c.rear().intersects_with(this->curb_)
+               || c.rear().intersects_with(this->front_)
+               || c.right().intersects_with(this->rear_)
+               || c.right().intersects_with(this->curb_)
+               || c.right().intersects_with(this->front_)
+               || c.front().intersects_with(this->rear_)
+               || c.front().intersects_with(this->curb_)
+               || c.front().intersects_with(this->front_);
 }
 
 std::vector<BicycleCar>
@@ -259,6 +263,18 @@ ParkingSlot::fe(BicycleCar c, unsigned int& max)
        return pr;
 }
 
+PoseRange
+ParkingSlot::recompute_entry(PoseRange p)
+{
+       p.rotate(Point(0.0, 0.0), this->h());
+       p.x(p.x() + this->lrx());
+       p.y(p.y() + this->lry());
+       if (!this->right()) {
+               p.reflect(this->entry_);
+       }
+       return p;
+}
+
 std::ostream&
 operator<<(std::ostream& o, ParkingSlot const& s)
 {