mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 04:53:36 +00:00
[routing] Simplify notifications on roundabout.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
836c39ff64
commit
1a6bbd756a
@@ -487,10 +487,11 @@ UNIT_TEST(TurnsSound_RoundaboutTurnTest)
|
||||
// 620 meters till the 4th turn.
|
||||
vector<TurnItemDist> const turns9 = {
|
||||
{{25 /* idx */, CarDirection::EnterRoundAbout, 4 /* m_exitNum */}, 620. /* m_distMeters */},
|
||||
{{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 665. /* m_distMeters */}};
|
||||
{{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 1000. /* m_distMeters */}};
|
||||
vector<string> const expectedNotification9 = {{"In 600 meters. Enter the roundabout."},
|
||||
{"Then. Take the fourth exit."}};
|
||||
notificationManager.GenerateTurnNotifications(turns9, turnNotifications);
|
||||
notificationManager.GenerateTurnNotifications(turns9, turnNotifications,
|
||||
routing::RouteSegment::RoadNameInfo("Main street"));
|
||||
TEST_EQUAL(turnNotifications, expectedNotification9, ());
|
||||
TEST_EQUAL(notificationManager.GetSecondTurnNotification(), CarDirection::LeaveRoundAbout, ());
|
||||
}
|
||||
|
||||
@@ -75,15 +75,15 @@ std::string NotificationManager::GenerateTurnText(uint32_t distanceUnits, uint8_
|
||||
{
|
||||
auto const lengthUnits = m_settings.GetLengthUnits();
|
||||
|
||||
if (turn.m_turn != CarDirection::None && turn.m_turn != CarDirection::EnterRoundAbout)
|
||||
return m_getTtsText.GetTurnNotification(
|
||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits, nextStreetInfo});
|
||||
else if (turn.m_turn == CarDirection::EnterRoundAbout) // Don't include roundabout street name in TTS
|
||||
return m_getTtsText.GetTurnNotification(
|
||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits});
|
||||
Notification notif{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits};
|
||||
if (turn.m_turn == CarDirection::None)
|
||||
notif.m_turnDirPedestrian = turn.m_pedestrianTurn;
|
||||
|
||||
return m_getTtsText.GetTurnNotification(
|
||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_pedestrianTurn, lengthUnits, nextStreetInfo});
|
||||
// https://github.com/organicmaps/organicmaps/issues/6146
|
||||
if (turn.m_turn != CarDirection::EnterRoundAbout)
|
||||
notif.m_nextStreetInfo = nextStreetInfo;
|
||||
|
||||
return m_getTtsText.GetTurnNotification(notif);
|
||||
}
|
||||
|
||||
std::string NotificationManager::GenerateRecalculatingText() const
|
||||
@@ -129,12 +129,14 @@ void NotificationManager::GenerateTurnNotifications(std::vector<TurnItemDist> co
|
||||
|
||||
double distBetweenTurnsMeters = secondTurn.m_distMeters - firstTurn.m_distMeters;
|
||||
ASSERT_GREATER_OR_EQUAL(distBetweenTurnsMeters, 0, ());
|
||||
if (distBetweenTurnsMeters > kSecondTurnThresholdDistM && !IsClassicEntranceToRoundabout(firstTurn, secondTurn))
|
||||
bool const isRoundabout = IsClassicEntranceToRoundabout(firstTurn, secondTurn);
|
||||
if (!isRoundabout && distBetweenTurnsMeters > kSecondTurnThresholdDistM)
|
||||
return;
|
||||
|
||||
if ((distBetweenTurnsMeters < kDistanceNotifyThresholdM) || IsClassicEntranceToRoundabout(firstTurn, secondTurn))
|
||||
if (distBetweenTurnsMeters < kDistanceNotifyThresholdM ||
|
||||
(isRoundabout && distBetweenTurnsMeters < kSecondTurnThresholdDistM))
|
||||
{
|
||||
// distanceUnits is not used because "Then" is used
|
||||
// Don't pronounce distance because of immediate "Then".
|
||||
distBetweenTurnsMeters = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -167,26 +167,6 @@ struct Notification
|
||||
, m_lengthUnits(lengthUnits)
|
||||
{}
|
||||
|
||||
Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance,
|
||||
PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits,
|
||||
RouteSegment::RoadNameInfo const & nextStreetInfo)
|
||||
: m_distanceUnits(distanceUnits)
|
||||
, m_exitNum(exitNum)
|
||||
, m_useThenInsteadOfDistance(useThenInsteadOfDistance)
|
||||
, m_turnDirPedestrian(turnDirPedestrian)
|
||||
, m_lengthUnits(lengthUnits)
|
||||
, m_nextStreetInfo(nextStreetInfo)
|
||||
{}
|
||||
|
||||
Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance,
|
||||
PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits)
|
||||
: m_distanceUnits(distanceUnits)
|
||||
, m_exitNum(exitNum)
|
||||
, m_useThenInsteadOfDistance(useThenInsteadOfDistance)
|
||||
, m_turnDirPedestrian(turnDirPedestrian)
|
||||
, m_lengthUnits(lengthUnits)
|
||||
{}
|
||||
|
||||
bool operator==(Notification const & rhv) const
|
||||
{
|
||||
return m_distanceUnits == rhv.m_distanceUnits && m_exitNum == rhv.m_exitNum &&
|
||||
|
||||
Reference in New Issue
Block a user