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

Function createRoadMod

src/OpenLoco/src/GameCommands/Road/CreateRoadMod.cpp:50–77  ·  view source on GitHub ↗

0x0047A21E

Source from the content-addressed store, hash-verified

48
49 // 0x0047A21E
50 static uint32_t createRoadMod(const RoadModsPlacementArgs& args, uint8_t flags)
51 {
52 auto* roadEl = getRoadElement(args);
53 if (roadEl == nullptr || !sub_431E6A(roadEl->owner(), reinterpret_cast<const World::TileElement*>(roadEl)))
54 {
55 return kFailure;
56 }
57
58 auto& piece = World::TrackData::getRoadPiece(args.roadId)[roadEl->sequenceIndex()];
59 const auto roadLoc = World::Pos3{ Math::Vector::rotate(World::Pos2{ piece.x, piece.y }, args.rotation), piece.z };
60
61 // 0x0047A34C
62 const auto firstTilePos = args.pos - roadLoc;
63 const auto rad = Vehicles::TrackAndDirection::_RoadAndDirection(roadEl->roadId(), roadEl->rotation());
64
65 auto result = Vehicles::applyRoadModsToTrackNetwork(firstTilePos, rad, roadEl->owner(), args.roadObjType, flags, args.modSection, args.type);
66 if (result.allPlacementsFailed)
67 {
68 setErrorText(StringIds::track_road_unsuitable);
69 return kFailure;
70 }
71 if (result.networkTooComplex && (flags & Flags::apply) && !(flags & Flags::ghost))
72 {
73 Ui::Windows::Error::open(StringIds::null, StringIds::too_much_track_some_track_not_upgraded);
74 }
75
76 return result.cost;
77 }
78
79 void createRoadMod(registers& regs)
80 {

Callers

nothing calls this directly

Calls 13

sub_431E6AFunction · 0.85
getRoadPieceFunction · 0.85
_RoadAndDirectionClass · 0.85
setErrorTextFunction · 0.85
roadIdMethod · 0.80
getRoadElementFunction · 0.70
rotateFunction · 0.50
openFunction · 0.50
ownerMethod · 0.45
sequenceIndexMethod · 0.45

Tested by

no test coverage detected