diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 5e1fe53327..a94eea330f 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -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(). */ diff --git a/src/road_map.cpp b/src/road_map.cpp index ec6b14d32a..c5aa6b8c0a 100644 --- a/src/road_map.cpp +++ b/src/road_map.cpp @@ -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: diff --git a/src/road_map.h b/src/road_map.h index aebed25816..350e1c035f 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -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(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; diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 13a51a7c4f..a31e58c029 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -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); diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 669d0197b1..10725cf4b7 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -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; diff --git a/src/script/api/script_order.cpp b/src/script/api/script_order.cpp index f43b5305cb..fbd98e2189 100644 --- a/src/script/api/script_order.cpp +++ b/src/script/api/script_order.cpp @@ -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; diff --git a/src/script/api/script_road.cpp b/src/script/api/script_road.cpp index 1a689f8647..c29e8dedd7 100644 --- a/src/script/api/script_road.cpp +++ b/src/script/api/script_road.cpp @@ -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::Do(tile); } diff --git a/src/script/api/script_tile.cpp b/src/script/api/script_tile.cpp index 57ba12ca78..e837472f7d 100644 --- a/src/script/api/script_tile.cpp +++ b/src/script/api/script_tile.cpp @@ -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;