| 6813 | |
| 6814 | template<typename T> |
| 6815 | static void setTrainModFlags(Vehicle& train, T& trackRoadObj) |
| 6816 | { |
| 6817 | bool canRoll = true; |
| 6818 | uint32_t roadMods = 0; |
| 6819 | uint32_t rackRailMods = 0; |
| 6820 | for (auto& car : train.cars) |
| 6821 | { |
| 6822 | auto* vehicleObj = ObjectManager::get<VehicleObject>(car.front->objectId); |
| 6823 | if (vehicleObj->bodySprites[0].numRollFrames == 1) |
| 6824 | { |
| 6825 | canRoll = false; |
| 6826 | } |
| 6827 | if (vehicleObj->hasFlags(VehicleObjectFlags::rackRail)) |
| 6828 | { |
| 6829 | for (auto i = 0U; i < trackRoadObj.numMods; ++i) |
| 6830 | { |
| 6831 | if (trackRoadObj.mods[i] == vehicleObj->rackRailType) |
| 6832 | { |
| 6833 | rackRailMods |= (1U << i); |
| 6834 | break; |
| 6835 | } |
| 6836 | } |
| 6837 | } |
| 6838 | |
| 6839 | for (auto i = 0U; i < vehicleObj->numTrackExtras; ++i) |
| 6840 | { |
| 6841 | const auto mod = vehicleObj->requiredTrackExtras[i]; |
| 6842 | for (auto j = 0U; j < trackRoadObj.numMods; ++j) |
| 6843 | { |
| 6844 | if (trackRoadObj.mods[j] == mod) |
| 6845 | { |
| 6846 | roadMods |= (1U << j); |
| 6847 | break; |
| 6848 | } |
| 6849 | } |
| 6850 | } |
| 6851 | } |
| 6852 | train.head->var_53 = roadMods; |
| 6853 | train.veh1->var_49 = rackRailMods; |
| 6854 | train.head->var_38 &= ~Flags38::fasterAroundCurves; |
| 6855 | if (canRoll) |
| 6856 | { |
| 6857 | train.head->var_38 |= Flags38::fasterAroundCurves; |
| 6858 | } |
| 6859 | } |
| 6860 | |
| 6861 | // 0x004B7CC3 |
| 6862 | void VehicleHead::updateTrainProperties() |
no test coverage detected