|
|
|
@ -315,6 +315,9 @@ CommandCost CmdSetTimetableStart(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
|
|
|
|
ClrBit(w->vehicle_flags, VF_TIMETABLE_STARTED);
|
|
|
|
|
/* Do multiplication, then division to reduce rounding errors. */
|
|
|
|
|
w->timetable_start = start_date + idx * total_duration / num_vehs / DAY_TICKS;
|
|
|
|
|
if (w->timetable_start < _date && idx < 0) {
|
|
|
|
|
w->timetable_start += (total_duration / DAY_TICKS);
|
|
|
|
|
}
|
|
|
|
|
SetWindowDirty(WC_VEHICLE_TIMETABLE, w->index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -696,14 +699,16 @@ void UpdateVehicleTimetable(Vehicle *v, bool travelling)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (new_time < 1) new_time = 1;
|
|
|
|
|
if (new_time != (int32)timetabled)
|
|
|
|
|
if (new_time != (int32)timetabled) {
|
|
|
|
|
ChangeTimetable(v, v->cur_real_order_index, new_time, travelling ? MTF_TRAVEL_TIME : MTF_WAIT_TIME, true);
|
|
|
|
|
}
|
|
|
|
|
} else if (timetabled == 0 && HasBit(v->vehicle_flags, VF_AUTOMATE_TIMETABLE)) {
|
|
|
|
|
/* Add times for orders that are not yet timetabled, even while not autofilling */
|
|
|
|
|
if (travelling)
|
|
|
|
|
ChangeTimetable(v, v->cur_real_order_index, time_taken, travelling ? MTF_TRAVEL_TIME : MTF_WAIT_TIME, true);
|
|
|
|
|
else
|
|
|
|
|
ChangeTimetable(v, v->cur_real_order_index, time_loading, travelling ? MTF_TRAVEL_TIME : MTF_WAIT_TIME, true);
|
|
|
|
|
if (travelling) {
|
|
|
|
|
ChangeTimetable(v, v->cur_real_order_index, time_taken, MTF_TRAVEL_TIME, true);
|
|
|
|
|
} else {
|
|
|
|
|
ChangeTimetable(v, v->cur_real_order_index, time_loading, MTF_WAIT_TIME, true);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Vehicles will wait at stations if they arrive early even if they are not
|
|
|
|
|