| 37 | } |
| 38 | |
| 39 | double AStarSubProgress::UpdateProgress(ms::LatLon const & current, ms::LatLon const & finish) |
| 40 | { |
| 41 | // to avoid 0/0 |
| 42 | if (m_fullDistance < kMwmPointAccuracy) |
| 43 | return m_currentProgress; |
| 44 | |
| 45 | double const dist = CalcDistance(current, finish); |
| 46 | double & toUpdate = finish == m_finishPoint ? m_forwardDistance : m_backwardDistance; |
| 47 | |
| 48 | toUpdate = std::min(toUpdate, dist); |
| 49 | |
| 50 | double part = 2.0 - (m_forwardDistance + m_backwardDistance) / m_fullDistance; |
| 51 | part = math::Clamp(part, 0.0, 1.0); |
| 52 | double const newProgress = m_contributionCoef * part; |
| 53 | |
| 54 | m_currentProgress = std::max(newProgress, m_currentProgress); |
| 55 | return m_currentProgress; |
| 56 | } |
| 57 | |
| 58 | double AStarSubProgress::UpdateProgress(double subSubProgressValue) |
| 59 | { |