0x004705C0
| 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() |
no test coverage detected