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.
|
* Test if any buildable RoadType is available for a company.
|
||||||
* @param company the company in question
|
* @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)
|
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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue