diff --git a/src/road.cpp b/src/road.cpp index f73ec6c99c..a5364dfa66 100644 --- a/src/road.cpp +++ b/src/road.cpp @@ -130,11 +130,6 @@ bool HasRoadTypeAvail(const CompanyID company, RoadType roadtype) } } -static RoadTypes GetMaskForRoadTramType(RoadTramType rtt) -{ - return rtt == RTT_TRAM ? _roadtypes_type : ~_roadtypes_type; -} - /** * Test if any buildable RoadType is available for a company. * @param company the company in question diff --git a/src/road.h b/src/road.h index ea9f67393a..0fa95b96a1 100644 --- a/src/road.h +++ b/src/road.h @@ -190,16 +190,26 @@ public: } }; -extern RoadTypes _roadtypes_type; +/** + * Get the mask for road types of the given RoadTramType. + * @param rtt RoadTramType. + * @return Mask of road types for RoadTramType. + */ +inline RoadTypes GetMaskForRoadTramType(RoadTramType rtt) +{ + extern RoadTypes _roadtypes_road; + extern RoadTypes _roadtypes_tram; + return rtt == RTT_ROAD ? _roadtypes_road : _roadtypes_tram; +} inline bool RoadTypeIsRoad(RoadType roadtype) { - return !HasBit(_roadtypes_type, roadtype); + return HasBit(GetMaskForRoadTramType(RTT_ROAD), roadtype); } inline bool RoadTypeIsTram(RoadType roadtype) { - return HasBit(_roadtypes_type, roadtype); + return HasBit(GetMaskForRoadTramType(RTT_TRAM), roadtype); } inline RoadTramType GetRoadTramType(RoadType roadtype) diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 2e405b46c4..eeb426ccd9 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -53,13 +53,9 @@ typedef std::vector RoadVehicleList; RoadTypeInfo _roadtypes[ROADTYPE_END]; std::vector _sorted_roadtypes; ///< Sorted list of road types. -RoadTypes _roadtypes_hidden_mask; - -/** - * Bitmap of road/tram types. - * Bit if set if a roadtype is tram. - */ -RoadTypes _roadtypes_type; +RoadTypes _roadtypes_hidden_mask; ///< Bitset of hidden roadtypes. +RoadTypes _roadtypes_road; ///< Bitset of road roadtypes. +RoadTypes _roadtypes_tram; ///< Bitset of tram roadtypes. /** * Reset all road type information to its default values. @@ -72,7 +68,8 @@ void ResetRoadTypes() std::fill(insert, std::end(_roadtypes), RoadTypeInfo{}); _roadtypes_hidden_mask = ROADTYPES_NONE; - _roadtypes_type = ROADTYPES_TRAM; + _roadtypes_road = ROADTYPES_ROAD; + _roadtypes_tram = ROADTYPES_TRAM; } void ResolveRoadTypeGUISprites(RoadTypeInfo *rti) @@ -159,9 +156,9 @@ RoadType AllocateRoadType(RoadTypeLabel label, RoadTramType rtt) /* Set bitmap of road/tram types */ if (rtt == RTT_TRAM) { - SetBit(_roadtypes_type, rt); + SetBit(_roadtypes_tram, rt); } else { - ClrBit(_roadtypes_type, rt); + SetBit(_roadtypes_road, rt); } return rt; diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 5f98d3e0f5..598c2253a0 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -843,7 +843,7 @@ struct BuildRoadToolbarWindow : Window { break; case GM_EDITOR: - if ((GetRoadTypes(true) & ((rtt == RTT_ROAD) ? ~_roadtypes_type : _roadtypes_type)) == ROADTYPES_NONE) return ES_NOT_HANDLED; + if ((GetRoadTypes(true) & GetMaskForRoadTramType(rtt)) == ROADTYPES_NONE) return ES_NOT_HANDLED; w = ShowBuildRoadScenToolbar(last_build); break; @@ -1767,8 +1767,8 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b } /* Filter listed road types */ - if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= _roadtypes_type; - if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~_roadtypes_type; + if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_ROAD); + if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_TRAM); DropDownList list; @@ -1822,8 +1822,8 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts) /* Filter listed road types */ used_roadtypes &= ~_roadtypes_hidden_mask; - if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= _roadtypes_type; - if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~_roadtypes_type; + if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_ROAD); + if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_TRAM); DropDownList list; diff --git a/src/toolbar_gui.cpp b/src/toolbar_gui.cpp index 72d4256f54..89d7dae284 100644 --- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -2352,8 +2352,8 @@ struct ScenarioEditorToolbarWindow : Window { { this->SetWidgetDisabledState(WID_TE_DATE_BACKWARD, _settings_game.game_creation.starting_year <= CalendarTime::MIN_YEAR); this->SetWidgetDisabledState(WID_TE_DATE_FORWARD, _settings_game.game_creation.starting_year >= CalendarTime::MAX_YEAR); - this->SetWidgetDisabledState(WID_TE_ROADS, (GetRoadTypes(true) & ~_roadtypes_type) == ROADTYPES_NONE); - this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & _roadtypes_type) == ROADTYPES_NONE); + this->SetWidgetDisabledState(WID_TE_ROADS, (GetRoadTypes(true) & GetMaskForRoadTramType(RTT_ROAD)) == ROADTYPES_NONE); + this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & GetMaskForRoadTramType(RTT_TRAM)) == ROADTYPES_NONE); this->DrawWidgets(); }