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

Function findOccupationByBlock

src/OpenLoco/src/Vehicles/Routing.cpp:426–473  ·  view source on GitHub ↗

0x004A2AF0 Passes occupied state via _routingTransformData Returns true for signal block end

Source from the content-addressed store, hash-verified

424 // Passes occupied state via _routingTransformData
425 // Returns true for signal block end
426 static bool findOccupationByBlock(const LocationOfInterest& interest, uint16_t& routingTransformData)
427 {
428 auto nextLoc = interest.loc;
429 const auto tad = interest.tad();
430 auto& trackSize = World::TrackData::getUnkTrack(tad._data);
431 nextLoc += trackSize.pos;
432 if (trackSize.rotationEnd < 12)
433 {
434 nextLoc -= World::Pos3{ World::kRotationOffset[trackSize.rotationEnd], 0 };
435 }
436
437 auto backwardTaD = tad;
438 backwardTaD.setReversed(!backwardTaD.isReversed());
439 const auto startLoc = tad.isReversed() ? nextLoc : interest.loc;
440
441 for (const auto& trackPiece : TrackData::getTrackPiece(tad.id()))
442 {
443 const auto rotPos = Math::Vector::rotate(Pos2{ trackPiece.x, trackPiece.y }, tad.cardinalDirection());
444 const auto trackLoc = Pos2{ startLoc } + rotPos;
445
446 for (auto* entity : EntityManager::EntityTileList(trackLoc))
447 {
448 auto* vehicle = entity->asBase<Vehicles::VehicleBase>();
449 if (vehicle == nullptr)
450 {
451 continue;
452 }
453
454 if (vehicle->has38Flags(Vehicles::Flags38::unk_0 | Vehicles::Flags38::unk_2))
455 {
456 continue;
457 }
458
459 if (vehicle->getTrackLoc() == interest.loc && vehicle->getTrackAndDirection().track == tad)
460 {
461 routingTransformData = 1;
462 break;
463 }
464
465 if (vehicle->getTrackLoc() == nextLoc && vehicle->getTrackAndDirection().track == backwardTaD)
466 {
467 routingTransformData = 1;
468 break;
469 }
470 }
471 }
472 return interest.trackAndDirection & World::Track::AdditionalTaDFlags::hasSignal;
473 }
474
475 // 0x004A2CE7
476 static void setSignalsOccupiedState(const RoutingResults& results, const uint16_t& routingTransformData)

Callers 2

sub_4A2AD7Function · 0.85
isBlockOccupiedFunction · 0.85

Calls 11

getTrackPieceFunction · 0.85
EntityTileListClass · 0.85
tadMethod · 0.80
has38FlagsMethod · 0.80
getTrackLocMethod · 0.80
getTrackAndDirectionMethod · 0.80
rotateFunction · 0.50
setReversedMethod · 0.45
isReversedMethod · 0.45
idMethod · 0.45
cardinalDirectionMethod · 0.45

Tested by

no test coverage detected