Codechange: Use enum class for RoadTileType.

This commit is contained in:
Peter Nelson
2025-11-17 19:49:36 +00:00
committed by dP
parent c2554e3149
commit 33b77c6616
8 changed files with 57 additions and 57 deletions

View File

@@ -398,7 +398,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie
}
switch (GetRoadTileType(tile)) {
case ROAD_TILE_NORMAL: {
case RoadTileType::Normal: {
Slope tileh = GetTileSlope(tile);
/* Steep slopes behave the same as slopes with one corner raised. */
@@ -479,7 +479,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie
return cost;
}
case ROAD_TILE_CROSSING: {
case RoadTileType::Crossing: {
if (pieces & ComplementRoadBits(GetCrossingRoadBits(tile))) {
return CMD_ERROR;
}
@@ -514,7 +514,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie
}
default:
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
return CMD_ERROR;
}
}
@@ -632,7 +632,7 @@ CommandCost CmdBuildRoad(DoCommandFlags flags, TileIndex tile, RoadBits pieces,
switch (GetTileType(tile)) {
case MP_ROAD:
switch (GetRoadTileType(tile)) {
case ROAD_TILE_NORMAL: {
case RoadTileType::Normal: {
if (HasRoadWorks(tile)) return CommandCost(STR_ERROR_ROAD_WORKS_IN_PROGRESS);
other_bits = GetRoadBits(tile, OtherRoadTramType(rtt));
@@ -686,7 +686,7 @@ CommandCost CmdBuildRoad(DoCommandFlags flags, TileIndex tile, RoadBits pieces,
break;
}
case ROAD_TILE_CROSSING:
case RoadTileType::Crossing:
if (RoadNoLevelCrossing(rt)) {
return CommandCost(STR_ERROR_CROSSING_DISALLOWED_ROAD);
}
@@ -698,7 +698,7 @@ CommandCost CmdBuildRoad(DoCommandFlags flags, TileIndex tile, RoadBits pieces,
if (HasTileRoadType(tile, rtt)) return CommandCost(STR_ERROR_ALREADY_BUILT);
break;
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
if ((GetAnyRoadBits(tile, rtt) & pieces) == pieces) return CommandCost(STR_ERROR_ALREADY_BUILT);
goto do_clear;
@@ -873,12 +873,12 @@ do_clear:;
switch (GetTileType(tile)) {
case MP_ROAD: {
RoadTileType rttype = GetRoadTileType(tile);
if (existing == ROAD_NONE || rttype == ROAD_TILE_CROSSING) {
if (existing == ROAD_NONE || rttype == RoadTileType::Crossing) {
SetRoadType(tile, rtt, rt);
SetRoadOwner(tile, rtt, company);
if (rtt == RTT_ROAD) SetTownIndex(tile, town_id);
}
if (rttype != ROAD_TILE_CROSSING) SetRoadBits(tile, existing | pieces, rtt);
if (rttype != RoadTileType::Crossing) SetRoadBits(tile, existing | pieces, rtt);
break;
}
@@ -1221,7 +1221,7 @@ static CommandCost RemoveRoadDepot(TileIndex tile, DoCommandFlags flags)
static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags)
{
switch (GetRoadTileType(tile)) {
case ROAD_TILE_NORMAL: {
case RoadTileType::Normal: {
RoadBits b = GetAllRoadBits(tile);
/* Clear the road if only one piece is on the tile OR we are not using the DoCommandFlag::Auto flag */
@@ -1239,7 +1239,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags)
return CommandCost(STR_ERROR_MUST_REMOVE_ROAD_FIRST);
}
case ROAD_TILE_CROSSING: {
case RoadTileType::Crossing: {
CommandCost ret(EXPENSES_CONSTRUCTION);
if (flags.Test(DoCommandFlag::Auto)) return CommandCost(STR_ERROR_MUST_REMOVE_ROAD_FIRST);
@@ -1261,7 +1261,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags)
}
default:
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
if (flags.Test(DoCommandFlag::Auto)) {
return CommandCost(STR_ERROR_BUILDING_MUST_BE_DEMOLISHED);
}
@@ -1695,7 +1695,7 @@ static void DrawTile_Road(TileInfo *ti)
{
BridgePillarFlags blocked_pillars{};
switch (GetRoadTileType(ti->tile)) {
case ROAD_TILE_NORMAL:
case RoadTileType::Normal:
DrawRoadBits(ti);
if (IsBridgeAbove(ti->tile)) {
@@ -1707,7 +1707,7 @@ static void DrawTile_Road(TileInfo *ti)
}
break;
case ROAD_TILE_CROSSING: {
case RoadTileType::Crossing: {
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
Axis axis = GetCrossingRailAxis(ti->tile);
@@ -1817,7 +1817,7 @@ static void DrawTile_Road(TileInfo *ti)
}
default:
case ROAD_TILE_DEPOT: {
case RoadTileType::Depot: {
if (ti->tileh != SLOPE_FLAT) DrawFoundation(ti, FOUNDATION_LEVELED);
PaletteID palette = GetCompanyPalette(GetTileOwner(ti->tile));
@@ -2121,7 +2121,7 @@ static TrackStatus GetTileTrackStatus_Road(TileIndex tile, TransportType mode, u
RoadTramType rtt = (RoadTramType)sub_mode;
if (!HasTileRoadType(tile, rtt)) break;
switch (GetRoadTileType(tile)) {
case ROAD_TILE_NORMAL: {
case RoadTileType::Normal: {
const uint drd_to_multiplier[DRD_END] = { 0x101, 0x100, 0x1, 0x0 };
RoadBits bits = GetRoadBits(tile, rtt);
@@ -2133,7 +2133,7 @@ static TrackStatus GetTileTrackStatus_Road(TileIndex tile, TransportType mode, u
break;
}
case ROAD_TILE_CROSSING: {
case RoadTileType::Crossing: {
Axis axis = GetCrossingRoadAxis(tile);
if (side != INVALID_DIAGDIR && axis != DiagDirToAxis(side)) break;
@@ -2155,7 +2155,7 @@ static TrackStatus GetTileTrackStatus_Road(TileIndex tile, TransportType mode, u
}
default:
case ROAD_TILE_DEPOT: {
case RoadTileType::Depot: {
DiagDirection dir = GetRoadDepotDirection(tile);
if (side != INVALID_DIAGDIR && side != dir) break;
@@ -2205,7 +2205,7 @@ static void GetTileDesc_Road(TileIndex tile, TileDesc &td)
}
switch (GetRoadTileType(tile)) {
case ROAD_TILE_CROSSING: {
case RoadTileType::Crossing: {
td.str = STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING;
rail_owner = GetTileOwner(tile);
@@ -2216,7 +2216,7 @@ static void GetTileDesc_Road(TileIndex tile, TileDesc &td)
break;
}
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
td.str = STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT;
td.build_date = Depot::GetByTile(tile)->build_date;
break;
@@ -2260,7 +2260,7 @@ static const uint8_t _roadveh_enter_depot_dir[4] = {
static VehicleEnterTileStates VehicleEnter_Road(Vehicle *v, TileIndex tile, int, int)
{
switch (GetRoadTileType(tile)) {
case ROAD_TILE_DEPOT: {
case RoadTileType::Depot: {
if (v->type != VEH_ROAD) break;
RoadVehicle *rv = RoadVehicle::From(v);
@@ -2342,15 +2342,15 @@ static CommandCost TerraformTile_Road(TileIndex tile, DoCommandFlags flags, int
{
if (_settings_game.construction.build_on_slopes && AutoslopeEnabled()) {
switch (GetRoadTileType(tile)) {
case ROAD_TILE_CROSSING:
case RoadTileType::Crossing:
if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]);
break;
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return CommandCost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_FOUNDATION]);
break;
case ROAD_TILE_NORMAL: {
case RoadTileType::Normal: {
RoadBits bits = GetAllRoadBits(tile);
RoadBits bits_copy = bits;
/* Check if the slope-road_bits combination is valid at all, i.e. it is safe to call GetRoadFoundation(). */

View File

@@ -59,9 +59,9 @@ RoadBits GetAnyRoadBits(Tile tile, RoadTramType rtt, bool straight_tunnel_bridge
case MP_ROAD:
switch (GetRoadTileType(tile)) {
default:
case ROAD_TILE_NORMAL: return GetRoadBits(tile, rtt);
case ROAD_TILE_CROSSING: return GetCrossingRoadBits(tile);
case ROAD_TILE_DEPOT: return DiagDirToRoadBits(GetRoadDepotDirection(tile));
case RoadTileType::Normal: return GetRoadBits(tile, rtt);
case RoadTileType::Crossing: return GetCrossingRoadBits(tile);
case RoadTileType::Depot: return DiagDirToRoadBits(GetRoadDepotDirection(tile));
}
case MP_STATION:

View File

@@ -19,10 +19,10 @@
/** The different types of road tiles. */
enum RoadTileType : uint8_t {
ROAD_TILE_NORMAL, ///< Normal road
ROAD_TILE_CROSSING, ///< Level crossing
ROAD_TILE_DEPOT, ///< Depot (one entrance)
enum class RoadTileType : uint8_t {
Normal = 0, ///< Normal road
Crossing = 1, ///< Level crossing
Depot = 2, ///< Depot (one entrance)
};
bool MayHaveRoad(Tile t);
@@ -36,7 +36,7 @@ bool MayHaveRoad(Tile t);
debug_inline static RoadTileType GetRoadTileType(Tile t)
{
assert(IsTileType(t, MP_ROAD));
return (RoadTileType)GB(t.m5(), 6, 2);
return static_cast<RoadTileType>(GB(t.m5(), 6, 2));
}
/**
@@ -47,7 +47,7 @@ debug_inline static RoadTileType GetRoadTileType(Tile t)
*/
debug_inline static bool IsNormalRoad(Tile t)
{
return GetRoadTileType(t) == ROAD_TILE_NORMAL;
return GetRoadTileType(t) == RoadTileType::Normal;
}
/**
@@ -68,7 +68,7 @@ debug_inline static bool IsNormalRoadTile(Tile t)
*/
inline bool IsLevelCrossing(Tile t)
{
return GetRoadTileType(t) == ROAD_TILE_CROSSING;
return GetRoadTileType(t) == RoadTileType::Crossing;
}
/**
@@ -89,7 +89,7 @@ inline bool IsLevelCrossingTile(Tile t)
*/
debug_inline static bool IsRoadDepot(Tile t)
{
return GetRoadTileType(t) == ROAD_TILE_DEPOT;
return GetRoadTileType(t) == RoadTileType::Depot;
}
/**
@@ -618,7 +618,7 @@ inline void MakeRoadNormal(Tile t, RoadBits bits, RoadType road_rt, RoadType tra
SetTileOwner(t, road);
t.m2() = town.base();
t.m3() = (tram_rt != INVALID_ROADTYPE ? bits : 0);
t.m5() = (road_rt != INVALID_ROADTYPE ? bits : 0) | ROAD_TILE_NORMAL << 6;
t.m5() = (road_rt != INVALID_ROADTYPE ? bits : 0) | to_underlying(RoadTileType::Normal) << 6;
SB(t.m6(), 2, 6, 0);
t.m7() = 0;
t.m8() = 0;
@@ -645,7 +645,7 @@ inline void MakeRoadCrossing(Tile t, Owner road, Owner tram, Owner rail, Axis ro
t.m2() = town.base();
t.m3() = 0;
t.m4() = INVALID_ROADTYPE;
t.m5() = ROAD_TILE_CROSSING << 6 | roaddir;
t.m5() = to_underlying(RoadTileType::Crossing) << 6 | roaddir;
SB(t.m6(), 2, 6, 0);
t.m7() = road.base();
t.m8() = INVALID_ROADTYPE << 6 | rat;
@@ -679,7 +679,7 @@ inline void MakeRoadDepot(Tile tile, Owner owner, DepotID depot_id, DiagDirectio
tile.m2() = depot_id.base();
tile.m3() = 0;
tile.m4() = INVALID_ROADTYPE;
tile.m5() = ROAD_TILE_DEPOT << 6 | dir;
tile.m5() = to_underlying(RoadTileType::Depot) << 6 | dir;
SB(tile.m6(), 2, 6, 0);
tile.m7() = owner.base();
tile.m8() = INVALID_ROADTYPE << 6;

View File

@@ -164,7 +164,7 @@ static void ConvertTownOwner()
for (auto tile : Map::Iterate()) {
switch (GetTileType(tile)) {
case MP_ROAD:
if (GB(tile.m5(), 4, 2) == ROAD_TILE_CROSSING && HasBit(tile.m3(), 7)) {
if (GB(tile.m5(), 4, 2) == to_underlying(RoadTileType::Crossing) && HasBit(tile.m3(), 7)) {
tile.m3() = OWNER_TOWN.base();
}
[[fallthrough]];
@@ -457,7 +457,7 @@ static void FixOwnerOfRailTrack(Tile t)
SetTileType(t, MP_ROAD);
SetTileOwner(t, road);
t.m3() = (hasroad ? bits : 0);
t.m5() = (hastram ? bits : 0) | ROAD_TILE_NORMAL << 6;
t.m5() = (hastram ? bits : 0) | to_underlying(RoadTileType::Normal) << 6;
SB(t.m6(), 2, 4, 0);
SetRoadOwner(t, RTT_TRAM, tram);
return;
@@ -1007,8 +1007,8 @@ bool AfterLoadGame()
case MP_ROAD:
t.m4() |= (t.m2() << 4);
if (GB(t.m5(), 4, 2) == ROAD_TILE_DEPOT) break;
if ((GB(t.m5(), 4, 2) == ROAD_TILE_CROSSING ? (Owner)t.m3() : GetTileOwner(t)) == OWNER_TOWN) {
if (GB(t.m5(), 4, 2) == to_underlying(RoadTileType::Depot)) break;
if ((GB(t.m5(), 4, 2) == to_underlying(RoadTileType::Crossing) ? (Owner)t.m3() : GetTileOwner(t)) == OWNER_TOWN) {
SetTownIndex(t, CalcClosestTownFromTile(t)->index);
} else {
SetTownIndex(t, TownID::Begin());
@@ -1090,15 +1090,15 @@ bool AfterLoadGame()
SB(t.m5(), 6, 2, GB(t.m5(), 4, 2));
switch (GetRoadTileType(t)) {
default: SlErrorCorrupt("Invalid road tile type");
case ROAD_TILE_NORMAL:
case RoadTileType::Normal:
SB(t.m4(), 0, 4, GB(t.m5(), 0, 4));
SB(t.m4(), 4, 4, 0);
SB(t.m6(), 2, 4, 0);
break;
case ROAD_TILE_CROSSING:
case RoadTileType::Crossing:
SB(t.m4(), 5, 2, GB(t.m5(), 2, 2));
break;
case ROAD_TILE_DEPOT: break;
case RoadTileType::Depot: break;
}
SB(t.m7(), 6, 2, 1); // Set pre-NRT road type bits for conversion later.
break;
@@ -1131,7 +1131,7 @@ bool AfterLoadGame()
SB(t.m7(), 5, 1, GB(t.m3(), 7, 1)); // snow/desert
switch (GetRoadTileType(t)) {
default: SlErrorCorrupt("Invalid road tile type");
case ROAD_TILE_NORMAL:
case RoadTileType::Normal:
SB(t.m7(), 0, 4, GB(t.m3(), 0, 4)); // road works
SB(t.m6(), 3, 3, GB(t.m3(), 4, 3)); // ground
SB(t.m3(), 0, 4, GB(t.m4(), 4, 4)); // tram bits
@@ -1139,7 +1139,7 @@ bool AfterLoadGame()
SB(t.m5(), 0, 4, GB(t.m4(), 0, 4)); // road bits
break;
case ROAD_TILE_CROSSING:
case RoadTileType::Crossing:
SB(t.m7(), 0, 5, GB(t.m4(), 0, 5)); // road owner
SB(t.m6(), 3, 3, GB(t.m3(), 4, 3)); // ground
SB(t.m3(), 4, 4, GB(t.m5(), 0, 4)); // tram owner
@@ -1147,7 +1147,7 @@ bool AfterLoadGame()
SB(t.m5(), 5, 1, GB(t.m4(), 5, 1)); // crossing state
break;
case ROAD_TILE_DEPOT:
case RoadTileType::Depot:
break;
}
if (!IsRoadDepot(t) && !HasTownOwnedRoad(t)) {
@@ -1241,7 +1241,7 @@ bool AfterLoadGame()
SetTileType(t, MP_ROAD);
t.m2() = town.base();
t.m3() = 0;
t.m5() = (axis == AXIS_X ? ROAD_Y : ROAD_X) | ROAD_TILE_NORMAL << 6;
t.m5() = (axis == AXIS_X ? ROAD_Y : ROAD_X) | to_underlying(RoadTileType::Normal) << 6;
SB(t.m6(), 2, 4, 0);
t.m7() = 1 << 6;
SetRoadOwner(t, RTT_TRAM, OWNER_NONE);

View File

@@ -245,13 +245,13 @@ static bool FixTTOMapArray()
case MP_ROAD: // road (depot) or level crossing
switch (GB(tile.m5(), 4, 4)) {
case 0: // ROAD_TILE_NORMAL
case 0: // RoadTileType::Normal
if (tile.m2() == 4) tile.m2() = 5; // 'small trees' -> ROADSIDE_TREES
break;
case 1: // ROAD_TILE_CROSSING (there aren't monorail crossings in TTO)
case 1: // RoadTileType::Crossing (there aren't monorail crossings in TTO)
tile.m3() = tile.m1(); // set owner of road = owner of rail
break;
case 2: // ROAD_TILE_DEPOT
case 2: // RoadTileType::Depot
break;
default:
return false;

View File

@@ -40,7 +40,7 @@ static OrderType GetOrderTypeByTile(TileIndex t)
return OT_GOTO_STATION;
case MP_WATER: if (::IsShipDepot(t)) return OT_GOTO_DEPOT; break;
case MP_ROAD: if (::GetRoadTileType(t) == ROAD_TILE_DEPOT) return OT_GOTO_DEPOT; break;
case MP_ROAD: if (::GetRoadTileType(t) == RoadTileType::Depot) return OT_GOTO_DEPOT; break;
case MP_RAILWAY:
if (IsRailDepot(t)) return OT_GOTO_DEPOT;
break;

View File

@@ -37,7 +37,7 @@
{
if (!::IsValidTile(tile)) return false;
return (::IsTileType(tile, MP_ROAD) && ::GetRoadTileType(tile) != ROAD_TILE_DEPOT) ||
return (::IsTileType(tile, MP_ROAD) && ::GetRoadTileType(tile) != RoadTileType::Depot) ||
IsDriveThroughRoadStationTile(tile);
}
@@ -46,7 +46,7 @@
if (!::IsValidTile(tile)) return false;
if (!IsRoadTypeAvailable(GetCurrentRoadType())) return false;
return ::IsTileType(tile, MP_ROAD) && ::GetRoadTileType(tile) == ROAD_TILE_DEPOT &&
return ::IsTileType(tile, MP_ROAD) && ::GetRoadTileType(tile) == RoadTileType::Depot &&
::GetPresentRoadTypes(tile).Test(::RoadType(GetCurrentRoadType()));
}
@@ -465,7 +465,7 @@ static bool NeighbourHasReachableRoad(::RoadType rt, TileIndex start_tile, DiagD
switch (::GetTileType(neighbour_tile)) {
case MP_ROAD:
return (::GetRoadTileType(neighbour_tile) != ROAD_TILE_DEPOT);
return (::GetRoadTileType(neighbour_tile) != RoadTileType::Depot);
case MP_STATION:
if (::IsDriveThroughStopTile(neighbour_tile)) {
@@ -623,7 +623,7 @@ static bool NeighbourHasReachableRoad(::RoadType rt, TileIndex start_tile, DiagD
EnforceCompanyModeValid(false);
EnforcePrecondition(false, ::IsValidTile(tile));
EnforcePrecondition(false, IsTileType(tile, MP_ROAD))
EnforcePrecondition(false, GetRoadTileType(tile) == ROAD_TILE_DEPOT);
EnforcePrecondition(false, GetRoadTileType(tile) == RoadTileType::Depot);
return ScriptObject::Command<CMD_LANDSCAPE_CLEAR>::Do(tile);
}

View File

@@ -37,7 +37,7 @@
/* Tram bits aren't considered buildable */
if (::GetRoadTypeTram(tile) != INVALID_ROADTYPE) return false;
/* Depots and crossings aren't considered buildable */
if (::GetRoadTileType(tile) != ROAD_TILE_NORMAL) return false;
if (::GetRoadTileType(tile) != RoadTileType::Normal) return false;
if (!HasExactlyOneBit(::GetRoadBits(tile, RTT_ROAD))) return false;
if (::IsRoadOwner(tile, RTT_ROAD, OWNER_TOWN)) return true;
if (::IsRoadOwner(tile, RTT_ROAD, ScriptObject::GetCompany())) return true;