0x00477BCF
| 61 | |
| 62 | // 0x00477BCF |
| 63 | void RoadObject::load(const LoadedObjectHandle& handle, std::span<const std::byte> data, ObjectManager::DependentObjects* dependencies) |
| 64 | { |
| 65 | auto remainingData = data.subspan(sizeof(RoadObject)); |
| 66 | |
| 67 | auto strRes = ObjectManager::loadStringTable(remainingData, handle, 0); |
| 68 | name = strRes.str; |
| 69 | remainingData = remainingData.subspan(strRes.tableLength); |
| 70 | |
| 71 | // NOTE: These aren't dependent (objects unless otherwise stated) as this object can load without the |
| 72 | // related object. |
| 73 | // Load compatible roads/tracks |
| 74 | compatibleTracks = 0; |
| 75 | compatibleRoads = 0; |
| 76 | for (auto i = 0; i < numCompatible; ++i) |
| 77 | { |
| 78 | ObjectHeader modHeader = *reinterpret_cast<const ObjectHeader*>(remainingData.data()); |
| 79 | auto res = ObjectManager::findObjectHandleFuzzy(modHeader); |
| 80 | if (res.has_value()) |
| 81 | { |
| 82 | if (res->type == ObjectType::track) |
| 83 | { |
| 84 | compatibleTracks |= 1U << res->id; |
| 85 | } |
| 86 | else if (res->type == ObjectType::road) |
| 87 | { |
| 88 | compatibleRoads |= 1U << res->id; |
| 89 | } |
| 90 | } |
| 91 | remainingData = remainingData.subspan(sizeof(ObjectHeader)); |
| 92 | } |
| 93 | |
| 94 | // Load Extra |
| 95 | std::fill(std::begin(mods), std::end(mods), 0xFF); |
| 96 | for (auto i = 0U, index = 0U; i < numMods; ++i) |
| 97 | { |
| 98 | ObjectHeader modHeader = *reinterpret_cast<const ObjectHeader*>(remainingData.data()); |
| 99 | auto res = ObjectManager::findObjectHandle(modHeader); |
| 100 | if (res.has_value() && res->type == ObjectType::roadExtra) |
| 101 | { |
| 102 | mods[index++] = res->id; |
| 103 | } |
| 104 | remainingData = remainingData.subspan(sizeof(ObjectHeader)); |
| 105 | } |
| 106 | |
| 107 | // Load Tunnel (DEPENDENT OBJECT) |
| 108 | tunnel = 0xFF; |
| 109 | { |
| 110 | ObjectHeader unkHeader = *reinterpret_cast<const ObjectHeader*>(remainingData.data()); |
| 111 | if (dependencies != nullptr) |
| 112 | { |
| 113 | dependencies->required.push_back(unkHeader); |
| 114 | } |
| 115 | auto res = ObjectManager::findObjectHandle(unkHeader); |
| 116 | if (res.has_value()) |
| 117 | { |
| 118 | tunnel = res->id; |
| 119 | } |
| 120 | remainingData = remainingData.subspan(sizeof(ObjectHeader)); |
nothing calls this directly
no test coverage detected