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.
* @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)
{
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)

View File

@ -53,13 +53,9 @@ typedef std::vector<RoadVehicle *> RoadVehicleList;
RoadTypeInfo _roadtypes[ROADTYPE_END];
std::vector<RoadType> _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;

View File

@ -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;

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_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();
}