0x004AC6DA
| 5866 | |
| 5867 | // 0x004AC6DA |
| 5868 | static bool isTrackRoutingResultBetter(const RoutingResult& base, const RoutingResult& newResult) |
| 5869 | { |
| 5870 | if (base.signalState == RouteSignalState::null) |
| 5871 | { |
| 5872 | return true; |
| 5873 | } |
| 5874 | const bool newReachedTarget = newResult.bestDistToTarget == 0; |
| 5875 | const bool baseReachedTarget = base.bestDistToTarget == 0; |
| 5876 | if (newReachedTarget && newResult.signalState == RouteSignalState::signalBlockedOneWay) |
| 5877 | { |
| 5878 | if (base.signalState <= RouteSignalState::signalClear && base.bestTrackWeighting > 288) |
| 5879 | { |
| 5880 | const auto adjustedWeighting = newResult.bestTrackWeighting * 5 / 4; |
| 5881 | if (adjustedWeighting <= base.bestTrackWeighting) |
| 5882 | { |
| 5883 | return true; |
| 5884 | } |
| 5885 | } |
| 5886 | } |
| 5887 | if (baseReachedTarget && base.signalState == RouteSignalState::signalBlockedOneWay) |
| 5888 | { |
| 5889 | if (newResult.signalState <= RouteSignalState::signalClear && newResult.bestTrackWeighting > 288) |
| 5890 | { |
| 5891 | const auto adjustedWeighting = base.bestTrackWeighting * 5 / 4; |
| 5892 | if (adjustedWeighting <= newResult.bestTrackWeighting) |
| 5893 | { |
| 5894 | return false; |
| 5895 | } |
| 5896 | } |
| 5897 | } |
| 5898 | if (!newReachedTarget && newResult.signalState == RouteSignalState::signalBlockedOneWay) |
| 5899 | { |
| 5900 | if (!baseReachedTarget && base.signalState == RouteSignalState::signalClear) |
| 5901 | { |
| 5902 | const auto adjustedDist = newResult.bestDistToTarget * 5 / 4; |
| 5903 | if (adjustedDist <= base.bestDistToTarget |
| 5904 | || newResult.bestDistToTarget + 320 <= base.bestDistToTarget) |
| 5905 | { |
| 5906 | return true; |
| 5907 | } |
| 5908 | } |
| 5909 | } |
| 5910 | if (!baseReachedTarget && base.signalState == RouteSignalState::signalBlockedOneWay) |
| 5911 | { |
| 5912 | if (!newReachedTarget && newResult.signalState == RouteSignalState::signalClear) |
| 5913 | { |
| 5914 | const auto adjustedDist = base.bestDistToTarget * 5 / 4; |
| 5915 | if (adjustedDist <= newResult.bestDistToTarget |
| 5916 | || base.bestDistToTarget + 320 <= newResult.bestDistToTarget) |
| 5917 | { |
| 5918 | return false; |
| 5919 | } |
| 5920 | } |
| 5921 | } |
| 5922 | if (newReachedTarget && !baseReachedTarget) |
| 5923 | { |
| 5924 | return true; |
| 5925 | } |