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

Function generateOrderUiStringAndLoc

src/OpenLoco/src/Vehicles/OrderManager.cpp:270–338  ·  view source on GitHub ↗

0x00470B76

Source from the content-addressed store, hash-verified

268
269 // 0x00470B76
270 std::pair<World::Pos3, std::string> generateOrderUiStringAndLoc(uint32_t orderOffset, uint8_t orderNum)
271 {
272 std::stringstream ss;
273 ss << ControlCodes::inlineSpriteStr;
274
275 auto imageId = Gfx::recolour(ImageIds::getNumberCircle(orderNum), Colour::white);
276 ss.write(reinterpret_cast<const char*>(&imageId), 4);
277 OrderRingView orderRing(orderOffset);
278 auto order = orderRing.begin();
279 World::Pos3 pos{};
280
281 switch (order->getType())
282 {
283 case Vehicles::OrderType::StopAt:
284 {
285 auto* stopAt = order->as<Vehicles::OrderStopAt>();
286 // 0x00470B7D
287 auto* station = StationManager::get(stopAt->getStation());
288 pos = World::Pos3{ station->x, station->y, station->z } + World::Pos3{ 0, 0, 30 };
289 ss << ControlCodes::Colour::white;
290 for (auto nextOrder = order + 1; nextOrder != order; ++nextOrder)
291 {
292 if (!nextOrder->hasFlags(Vehicles::OrderFlags::HasCargo))
293 {
294 break;
295 }
296 auto* unload = nextOrder->as<Vehicles::OrderUnloadAll>();
297 auto* waitFor = nextOrder->as<Vehicles::OrderWaitFor>();
298 const CargoObject* cargoObj = nullptr;
299 if (unload != nullptr)
300 {
301 ss << " - ";
302 cargoObj = ObjectManager::get<CargoObject>(unload->getCargo());
303 }
304 else if (waitFor != nullptr)
305 {
306 ss << " + ";
307 cargoObj = ObjectManager::get<CargoObject>(waitFor->getCargo());
308 }
309 else
310 {
311 // Not possible
312 break;
313 }
314 ss << ControlCodes::inlineSpriteStr;
315 ss.write(reinterpret_cast<const char*>(&cargoObj->unitInlineSprite), 4);
316 }
317 break;
318 }
319 case Vehicles::OrderType::RouteThrough:
320 {
321
322 // 0x00470C25
323 auto* station = StationManager::get(order->as<Vehicles::OrderRouteThrough>()->getStation());
324 pos = World::Pos3{ station->x, station->y, station->z } + World::Pos3{ 0, 0, 30 };
325 break;
326 }
327 case Vehicles::OrderType::RouteWaypoint:

Callers 2

drawRoutingNumbersFunction · 0.85
generateNumDisplayFramesFunction · 0.85

Calls 10

recolourFunction · 0.85
getNumberCircleFunction · 0.85
getStationMethod · 0.80
getCargoMethod · 0.80
getWaypointMethod · 0.80
getFunction · 0.50
writeMethod · 0.45
beginMethod · 0.45
getTypeMethod · 0.45
hasFlagsMethod · 0.45

Tested by

no test coverage detected