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

Function clearFunction

src/OpenLoco/src/GameCommands/Road/CreateRoad.cpp:536–605  ·  view source on GitHub ↗

0x00476D40

Source from the content-addressed store, hash-verified

534
535 // 0x00476D40
536 static RoadClearFunctionResult clearFunction(World::TileElement& el, currency32_t& totalCost, World::TileClearance::RemovedBuildings& removedBuildings, const ClearFunctionArgs& args)
537 {
538 // stack
539 // 0x0 = totalCost
540 // 0xC = roadObjectId
541 // 0xD = roadId
542 // 0xE = bridge
543 // 0x14 = flags
544 // 0x15 = rotation
545 // 0x0112C2E2 = hasLevelCrossing
546 // 0x0112C2E3 = levelCrossingObjId
547 // 0x0112C2EC = hasStation
548
549 switch (el.type())
550 {
551 case World::ElementType::track:
552 {
553 auto* elTrack = el.as<World::TrackElement>();
554 if (elTrack != nullptr)
555 {
556 return clearTrack(*elTrack, args);
557 }
558 break;
559 }
560 case World::ElementType::station:
561 {
562 auto* elStation = el.as<World::StationElement>();
563 if (elStation->stationType() == StationType::roadStation)
564 {
565 return RoadClearFunctionResult(World::TileClearance::ClearFuncResult::noCollision);
566 }
567 return RoadClearFunctionResult(World::TileClearance::ClearFuncResult::collision);
568 }
569 case World::ElementType::signal:
570 return RoadClearFunctionResult(World::TileClearance::ClearFuncResult::noCollision);
571 case World::ElementType::building:
572 {
573 auto* elBuilding = el.as<World::BuildingElement>();
574 if (elBuilding == nullptr)
575 {
576 return RoadClearFunctionResult(World::TileClearance::ClearFuncResult::noCollision);
577 }
578 getLegacyReturnState().flags_1136073 |= (1U << 4);
579 return RoadClearFunctionResult(World::TileClearance::clearBuildingCollision(*elBuilding, args.pos, removedBuildings, args.flags, totalCost));
580 }
581 case World::ElementType::tree:
582 {
583 auto* elTree = el.as<World::TreeElement>();
584 if (elTree == nullptr)
585 {
586 return RoadClearFunctionResult(World::TileClearance::ClearFuncResult::noCollision);
587 }
588 return RoadClearFunctionResult(World::TileClearance::clearTreeCollision(*elTree, args.pos, args.flags, totalCost));
589 }
590 case World::ElementType::road:
591 {
592 auto* elRoad = el.as<World::RoadElement>();
593 if (elRoad != nullptr)

Callers 1

createRoadFunction · 0.70

Calls 7

clearBuildingCollisionFunction · 0.85
clearTreeCollisionFunction · 0.85
typeMethod · 0.80
stationTypeMethod · 0.80
clearTrackFunction · 0.70
clearRoadFunction · 0.70

Tested by

no test coverage detected