mirror of https://github.com/OpenTTD/OpenTTD
Codechange: Use separate RoadTypes mask to list road or tram roadtypes.
This simplifies logic reduces ambiguity.pull/13892/head
parent
c105adcd96
commit
819e097d6e
|
@ -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
|
||||
|
|
16
src/road.h
16
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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue