From d085e9f54c225691e4559b1d277f6d9c63a95e89 Mon Sep 17 00:00:00 2001 From: Maximilian Giller Date: Wed, 24 May 2023 14:29:08 +0200 Subject: [PATCH] Removed weighted tracking, now just min/max --- src/game/camera/tracking_view.cpp | 34 ++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/src/game/camera/tracking_view.cpp b/src/game/camera/tracking_view.cpp index d494eec..b867d3a 100644 --- a/src/game/camera/tracking_view.cpp +++ b/src/game/camera/tracking_view.cpp @@ -118,19 +118,39 @@ void TrackingView::addTrackable(ITrackable *trackable) sf::Vector2f TrackingView::getCollectiveTrackingPoint() const { - sf::Vector2f collectiveTrackingPoint = {0, 0}; + sf::Vector2f minPoint = trackables[0]->getTrackablePosition(); + sf::Vector2f maxPoint = minPoint; + // Find min and max point coordinates for x and y axis over all trackables for (auto trackable : trackables) { - if (trackable->getTrackableState() != TrackableState::TRACKING) - { - continue; - } + auto trackableCoordinates = trackable->getTrackablePosition(); + auto trackableSize = trackable->getTrackableSize(); - collectiveTrackingPoint += trackable->getTrackablePosition(); + auto minPointX = trackableCoordinates.x - trackableSize.x / 2.f; + auto maxPointX = trackableCoordinates.x + trackableSize.x / 2.f; + auto minPointY = trackableCoordinates.y - trackableSize.y / 2.f; + auto maxPointY = trackableCoordinates.y + trackableSize.y / 2.f; + + if (minPointX < minPoint.x) + { + minPoint.x = minPointX; + } + if (maxPointX > maxPoint.x) + { + maxPoint.x = maxPointX; + } + if (minPointY < minPoint.y) + { + minPoint.y = minPointY; + } + if (maxPointY > maxPoint.y) + { + maxPoint.y = maxPointY; + } } - return collectiveTrackingPoint / (float) trackables.size(); + return minPoint + (maxPoint - minPoint) / 2.f; } void TrackingView::processTrackableStates()