MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / deleteOrder

Function deleteOrder

src/OpenLoco/src/Vehicles/OrderManager.cpp:188–218  ·  view source on GitHub ↗

0x004705C0

Source from the content-addressed store, hash-verified

186
187 // 0x004705C0
188 void deleteOrder(VehicleHead* head, uint16_t orderOffset)
189 {
190 assert(orderOffset < head->sizeOfOrderTable);
191 // Find out what type the selected order is
192 OrderRingView orders(head->orderTableOffset, orderOffset);
193 auto& selectedOrder = *(orders.begin());
194
195 auto removeOrderSize = kOrderSizes[enumValue(selectedOrder.getType())];
196 head->sizeOfOrderTable -= removeOrderSize;
197
198 // Are we removing an order that appears before the current order? Move back a bit
199 if (head->currentOrder > orderOffset)
200 {
201 head->currentOrder -= removeOrderSize;
202 }
203
204 // Ensure we don't move beyond the order table size
205 if (head->currentOrder + 1 >= head->sizeOfOrderTable)
206 {
207 head->currentOrder = 0;
208 }
209
210 // Move orders in the order table, effectively removing the order
211 shiftOrdersLeft(head->orderTableOffset + orderOffset, removeOrderSize);
212
213 // Bookkeeping: change order table size
214 orderTableLength() -= removeOrderSize;
215
216 // Compensate other vehicles to use new table offsets
217 reoffsetVehicleOrderTables(head->orderTableOffset + orderOffset + 1, -removeOrderSize);
218 }
219
220 // 0x004702F7
221 void zeroUnusedOrderTable()

Callers 2

removeOrdersForStationFunction · 0.85
vehicleOrderDeleteFunction · 0.85

Calls 5

enumValueFunction · 0.85
shiftOrdersLeftFunction · 0.85
beginMethod · 0.45
getTypeMethod · 0.45

Tested by

no test coverage detected