0x004B090F
| 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 | } |
no test coverage detected