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

Function signalRemoveCost

src/OpenLoco/src/GameCommands/Track/RemoveSignal.cpp:49–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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)

Callers 1

removeSignalFunction · 0.85

Calls 6

getInflationAdjustedCostFunction · 0.85
signalObjectIdMethod · 0.80
getElTrackAtFunction · 0.70
rotateFunction · 0.50
hasSignalMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected