| 47 | }; |
| 48 | |
| 49 | static currency32_t signalRemoveCost(const SignalRemovalArgs& args, const World::TrackData::PreviewTrack trackPiece0, const World::Pos3 trackStart) |
| 50 | { |
| 51 | const auto trackLoc = trackStart + World::Pos3{ Math::Vector::rotate(World::Pos2{ trackPiece0.x, trackPiece0.y }, args.rotation), trackPiece0.z }; |
| 52 | auto* pieceElTrack = getElTrackAt(args, trackLoc, trackPiece0.index); |
| 53 | if (pieceElTrack == nullptr) |
| 54 | { |
| 55 | return 0; |
| 56 | } |
| 57 | |
| 58 | if (!pieceElTrack->hasSignal()) |
| 59 | { |
| 60 | return 0; |
| 61 | } |
| 62 | |
| 63 | auto* elSignal = pieceElTrack->next()->as<World::SignalElement>(); |
| 64 | if (elSignal == nullptr) |
| 65 | { |
| 66 | return kFailure; |
| 67 | } |
| 68 | |
| 69 | currency32_t totalCost = 0; |
| 70 | if ((args.flags & (1U << 15)) && elSignal->getLeft().hasSignal()) |
| 71 | { |
| 72 | const auto* signalObj = ObjectManager::get<TrainSignalObject>(elSignal->getLeft().signalObjectId()); |
| 73 | totalCost += Economy::getInflationAdjustedCost(signalObj->sellCostFactor, signalObj->costIndex, 10); |
| 74 | } |
| 75 | if ((args.flags & (1U << 14)) && elSignal->getRight().hasSignal()) |
| 76 | { |
| 77 | const auto* signalObj = ObjectManager::get<TrainSignalObject>(elSignal->getRight().signalObjectId()); |
| 78 | totalCost += Economy::getInflationAdjustedCost(signalObj->sellCostFactor, signalObj->costIndex, 10); |
| 79 | } |
| 80 | return totalCost; |
| 81 | } |
| 82 | |
| 83 | // 0x004891E4 |
| 84 | static currency32_t removeSignal(const SignalRemovalArgs& args, uint8_t flags) |
no test coverage detected