MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / ChangeTimetable

Function ChangeTimetable

src/timetable_cmd.cpp:66–121  ·  view source on GitHub ↗

* 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. */

Source from the content-addressed store, hash-verified

64 * @param timetabled If the new value is explicitly timetabled.
65 */
66static 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/**

Callers 2

CmdChangeTimetableFunction · 0.85
UpdateVehicleTimetableFunction · 0.85

Calls 15

NOT_REACHEDFunction · 0.85
SetWindowDirtyFunction · 0.85
GetOrderMethod · 0.80
GetWaitTimeMethod · 0.80
GetTimetabledWaitMethod · 0.80
SetWaitTimeMethod · 0.80
SetWaitTimetabledMethod · 0.80
GetTravelTimeMethod · 0.80
GetTimetabledTravelMethod · 0.80
SetTravelTimeMethod · 0.80
SetTravelTimetabledMethod · 0.80
SetMaxSpeedMethod · 0.80

Tested by

no test coverage detected