* Change/update a particular timetable entry. * @param v The vehicle to change the timetable of. * @param order_number The index of the timetable in the order list. * @param val The new data of the timetable entry. * @param mtf Which part of the timetable entry to change. * @param timetabled If the new value is explicitly timetabled. */
| 64 | * @param timetabled If the new value is explicitly timetabled. |
| 65 | */ |
| 66 | static void ChangeTimetable(Vehicle *v, VehicleOrderID order_number, uint16_t val, ModifyTimetableFlags mtf, bool timetabled) |
| 67 | { |
| 68 | Order *order = v->GetOrder(order_number); |
| 69 | assert(order != nullptr); |
| 70 | int total_delta = 0; |
| 71 | int timetable_delta = 0; |
| 72 | |
| 73 | switch (mtf) { |
| 74 | case MTF_WAIT_TIME: |
| 75 | total_delta = val - order->GetWaitTime(); |
| 76 | timetable_delta = (timetabled ? val : 0) - order->GetTimetabledWait(); |
| 77 | order->SetWaitTime(val); |
| 78 | order->SetWaitTimetabled(timetabled); |
| 79 | break; |
| 80 | |
| 81 | case MTF_TRAVEL_TIME: |
| 82 | total_delta = val - order->GetTravelTime(); |
| 83 | timetable_delta = (timetabled ? val : 0) - order->GetTimetabledTravel(); |
| 84 | order->SetTravelTime(val); |
| 85 | order->SetTravelTimetabled(timetabled); |
| 86 | break; |
| 87 | |
| 88 | case MTF_TRAVEL_SPEED: |
| 89 | order->SetMaxSpeed(val); |
| 90 | break; |
| 91 | |
| 92 | default: |
| 93 | NOT_REACHED(); |
| 94 | } |
| 95 | v->orders->UpdateTotalDuration(total_delta); |
| 96 | v->orders->UpdateTimetableDuration(timetable_delta); |
| 97 | |
| 98 | for (v = v->FirstShared(); v != nullptr; v = v->NextShared()) { |
| 99 | if (v->cur_real_order_index == order_number && v->current_order.Equals(*order)) { |
| 100 | switch (mtf) { |
| 101 | case MTF_WAIT_TIME: |
| 102 | v->current_order.SetWaitTime(val); |
| 103 | v->current_order.SetWaitTimetabled(timetabled); |
| 104 | break; |
| 105 | |
| 106 | case MTF_TRAVEL_TIME: |
| 107 | v->current_order.SetTravelTime(val); |
| 108 | v->current_order.SetTravelTimetabled(timetabled); |
| 109 | break; |
| 110 | |
| 111 | case MTF_TRAVEL_SPEED: |
| 112 | v->current_order.SetMaxSpeed(val); |
| 113 | break; |
| 114 | |
| 115 | default: |
| 116 | NOT_REACHED(); |
| 117 | } |
| 118 | } |
| 119 | SetWindowDirty(WC_VEHICLE_TIMETABLE, v->index); |
| 120 | } |
| 121 | } |
| 122 | |
| 123 | /** |
no test coverage detected