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

Function liftUpTail

src/OpenLoco/src/Vehicles/VehicleTail.cpp:120–175  ·  view source on GitHub ↗

0x004B090F

Source from the content-addressed store, hash-verified

118
119 // 0x004B090F
120 void liftUpTail(VehicleTail& tail)
121 {
122 if (tail.mode == TransportMode::road)
123 {
124 const auto tailPos = World::Pos3(tail.tileX, tail.tileY, tail.tileBaseZ * World::kSmallZStep);
125
126 auto pos = tailPos;
127
128 RoutingManager::RingView ring(tail.routingHandle);
129 for (const auto& handle : ring)
130 {
131 const auto routing = RoutingManager::getRouting(handle);
132 auto tad = TrackAndDirection::_RoadAndDirection(0, 0);
133 tad._data = routing & Track::AdditionalTaDFlags::basicTaDMask;
134 tail.updateRoadTileOccupancy(pos, tad, false);
135
136 pos += World::TrackData::getUnkRoad(tad.basicRad()).pos;
137 }
138 }
139 else
140 {
141 const auto tailPos = World::Pos3(tail.tileX, tail.tileY, tail.tileBaseZ * World::kSmallZStep);
142 {
143 TrackAndDirection::_TrackAndDirection tad{ 0, 0 };
144 tad._data = RoutingManager::getRouting(tail.routingHandle) & Track::AdditionalTaDFlags::basicTaDMask;
145 auto& trackSize = World::TrackData::getUnkTrack(tad._data);
146 auto pos = tailPos + trackSize.pos;
147 if (trackSize.rotationEnd < 12)
148 {
149 pos -= World::Pos3{ World::kRotationOffset[trackSize.rotationEnd], 0 };
150 }
151 tad.setReversed(!tad.isReversed());
152 sub_4A2AD7(pos, tad, tail.owner, tail.trackType);
153 }
154
155 auto pos = tailPos;
156
157 RoutingManager::RingView ring(tail.routingHandle);
158 for (const auto& handle : ring)
159 {
160 const auto routing = RoutingManager::getRouting(handle);
161 auto tad = TrackAndDirection::_TrackAndDirection(0, 0);
162 tad._data = routing & Track::AdditionalTaDFlags::basicTaDMask;
163 sub_4A2AD7(pos, tad, tail.owner, tail.trackType);
164
165 if (routing & Track::AdditionalTaDFlags::hasSignal)
166 {
167 setSignalState(pos, tad, tail.trackType, 0);
168 }
169
170 leaveLevelCrossing(pos, tad, 9);
171
172 pos += World::TrackData::getUnkTrack(tad._data).pos;
173 }
174 }
175 }
176}

Callers 1

liftUpVehicleMethod · 0.85

Calls 10

getRoutingFunction · 0.85
_RoadAndDirectionClass · 0.85
sub_4A2AD7Function · 0.85
_TrackAndDirectionClass · 0.85
setSignalStateFunction · 0.85
leaveLevelCrossingFunction · 0.85
basicRadMethod · 0.80
setReversedMethod · 0.45
isReversedMethod · 0.45

Tested by

no test coverage detected