0x0049CC23
| 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) |
no test coverage detected