Script: Add ScriptRoad methods related to road types

This commit is contained in:
Jonathan G Rennison
2022-01-09 23:03:12 +00:00
parent dfc6e309d0
commit 579c71dd44
4 changed files with 127 additions and 2 deletions

View File

@@ -98,6 +98,22 @@
return ::GetAnyRoadBits(tile, ::GetRoadTramType((::RoadType)road_type), false) != ROAD_NONE;
}
/* static */ bool ScriptRoad::HasRoadTramType(TileIndex tile, RoadTramTypes road_tram_type)
{
if (!ScriptMap::IsValidTile(tile)) return false;
if (road_tram_type != ROADTRAMTYPES_ROAD && road_tram_type != ROADTRAMTYPES_TRAM) return false;
return ::GetAnyRoadBits(tile, (::RoadTramType)road_tram_type, false) != ROAD_NONE;
}
/* static */ ScriptRoad::RoadType ScriptRoad::GetRoadType(TileIndex tile, RoadTramTypes road_tram_type)
{
if (!ScriptMap::IsValidTile(tile)) return ROADTYPE_INVALID;
if (road_tram_type != ROADTRAMTYPES_ROAD && road_tram_type != ROADTRAMTYPES_TRAM) return ROADTYPE_INVALID;
if (::GetAnyRoadBits(tile, (::RoadTramType)road_tram_type, false) == ROAD_NONE) return ROADTYPE_INVALID;
return (RoadType)::GetRoadType(tile, (::RoadTramType)road_tram_type);
}
/* static */ bool ScriptRoad::AreRoadTilesConnected(TileIndex t1, TileIndex t2)
{
if (!::IsValidTile(t1)) return false;
@@ -644,3 +660,31 @@ static bool NeighbourHasReachableRoad(::RoadType rt, TileIndex start_tile, DiagD
return GetRoadTypeInfo((::RoadType)roadtype)->maintenance_multiplier;
}
/* static */ bool ScriptRoad::IsCatenaryRoadType(RoadType roadtype)
{
if (!ScriptRoad::IsRoadTypeAvailable(roadtype)) return false;
return HasBit(GetRoadTypeInfo((::RoadType)roadtype)->flags, ROTF_CATENARY);
}
/* static */ bool ScriptRoad::IsNonLevelCrossingRoadType(RoadType roadtype)
{
if (!ScriptRoad::IsRoadTypeAvailable(roadtype)) return false;
return HasBit(GetRoadTypeInfo((::RoadType)roadtype)->flags, ROTF_NO_LEVEL_CROSSING);
}
/* static */ bool ScriptRoad::IsNoTownHousesRoadType(RoadType roadtype)
{
if (!ScriptRoad::IsRoadTypeAvailable(roadtype)) return false;
return HasBit(GetRoadTypeInfo((::RoadType)roadtype)->flags, ROTF_NO_HOUSES);
}
/* static */ bool ScriptRoad::IsTownBuildableRoadType(RoadType roadtype)
{
if (!ScriptRoad::IsRoadTypeAvailable(roadtype)) return false;
return HasBit(GetRoadTypeInfo((::RoadType)roadtype)->flags, ROTF_TOWN_BUILD) && !HasBit(GetRoadTypeInfo((::RoadType)roadtype)->extra_flags, RXTF_NO_TOWN_MODIFICATION);
}