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

Method load

src/OpenLoco/src/Objects/RoadObject.cpp:63–160  ·  view source on GitHub ↗

0x00477BCF

Source from the content-addressed store, hash-verified

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));

Callers

nothing calls this directly

Calls 9

loadStringTableFunction · 0.85
findObjectHandleFuzzyFunction · 0.85
beginFunction · 0.85
endFunction · 0.85
findObjectHandleFunction · 0.85
loadImageTableFunction · 0.85
push_backMethod · 0.80
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected