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

Function roadRemoveCost

src/OpenLoco/src/GameCommands/Road/RemoveRoad.cpp:125–160  ·  view source on GitHub ↗

0x00477A10

Source from the content-addressed store, hash-verified

123
124 // 0x00477A10
125 static currency32_t roadRemoveCost(const RoadRemovalArgs& args, const World::TrackData::PreviewTrack roadPiece0, const World::Pos3 roadStart, const uint8_t flags)
126 {
127 const auto roadLoc = roadStart + World::Pos3{ Math::Vector::rotate(World::Pos2{ roadPiece0.x, roadPiece0.y }, args.rotation), roadPiece0.z };
128
129 auto* roadElPiece = getRoadElement(roadLoc, args, roadPiece0.index, flags);
130 if (roadElPiece == nullptr)
131 {
132 return 0;
133 }
134
135 currency32_t totalRemovalCost = 0;
136
137 const auto* roadObj = ObjectManager::get<RoadObject>(roadElPiece->roadObjectId());
138 if (roadElPiece->owner() != CompanyId::neutral)
139 {
140 const auto trackBaseCost = Economy::getInflationAdjustedCost(roadObj->sellCostFactor, roadObj->costIndex, 10);
141 const auto cost = (trackBaseCost * World::TrackData::getRoadMiscData(args.roadId).costFactor) / 256;
142 totalRemovalCost += cost;
143 }
144
145 // Check mod removal costs
146 if (!roadObj->hasFlags(RoadObjectFlags::anyRoadTypeCompatible))
147 {
148 for (auto i = 0U; i < 2; i++)
149 {
150 if (roadElPiece->hasMod(i))
151 {
152 const auto* trackExtraObj = ObjectManager::get<RoadExtraObject>(roadObj->mods[i]);
153 const auto trackExtraBaseCost = Economy::getInflationAdjustedCost(trackExtraObj->sellCostFactor, trackExtraObj->costIndex, 10);
154 const auto cost = (trackExtraBaseCost * World::TrackData::getRoadMiscData(args.roadId).costFactor) / 256;
155 totalRemovalCost += cost;
156 }
157 }
158 }
159 return totalRemovalCost;
160 }
161
162 // 0x004775A5
163 static uint32_t removeRoad(const RoadRemovalArgs& args, uint8_t flags)

Callers 1

removeRoadFunction · 0.85

Calls 7

getInflationAdjustedCostFunction · 0.85
roadObjectIdMethod · 0.80
getRoadElementFunction · 0.70
rotateFunction · 0.50
ownerMethod · 0.45
hasFlagsMethod · 0.45
hasModMethod · 0.45

Tested by

no test coverage detected