qDebug() << __PRETTY_FUNCTION__;
foreach (FriendLocationItem *friendItem, m_friends) {
- if (!friendItem->sceneTransformedBoundingRect(zoomLevel)
- .intersects(sceneTransformedBoundingRect(zoomLevel)))
+// if (!friendItem->sceneTransformedBoundingRect(zoomLevel)
+// .intersects(sceneTransformedBoundingRect(zoomLevel)))
dropFriend(friendItem);
}
bool FriendItemsHandler::collides(BaseLocationItem *item1, BaseLocationItem *item2)
{
- QRect rect = item1->sceneTransformedBoundingRect(m_zoomLevel);
+ QRect item1Rect = item1->sceneTransformedBoundingRect(m_zoomLevel);
+ QRect item2Rect = item2->sceneTransformedBoundingRect(m_zoomLevel);
- if (rect.intersects(item2->sceneTransformedBoundingRect(m_zoomLevel)))
+ if (item1Rect.intersects(item2Rect))
return true;
- if (rect.left() < MAP_MIN_PIXEL_X) {
- QRect translated = rect.translated(MAP_PIXELS_X, 0);
- if (translated.intersects(item2->sceneTransformedBoundingRect(m_zoomLevel)))
+ if (item1Rect.left() < MAP_MIN_PIXEL_X + item1Rect.width() / 2) {
+ QRect translated = item1Rect.translated(MAP_PIXELS_X, 0);
+ if (translated.intersects(item2Rect))
return true;
}
- if (rect.right() > MAP_MAX_PIXEL_X) {
- QRect translated = rect.translated(-MAP_PIXELS_X, 0);
- if (translated.intersects(item2->sceneTransformedBoundingRect(m_zoomLevel)))
+ if (item1Rect.right() > MAP_MAX_PIXEL_X - item1Rect.width() / 2) {
+ QRect translated = item1Rect.translated(-MAP_PIXELS_X, 0);
+ if (translated.intersects(item2Rect))
return true;
}
void FriendItemsHandler::destructGroups()
{
+ foreach (FriendGroupItem *group, m_friendGroupItems)
+ group->dropFriends(0);
+
qDeleteAll(m_friendGroupItems);
m_friendGroupItems.clear();
- foreach (FriendLocationItem *item, m_friendItems)
- item->setPartOfGroup(false);
+// foreach (FriendLocationItem *item, m_friendItems)
+// item->setPartOfGroup(false);
}
void FriendItemsHandler::dropFriendFromAllGroups(FriendLocationItem *item)
/**
* @brief Check if items collide
*
- * Does check if items sceneTransformedBoundingRect() does intersect. If item1's rect is
- * over the limits of the map, then rect is translated to opposite side of the map and
- * intersections are tested there too.
+ * Does check if items sceneTransformedBoundingRect() does intersect. If item1's rect is max
+ * half of the rect width from the vertical limits of the map (from inside), then rect is
+ * translated to opposite side of the map and intersections are tested there too.
*
* @param item1 First item
* @param item2 Secont item