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

Method update

src/OpenLoco/src/Vehicles/VehicleTail.cpp:67–117  ·  view source on GitHub ↗

0x004AA24A

Source from the content-addressed store, hash-verified

65
66 // 0x004AA24A
67 bool VehicleTail::update()
68 {
69 if (mode == TransportMode::air || mode == TransportMode::water)
70 {
71 return true;
72 }
73
74 const auto _oldRoutingHandle = routingHandle;
75 const World::Pos3 _oldTilePos = World::Pos3(tileX, tileY, tileBaseZ * World::kSmallZStep);
76
77 const auto motionResult = updateTrackMotion(getVehicleUpdateDistances().unkDistance1, false);
78
79 if (motionResult.hasFlags(UpdateVar1136114Flags::noRouteFound))
80 {
81 destroyTrain();
82 return false;
83 }
84
85 if (_oldRoutingHandle == routingHandle)
86 {
87 return true;
88 }
89
90 const auto ref = RoutingManager::getRouting(_oldRoutingHandle);
91 TrackAndDirection trackAndDir((ref & 0x1F8) >> 3, ref & 0x7);
92 RoutingManager::freeRouting(_oldRoutingHandle);
93
94 if (mode == TransportMode::road)
95 {
96 updateRoadTileOccupancy(_oldTilePos, trackAndDir.road, false);
97 }
98 else
99 {
100 if (ref & (1 << 15))
101 {
102 setSignalState(_oldTilePos, trackAndDir.track, trackType, 0);
103 }
104
105 const auto& trackSize = World::TrackData::getUnkTrack(ref & World::Track::AdditionalTaDFlags::basicTaDMask);
106 auto nextTile = _oldTilePos + trackSize.pos;
107 if (trackSize.rotationEnd < 12)
108 {
109 nextTile -= World::Pos3{ World::kRotationOffset[trackSize.rotationEnd], 0 };
110 }
111 auto trackAndDirection2 = trackAndDir;
112 trackAndDirection2.track.setReversed(!trackAndDirection2.track.isReversed());
113 sub_4A2AD7(nextTile, trackAndDirection2.track, owner, trackType);
114 leaveLevelCrossing(_oldTilePos, trackAndDir.track, 9);
115 }
116 return true;
117 }
118
119 // 0x004B090F
120 void liftUpTail(VehicleTail& tail)

Callers

nothing calls this directly

Calls 9

updateTrackMotionFunction · 0.85
getRoutingFunction · 0.85
freeRoutingFunction · 0.85
setSignalStateFunction · 0.85
sub_4A2AD7Function · 0.85
leaveLevelCrossingFunction · 0.85
hasFlagsMethod · 0.45
setReversedMethod · 0.45
isReversedMethod · 0.45

Tested by

no test coverage detected