MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / isTrackRoutingResultBetter

Function isTrackRoutingResultBetter

src/OpenLoco/src/Vehicles/VehicleHead.cpp:5868–5950  ·  view source on GitHub ↗

0x004AC6DA

Source from the content-addressed store, hash-verified

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 }

Callers 1

trackPathingFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected