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

Function trackRemoveCost

src/OpenLoco/src/GameCommands/Track/RemoveTrack.cpp:71–102  ·  view source on GitHub ↗

0x0049CC23

Source from the content-addressed store, hash-verified

69
70 // 0x0049CC23
71 static currency32_t trackRemoveCost(const TrackRemovalArgs& args, const World::TrackData::PreviewTrack trackPiece0, const World::Pos3 trackStart, const uint8_t flags)
72 {
73 const auto trackLoc = trackStart + World::Pos3{ Math::Vector::rotate(World::Pos2{ trackPiece0.x, trackPiece0.y }, args.rotation), trackPiece0.z };
74 auto* pieceElTrack = getElTrackAt(args, flags, trackLoc, trackPiece0.index);
75 if (pieceElTrack == nullptr)
76 {
77 return 0;
78 }
79
80 currency32_t totalCost = 0;
81
82 const auto* trackObj = ObjectManager::get<TrackObject>(pieceElTrack->trackObjectId());
83 {
84 const auto trackBaseCost = Economy::getInflationAdjustedCost(trackObj->sellCostFactor, trackObj->costIndex, 10);
85 const auto cost = (trackBaseCost * World::TrackData::getTrackMiscData(args.trackId).costFactor) / 256;
86 totalCost += cost;
87 }
88
89 // Check mod removal costs
90 for (auto i = 0U; i < 4; i++)
91 {
92 if (pieceElTrack->hasMod(i))
93 {
94 const auto* trackExtraObj = ObjectManager::get<TrackExtraObject>(trackObj->mods[i]);
95 const auto trackExtraBaseCost = Economy::getInflationAdjustedCost(trackExtraObj->sellCostFactor, trackExtraObj->costIndex, 10);
96 const auto cost = (trackExtraBaseCost * World::TrackData::getTrackMiscData(args.trackId).costFactor) / 256;
97 totalCost += cost;
98 }
99 }
100
101 return totalCost;
102 }
103
104 // 0x0048B04E
105 static void playTrackRemovalSound(const World::Pos3 pos)

Callers 1

removeTrackFunction · 0.85

Calls 5

getInflationAdjustedCostFunction · 0.85
trackObjectIdMethod · 0.80
getElTrackAtFunction · 0.70
rotateFunction · 0.50
hasModMethod · 0.45

Tested by

no test coverage detected