0x004BACAF
| 2708 | |
| 2709 | // 0x004BACAF |
| 2710 | void VehicleHead::updateLastJourneyAverageSpeed() |
| 2711 | { |
| 2712 | if (!hasBreakdownFlags(BreakdownFlags::journeyStarted)) |
| 2713 | { |
| 2714 | return; |
| 2715 | } |
| 2716 | Vehicle train(*this); |
| 2717 | |
| 2718 | breakdownFlags &= ~BreakdownFlags::journeyStarted; |
| 2719 | const auto distanceTravelled = Math::Vector::distance2D(journeyStartPos, Pos2(train.veh2->position)); |
| 2720 | |
| 2721 | const auto timeInTicks = ScenarioManager::getScenarioTicks() - journeyStartTicks; |
| 2722 | |
| 2723 | auto modeModifier = [](TransportMode m) { |
| 2724 | switch (m) |
| 2725 | { |
| 2726 | default: |
| 2727 | case TransportMode::rail: |
| 2728 | case TransportMode::road: |
| 2729 | return 21; |
| 2730 | case TransportMode::air: |
| 2731 | return 36; |
| 2732 | case TransportMode::water: |
| 2733 | return 31; |
| 2734 | } |
| 2735 | }(mode); |
| 2736 | |
| 2737 | auto adjustedDistance = distanceTravelled * static_cast<int64_t>(modeModifier); |
| 2738 | auto adjustedTime = timeInTicks; |
| 2739 | // TODO: In the future (when we can diverge) we can just do a 64bit divide instead of |
| 2740 | // slowly bringing down the divisor and dividend by 2 until 32bit |
| 2741 | while (adjustedDistance > std::numeric_limits<uint32_t>::max()) |
| 2742 | { |
| 2743 | adjustedDistance >>= 1; |
| 2744 | adjustedTime >>= 1; |
| 2745 | } |
| 2746 | if (adjustedTime == 0) |
| 2747 | { |
| 2748 | return; |
| 2749 | } |
| 2750 | const auto averageSpeed = std::min(train.veh2->maxSpeed, Speed16(adjustedDistance / adjustedTime)); |
| 2751 | lastAverageSpeed = averageSpeed; |
| 2752 | |
| 2753 | Ui::WindowManager::invalidate(Ui::WindowType::vehicle, enumValue(head)); |
| 2754 | |
| 2755 | const auto recordType = [](TransportMode m) { |
| 2756 | switch (m) |
| 2757 | { |
| 2758 | default: |
| 2759 | case TransportMode::rail: |
| 2760 | case TransportMode::road: |
| 2761 | return 0; |
| 2762 | case TransportMode::air: |
| 2763 | return 1; |
| 2764 | case TransportMode::water: |
| 2765 | return 2; |
| 2766 | } |
| 2767 | }(mode); |
nothing calls this directly
no test coverage detected