mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-30 01:24:07 +00:00
[drape] Add FollowAndRotateRoute mode
This adds a new mode to rotate the camera towards the route while driving. This is done by looking ahead X number of seconds along the current route, up to the next turn, and calculating the angle between the current position and then. Squashed commits: [drape] Add bearing calculation via route lookahead while navigating [drape] Extract NavigationContext from OnLocationUpdate params [drape] Increase rotation animation duration during navigation [drape] Seperate route and compass rotation into two modes [drape] Reduce route lookahead maximum to 25 seconds [drape] Fix case where rotation was incorrectly considered invalid [drape] Make FollowAndRotateRoute mode only available during driving navigation [drape] Rewrite FollowedPolyline::GetLookaheadPoint [drape] Cleanup Signed-off-by: Leonardo Bishop <me@leonardobishop.net>
This commit is contained in:
committed by
Konstantin Pastbin
parent
0d01076c0f
commit
515cf98cef
@@ -438,8 +438,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
break;
|
||||
#endif
|
||||
ref_ptr<GpsInfoMessage> msg = message;
|
||||
m_myPositionController->OnLocationUpdate(msg->GetInfo(), msg->IsNavigable(), msg->GetDistanceToNextTurn(),
|
||||
msg->GetSpeedLimit(), m_userEventStream.GetCurrentScreen());
|
||||
m_myPositionController->OnLocationUpdate(msg->GetInfo(), msg->GetNavigationContext(),
|
||||
m_userEventStream.GetCurrentScreen());
|
||||
|
||||
location::RouteMatchingInfo const & info = msg->GetRouteInfo();
|
||||
if (info.HasDistanceFromBegin())
|
||||
@@ -512,7 +512,8 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
if (m_pendingFollowRoute != nullptr)
|
||||
{
|
||||
FollowRoute(m_pendingFollowRoute->m_preferredZoomLevel, m_pendingFollowRoute->m_preferredZoomLevelIn3d,
|
||||
m_pendingFollowRoute->m_enableAutoZoom, m_pendingFollowRoute->m_isArrowGlued);
|
||||
m_pendingFollowRoute->m_enableAutoZoom, m_pendingFollowRoute->m_isArrowGlued,
|
||||
m_pendingFollowRoute->m_allowRouteRotation);
|
||||
m_pendingFollowRoute.reset();
|
||||
}
|
||||
break;
|
||||
@@ -584,13 +585,14 @@ void FrontendRenderer::AcceptMessage(ref_ptr<Message> message)
|
||||
// receive FollowRoute message before FlushSubroute message, so we need to postpone its processing.
|
||||
if (m_routeRenderer->GetSubroutes().empty())
|
||||
{
|
||||
m_pendingFollowRoute = std::make_unique<FollowRouteData>(
|
||||
msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(), msg->EnableAutoZoom(), msg->IsArrowGlued());
|
||||
m_pendingFollowRoute =
|
||||
std::make_unique<FollowRouteData>(msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(),
|
||||
msg->EnableAutoZoom(), msg->IsArrowGlued(), msg->AllowRouteRotation());
|
||||
}
|
||||
else
|
||||
{
|
||||
FollowRoute(msg->GetPreferredZoomLevel(), msg->GetPreferredZoomLevelIn3d(), msg->EnableAutoZoom(),
|
||||
msg->IsArrowGlued());
|
||||
msg->IsArrowGlued(), msg->AllowRouteRotation());
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1057,10 +1059,11 @@ void FrontendRenderer::UpdateContextDependentResources()
|
||||
}
|
||||
|
||||
void FrontendRenderer::FollowRoute(int preferredZoomLevel, int preferredZoomLevelIn3d, bool enableAutoZoom,
|
||||
bool isArrowGlued)
|
||||
bool isArrowGlued, bool allowRouteRotation)
|
||||
{
|
||||
m_myPositionController->ActivateRouting(
|
||||
!m_enablePerspectiveInNavigation ? preferredZoomLevel : preferredZoomLevelIn3d, enableAutoZoom, isArrowGlued);
|
||||
!m_enablePerspectiveInNavigation ? preferredZoomLevel : preferredZoomLevelIn3d, enableAutoZoom, isArrowGlued,
|
||||
allowRouteRotation);
|
||||
|
||||
if (m_enablePerspectiveInNavigation)
|
||||
AddUserEvent(make_unique_dp<SetAutoPerspectiveEvent>(true /* isAutoPerspective */));
|
||||
|
||||
Reference in New Issue
Block a user