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

Function generateNumDisplayFrames

src/OpenLoco/src/Vehicles/OrderManager.cpp:341–426  ·  view source on GitHub ↗

0x00470824

Source from the content-addressed store, hash-verified

339
340 // 0x00470824
341 void generateNumDisplayFrames(Vehicles::VehicleHead* head)
342 {
343 World::setMapSelectionFlags(World::MapSelectionFlags::unk_04);
344 Gfx::invalidateScreen();
345 _displayFrames.clear();
346 auto orders = Vehicles::OrderRingView(head->orderTableOffset);
347 uint8_t i = 0;
348 for (auto& order : orders)
349 {
350 if (!order.hasFlags(Vehicles::OrderFlags::HasNumber))
351 {
352 continue;
353 }
354 NumDisplayFrame newFrame;
355 newFrame.orderOffset = order.getOffset();
356
357 auto lineNumber = 0;
358 auto* stationOrder = order.as<Vehicles::OrderStation>();
359 auto* waypointOrder = order.as<Vehicles::OrderRouteWaypoint>();
360 if (stationOrder != nullptr)
361 {
362 lineNumber++; // station labels start on line 0 so add 1 for the number
363
364 const auto stationId = stationOrder->getStation();
365 for (auto innerOrder = orders.begin(); innerOrder->getOffset() != order.getOffset(); ++innerOrder)
366 {
367 auto* innerStationOrder = innerOrder->as<Vehicles::OrderStation>();
368 if (innerStationOrder == nullptr)
369 {
370 continue;
371 }
372 if (stationId == innerStationOrder->getStation())
373 {
374 lineNumber++;
375 }
376 }
377 }
378 else if (waypointOrder != nullptr)
379 {
380 const auto rawOrder = order.getRaw();
381 for (auto innerOrder = orders.begin(); innerOrder->getOffset() != order.getOffset(); ++innerOrder)
382 {
383 if (rawOrder == innerOrder->getRaw())
384 {
385 lineNumber++;
386 }
387 }
388 }
389
390 // For some reason save only a byte when this could in theory be larger
391 newFrame.lineNumber = static_cast<uint8_t>(lineNumber);
392 _displayFrames.push_back(newFrame);
393 i++;
394 }
395
396 i = 1;
397 for (auto& unk : _displayFrames)
398 {

Callers 7

orderDeleteCommandFunction · 0.85
orderUpCommandFunction · 0.85
orderDownCommandFunction · 0.85
orderReverseCommandFunction · 0.85
addNewOrderFunction · 0.85
onUpdateFunction · 0.85
createViewportFunction · 0.85

Calls 14

setMapSelectionFlagsFunction · 0.85
invalidateScreenFunction · 0.85
gameToScreenFunction · 0.85
getCurrentRotationFunction · 0.85
getStringWidthFunction · 0.85
getOffsetMethod · 0.80
getStationMethod · 0.80
push_backMethod · 0.80
OrderRingViewClass · 0.50
clearMethod · 0.45
hasFlagsMethod · 0.45

Tested by

no test coverage detected