NUr für dich nehme ich mal deine oben gepostete Zeile her.
iProduction = (GC.getBuildInfo(eBuild).getFeatureProduction(getFeatureType()) - (std::max(0, (plotDistance(getX_INLINE(), getY_INLINE(), (*ppCity)->getX_INLINE(), (*ppCity)->getY_INLINE()) - 2)) * 5))
Die kann man zerlegen in Produktion geben mit GC.getBuildInfo(eBuild).getFeatureProduction(getFeatureType()) und den Abzugteil für Entfernung (std::max(0, (plotDistance(getX_INLINE(), getY_INLINE(), (*ppCity)->getX_INLINE(), (*ppCity)->getY_INLINE()) - 2)) * 5)
Der Abzugteil funtkioniert wie folgend:
(std::max(0, (plotDistance(getX_INLINE(), getY_INLINE(), (*ppCity)->getX_INLINE(), (*ppCity)->getY_INLINE()) - 2)) * 5)
Das max sorgt dafür, dass der Abzugwert nie negativ sein kann, weil nur Werte größer 0 größer 0 sind.
plotDistance(getX_INLINE(), getY_INLINE(), (*ppCity)->getX_INLINE(), (*ppCity)->getY_INLINE()) bestimmt den Plotabstand. Es liegen alle Felder kleiner gleich 2 im Kreuz einer Stadt. Die -2 sorgt dafür, dass der Wert negativ oder null im Kreuz wird. Jede Entfernung größer 2 ist damit positiv und damit größer 0.