1
0
Fork 0

Codechange: Use separate RoadTypes mask to list road or tram roadtypes.

This simplifies logic reduces ambiguity.
pull/13892/head
Peter Nelson 2025-03-24 21:35:53 +00:00 committed by Peter Nelson
parent c105adcd96
commit 819e097d6e
5 changed files with 27 additions and 25 deletions

View File

@ -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. * Test if any buildable RoadType is available for a company.
* @param company the company in question * @param company the company in question

View File

@ -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) inline bool RoadTypeIsRoad(RoadType roadtype)
{ {
return !HasBit(_roadtypes_type, roadtype); return HasBit(GetMaskForRoadTramType(RTT_ROAD), roadtype);
} }
inline bool RoadTypeIsTram(RoadType roadtype) inline bool RoadTypeIsTram(RoadType roadtype)
{ {
return HasBit(_roadtypes_type, roadtype); return HasBit(GetMaskForRoadTramType(RTT_TRAM), roadtype);
} }
inline RoadTramType GetRoadTramType(RoadType roadtype) inline RoadTramType GetRoadTramType(RoadType roadtype)

View File

@ -53,13 +53,9 @@ typedef std::vector<RoadVehicle *> RoadVehicleList;
RoadTypeInfo _roadtypes[ROADTYPE_END]; RoadTypeInfo _roadtypes[ROADTYPE_END];
std::vector<RoadType> _sorted_roadtypes; ///< Sorted list of road types. std::vector<RoadType> _sorted_roadtypes; ///< Sorted list of road types.
RoadTypes _roadtypes_hidden_mask; RoadTypes _roadtypes_hidden_mask; ///< Bitset of hidden roadtypes.
RoadTypes _roadtypes_road; ///< Bitset of road roadtypes.
/** RoadTypes _roadtypes_tram; ///< Bitset of tram roadtypes.
* Bitmap of road/tram types.
* Bit if set if a roadtype is tram.
*/
RoadTypes _roadtypes_type;
/** /**
* Reset all road type information to its default values. * Reset all road type information to its default values.
@ -72,7 +68,8 @@ void ResetRoadTypes()
std::fill(insert, std::end(_roadtypes), RoadTypeInfo{}); std::fill(insert, std::end(_roadtypes), RoadTypeInfo{});
_roadtypes_hidden_mask = ROADTYPES_NONE; _roadtypes_hidden_mask = ROADTYPES_NONE;
_roadtypes_type = ROADTYPES_TRAM; _roadtypes_road = ROADTYPES_ROAD;
_roadtypes_tram = ROADTYPES_TRAM;
} }
void ResolveRoadTypeGUISprites(RoadTypeInfo *rti) void ResolveRoadTypeGUISprites(RoadTypeInfo *rti)
@ -159,9 +156,9 @@ RoadType AllocateRoadType(RoadTypeLabel label, RoadTramType rtt)
/* Set bitmap of road/tram types */ /* Set bitmap of road/tram types */
if (rtt == RTT_TRAM) { if (rtt == RTT_TRAM) {
SetBit(_roadtypes_type, rt); SetBit(_roadtypes_tram, rt);
} else { } else {
ClrBit(_roadtypes_type, rt); SetBit(_roadtypes_road, rt);
} }
return rt; return rt;

View File

@ -843,7 +843,7 @@ struct BuildRoadToolbarWindow : Window {
break; break;
case GM_EDITOR: 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); w = ShowBuildRoadScenToolbar(last_build);
break; break;
@ -1767,8 +1767,8 @@ DropDownList GetRoadTypeDropDownList(RoadTramTypes rtts, bool for_replacement, b
} }
/* Filter listed road types */ /* Filter listed road types */
if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= _roadtypes_type; if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_ROAD);
if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~_roadtypes_type; if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_TRAM);
DropDownList list; DropDownList list;
@ -1822,8 +1822,8 @@ DropDownList GetScenRoadTypeDropDownList(RoadTramTypes rtts)
/* Filter listed road types */ /* Filter listed road types */
used_roadtypes &= ~_roadtypes_hidden_mask; used_roadtypes &= ~_roadtypes_hidden_mask;
if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= _roadtypes_type; if (!HasBit(rtts, RTT_ROAD)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_ROAD);
if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~_roadtypes_type; if (!HasBit(rtts, RTT_TRAM)) used_roadtypes &= ~GetMaskForRoadTramType(RTT_TRAM);
DropDownList list; DropDownList list;

View File

@ -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_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_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_ROADS, (GetRoadTypes(true) & GetMaskForRoadTramType(RTT_ROAD)) == ROADTYPES_NONE);
this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & _roadtypes_type) == ROADTYPES_NONE); this->SetWidgetDisabledState(WID_TE_TRAMS, (GetRoadTypes(true) & GetMaskForRoadTramType(RTT_TRAM)) == ROADTYPES_NONE);
this->DrawWidgets(); this->DrawWidgets();
} }