changeset 17095:f9112c03b14d draft

(svn r21832) -Feature: limit vehicle lateness to the length of a full timetable cycle, e.g. when a cycle takes 50 days and the vehicle is 65 days later reduce the lateness to 15 days
author rubidium <rubidium@openttd.org>
date Tue, 18 Jan 2011 14:27:43 +0000
parents 4154ccfd4d39
children a1e788474acf
files src/timetable_cmd.cpp
diffstat 1 files changed, 12 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/timetable_cmd.cpp
+++ b/src/timetable_cmd.cpp
@@ -310,6 +310,18 @@
 
 	v->lateness_counter -= (timetabled - time_taken);
 
+	/* When we are more late than this timetabled bit takes we (somewhat expensively)
+	 * check how many ticks the (fully filled) timetable has. If a timetable cycle is
+	 * shorter than the amount of ticks we are late we reduce the lateness by the
+	 * length of a full cycle till lateness is less than the length of a timetable
+	 * cycle. When the timetable isn't fully filled the cycle will be INVALID_TICKS. */
+	if (v->lateness_counter > (int)timetabled) {
+		Ticks cycle = v->orders.list->GetTimetableTotalDuration();
+		if (cycle != INVALID_TICKS && v->lateness_counter > cycle) {
+			v->lateness_counter %= cycle;
+		}
+	}
+
 	for (v = v->FirstShared(); v != NULL; v = v->NextShared()) {
 		SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index);
 	}