diff options
-rw-r--r-- | src/game-server/trigger.cpp | 6 | ||||
-rw-r--r-- | src/utils/point.h | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/game-server/trigger.cpp b/src/game-server/trigger.cpp index f25b00b8..19ca3512 100644 --- a/src/game-server/trigger.cpp +++ b/src/game-server/trigger.cpp @@ -55,7 +55,11 @@ void TriggerArea::update() //skip garbage if (!(*i) || (*i)->getPublicID() == 0) continue; - if (mZone.contains((*i)->getPosition())) //<-- Why is this additional condition necessary? Shouldn't getInsideRectangleIterator already exclude those outside of the zone? --Crush + // The BeingIterator returns the mapZones in touch with the rectangle + // area. On the other hand, the beings contained in the map zones + // may not be within the rectangle area. Hence, this additional + // contains() condition. + if (mZone.contains((*i)->getPosition())) { insideNow.insert(*i); diff --git a/src/utils/point.h b/src/utils/point.h index 4402aa09..988b6c5a 100644 --- a/src/utils/point.h +++ b/src/utils/point.h @@ -75,8 +75,8 @@ class Rectangle bool contains(const Point &p) const { - return (p.x - x) < w && - (p.y - y) < h; + return (p.x >= x && p.x < x + w && + p.y >= y && p.y < y + h); } bool intersects(const Rectangle &r) const |