1
0
Fork 0

Revert 8fa61533: "Fix 30ae072: when a road type is hidden, towns may not build them even when that flag is set"

This reverts commit 8fa61533f0.
pull/10814/head
Peter Nelson 2023-03-30 09:34:26 +01:00 committed by Michael Lutz
parent 3a03a12a9c
commit 5059e23ed5
2 changed files with 10 additions and 3 deletions

View File

@ -112,7 +112,14 @@ bool HasRoadTypeAvail(const CompanyID company, RoadType roadtype)
{ {
if (company == OWNER_DEITY || company == OWNER_TOWN || _game_mode == GM_EDITOR || _generating_world) { if (company == OWNER_DEITY || company == OWNER_TOWN || _game_mode == GM_EDITOR || _generating_world) {
const RoadTypeInfo *rti = GetRoadTypeInfo(roadtype); const RoadTypeInfo *rti = GetRoadTypeInfo(roadtype);
return rti->label != 0 && (rti->flags & ROTFB_HIDDEN) == 0; if (rti->label == 0) return false;
/*
* Do not allow building hidden road types, except when a town may build it.
* The GS under deity mode, as well as anybody in the editor builds roads that are
* owned by towns. So if a town may build it, it should be buildable by them too.
*/
return (rti->flags & ROTFB_HIDDEN) == 0 || (rti->flags & ROTFB_TOWN_BUILD) != 0;
} else { } else {
const Company *c = Company::GetIfValid(company); const Company *c = Company::GetIfValid(company);
if (c == nullptr) return false; if (c == nullptr) return false;

View File

@ -39,14 +39,14 @@ enum RoadTypeFlags {
ROTF_NO_LEVEL_CROSSING, ///< Bit number for disabling level crossing ROTF_NO_LEVEL_CROSSING, ///< Bit number for disabling level crossing
ROTF_NO_HOUSES, ///< Bit number for setting this roadtype as not house friendly ROTF_NO_HOUSES, ///< Bit number for setting this roadtype as not house friendly
ROTF_HIDDEN, ///< Bit number for hidden from construction. ROTF_HIDDEN, ///< Bit number for hidden from construction.
ROTF_TOWN_BUILD, ///< Bit number for allowing towns to build this roadtype. Does not override ROTF_HIDDEN. ROTF_TOWN_BUILD, ///< Bit number for allowing towns to build this roadtype.
ROTFB_NONE = 0, ///< All flags cleared. ROTFB_NONE = 0, ///< All flags cleared.
ROTFB_CATENARY = 1 << ROTF_CATENARY, ///< Value for drawing a catenary. ROTFB_CATENARY = 1 << ROTF_CATENARY, ///< Value for drawing a catenary.
ROTFB_NO_LEVEL_CROSSING = 1 << ROTF_NO_LEVEL_CROSSING, ///< Value for disabling a level crossing. ROTFB_NO_LEVEL_CROSSING = 1 << ROTF_NO_LEVEL_CROSSING, ///< Value for disabling a level crossing.
ROTFB_NO_HOUSES = 1 << ROTF_NO_HOUSES, ///< Value for for setting this roadtype as not house friendly. ROTFB_NO_HOUSES = 1 << ROTF_NO_HOUSES, ///< Value for for setting this roadtype as not house friendly.
ROTFB_HIDDEN = 1 << ROTF_HIDDEN, ///< Value for hidden from construction. ROTFB_HIDDEN = 1 << ROTF_HIDDEN, ///< Value for hidden from construction.
ROTFB_TOWN_BUILD = 1 << ROTF_TOWN_BUILD, ///< Value for allowing towns to build this roadtype. Does not override ROTFB_HIDDEN. ROTFB_TOWN_BUILD = 1 << ROTF_TOWN_BUILD, ///< Value for allowing towns to build this roadtype.
}; };
DECLARE_ENUM_AS_BIT_SET(RoadTypeFlags) DECLARE_ENUM_AS_BIT_SET(RoadTypeFlags)