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

Function setTrackTypeTabs

src/OpenLoco/src/Ui/Windows/BuildVehicle.cpp:1722–1786  ·  view source on GitHub ↗

0x4C2D8A

Source from the content-addressed store, hash-verified

1720
1721 // 0x4C2D8A
1722 static void setTrackTypeTabs(Ui::Window* window)
1723 {
1724 VehicleType currentTransportTabType = _transportTypeTabInformation[window->currentTab].type;
1725 generateBuildableVehiclesArray(currentTransportTabType, 0xFF, nullptr);
1726
1727 auto railTrackTypes = 0;
1728 auto roadTrackTypes = 0;
1729 for (auto i = 0; i < _numAvailableVehicles; i++)
1730 {
1731 auto vehicleObj = ObjectManager::get<VehicleObject>(_availableVehicles[i]);
1732 if (vehicleObj && vehicleObj->mode == TransportMode::rail)
1733 {
1734 railTrackTypes |= (1 << vehicleObj->trackType);
1735 }
1736 else if (vehicleObj && vehicleObj->mode == TransportMode::road)
1737 {
1738 auto trackType = vehicleObj->trackType;
1739 if (trackType == 0xFF)
1740 {
1741 trackType = getGameState().lastTrackTypeOption;
1742 }
1743 roadTrackTypes |= (1 << trackType);
1744 }
1745 else
1746 {
1747 // Reset the tabs
1748 _trackTypesForTab[0] = 0xFF;
1749 _numTrackTypeTabs = 1;
1750 window->widgets[tab_track_type_0].hidden = false;
1751 for (WidgetIndex_t j = tab_track_type_1; j <= tab_track_type_7; ++j)
1752 {
1753 window->widgets[j].hidden = true;
1754 }
1755 return;
1756 }
1757 }
1758
1759 WidgetIndex_t trackTypeTab = tab_track_type_0;
1760 auto trackType = 0;
1761 for (trackType = Numerics::bitScanForward(railTrackTypes); trackType != -1 && trackTypeTab <= tab_track_type_7; trackType = Numerics::bitScanForward(railTrackTypes))
1762 {
1763 railTrackTypes &= ~(1 << trackType);
1764 window->widgets[trackTypeTab].hidden = false;
1765 _trackTypesForTab[widxToTrackTypeTab(trackTypeTab)] = trackType;
1766 trackTypeTab++;
1767 }
1768
1769 if (trackType == -1 && trackTypeTab <= tab_track_type_7)
1770 {
1771 for (trackType = Numerics::bitScanForward(roadTrackTypes); trackType != -1 && trackTypeTab <= tab_track_type_7; trackType = Numerics::bitScanForward(roadTrackTypes))
1772 {
1773 roadTrackTypes &= ~(1 << trackType);
1774 window->widgets[trackTypeTab].hidden = false;
1775 _trackTypesForTab[widxToTrackTypeTab(trackTypeTab)] = trackType | (1 << 7);
1776 trackTypeTab++;
1777 }
1778 }
1779

Callers 2

openFunction · 0.85
onMouseUpFunction · 0.85

Calls 3

bitScanForwardFunction · 0.85
widxToTrackTypeTabFunction · 0.85

Tested by

no test coverage detected