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

Function insertOrder

src/OpenLoco/src/Vehicles/OrderManager.cpp:159–185  ·  view source on GitHub ↗

0x004704AB

Source from the content-addressed store, hash-verified

157
158 // 0x004704AB
159 void insertOrder(VehicleHead* head, uint16_t orderOffset, const Order* order)
160 {
161 assert(order->getType() != OrderType::End && orderOffset < head->sizeOfOrderTable);
162 auto insOrderLength = kOrderSizes[enumValue(order->getType())];
163
164 // Shift current order to compensate for the new order.
165 // For empty order tables, let current order point to the first order.
166 if (head->sizeOfOrderTable > 1 && head->currentOrder >= orderOffset)
167 {
168 head->currentOrder += insOrderLength;
169 }
170
171 head->sizeOfOrderTable += insOrderLength;
172
173 // Shift existing orders to make room for the new one
174 shiftOrdersRight(head->orderTableOffset + orderOffset, insOrderLength);
175 // Bookkeeping: change order table size
176 orderTableLength() += insOrderLength;
177
178 // Calculate destination offset and copy data
179 auto rawOrder = order->getRaw();
180 auto dest = reinterpret_cast<uint8_t*>(orders() + head->orderTableOffset + orderOffset);
181 std::memcpy(dest, &rawOrder, insOrderLength);
182
183 // Recalculate order offsets for other vehicles
184 reoffsetVehicleOrderTables(head->orderTableOffset + 1, insOrderLength);
185 }
186
187 // 0x004705C0
188 void deleteOrder(VehicleHead* head, uint16_t orderOffset)

Callers 1

vehicleOrderInsertFunction · 0.85

Calls 6

enumValueFunction · 0.85
shiftOrdersRightFunction · 0.85
ordersFunction · 0.85
getTypeMethod · 0.45
getRawMethod · 0.45

Tested by

no test coverage detected