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

Function removeTrack

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

0x0049C7F2

Source from the content-addressed store, hash-verified

110
111 // 0x0049C7F2
112 static currency32_t removeTrack(const TrackRemovalArgs& args, const uint8_t flags)
113 {
114 setExpenditureType(ExpenditureType::Construction);
115 setPosition(args.pos + World::Pos3{ 16, 16, 0 });
116
117 currency32_t totalRemovalCost = 0;
118
119 auto* elTrack = getElTrackAt(args, flags, args.pos, args.index);
120 if (elTrack == nullptr)
121 {
122 return kFailure;
123 }
124
125 if ((flags & Flags::ghost) == 0 && !sub_431E6A(elTrack->owner(), reinterpret_cast<World::TileElement*>(elTrack)))
126 {
127 return kFailure;
128 }
129
130 if (elTrack->hasSignal())
131 {
132 GameCommands::SignalRemovalArgs srArgs;
133 srArgs.pos = args.pos;
134 srArgs.rotation = args.rotation;
135 srArgs.index = args.index;
136 srArgs.trackId = args.trackId;
137 srArgs.trackObjType = args.trackObjectId;
138 srArgs.flags = 0;
139
140 auto* elSignal = elTrack->next()->as<World::SignalElement>();
141 if (elSignal != nullptr)
142 {
143 if (elSignal->getLeft().hasSignal())
144 {
145 srArgs.flags |= 1U << 15;
146 }
147 if (elSignal->getRight().hasSignal())
148 {
149 srArgs.flags |= 1U << 14;
150 }
151 }
152
153 if (auto cost = GameCommands::doCommand(srArgs, flags); cost != kFailure)
154 {
155 totalRemovalCost += cost;
156 }
157 else
158 {
159 return kFailure;
160 }
161 }
162
163 // Fetch track element again; signal removal above might have invalidated the pointer.
164 elTrack = getElTrackAt(args, flags, args.pos, args.index);
165
166 if (elTrack->hasStationElement())
167 {
168 GameCommands::TrainStationRemovalArgs tsArgs;
169 tsArgs.pos = args.pos;

Callers 1

Calls 15

setExpenditureTypeFunction · 0.85
setPositionFunction · 0.85
sub_431E6AFunction · 0.85
getTrackPieceFunction · 0.85
trackRemoveCostFunction · 0.85
shouldInvalidateTileFunction · 0.85
mapInvalidateTileFullFunction · 0.85
setLevelCrossingFlagsFunction · 0.85
getInflationAdjustedCostFunction · 0.85
playTrackRemovalSoundFunction · 0.85
TrackRemovalArgsClass · 0.85
getElTrackAtFunction · 0.70

Tested by

no test coverage detected