Skip to content

Commit c51ae11

Browse files
committed
[drape] Draw a bearing arrow for the pedestrian speed mode.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
1 parent 9ca980b commit c51ae11

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

libs/drape_frontend/my_position_controller.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,19 @@
1616
#include <algorithm>
1717
#include <array>
1818
#include <chrono>
19-
#include <string>
20-
#include <vector>
2119

2220
namespace df
2321
{
2422
namespace
2523
{
2624
int const kPositionRoutingOffsetY = 104;
27-
double const kMinSpeedThresholdMps = 2.8; // 10 km/h
28-
double const kGpsBearingLifetimeSec = 5.0;
25+
26+
// https://t.me/OrganicMapsRu/88317
27+
double const kMinSpeedThresholdMps = 0.7; // for the pedestrian mode 2.5 km/h
28+
/// @todo Should depend on the _previous_ avg speed (say for the last 5 minutes).
29+
/// Bigger for cars (up to 30 seconds is ok, IMO) and lower for pedestrians.
30+
double const kGpsBearingLifetimeSec = 3.0;
31+
2932
double const kMaxTimeInBackgroundSec = 60.0 * 60 * 30; // 30 hours before starting detecting position again
3033
double const kMaxNotFollowRoutingTimeSec = 20.0;
3134
double const kMaxUpdateLocationInvervalSec = 30.0;
@@ -529,16 +532,19 @@ void MyPositionController::LoseLocation()
529532

530533
void MyPositionController::OnCompassUpdate(location::CompassInfo const & info, ScreenBase const & screen)
531534
{
532-
double const oldAzimut = GetDrawableAzimut();
533535
m_isCompassAvailable = true;
534536

535-
bool const existsFreshGpsBearing = m_lastGPSBearingTimer.ElapsedSeconds() < kGpsBearingLifetimeSec;
536-
if ((IsInRouting() && m_isArrowGluedInRouting) || existsFreshGpsBearing)
537+
if (m_isArrowGluedInRouting && IsInRouting())
537538
return;
538539

540+
if (m_lastGPSBearingTimer.ElapsedSeconds() < kGpsBearingLifetimeSec)
541+
return;
542+
543+
double const oldAzimut = GetDrawableAzimut();
544+
539545
SetDirection(info.m_bearing);
540546

541-
if (m_isPositionAssigned && !AlmostCurrentAzimut(oldAzimut) && m_mode == location::FollowAndRotate)
547+
if (m_isPositionAssigned && m_mode == location::FollowAndRotate && !AlmostCurrentAzimut(oldAzimut))
542548
{
543549
CreateAnim(GetDrawablePosition(), oldAzimut, screen);
544550
m_isDirtyViewport = true;

0 commit comments

Comments
 (0)