From 356ca9c6d9e33af779f5a46ecdf9daebe822da97 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 27 May 2026 18:16:13 +0100 Subject: [PATCH] Codechange: use static_cast/to_underlying when converting Direction --- src/aircraft_cmd.cpp | 4 ++-- src/direction_func.h | 6 +++--- src/newgrf_engine.cpp | 4 ++-- src/roadveh_cmd.cpp | 4 ++-- src/ship_cmd.cpp | 4 ++-- src/train_cmd.cpp | 2 +- src/tree_cmd.cpp | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 0d934faa59..1ec5ea3ed0 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -179,7 +179,7 @@ void Aircraft::GetImage(Direction direction, EngineImageType image_type, Vehicle } assert(IsValidImageIndex(spritenum)); - result->Set(direction + _aircraft_sprite[spritenum]); + result->Set(to_underlying(direction) + _aircraft_sprite[spritenum]); } void GetRotorImage(const Aircraft *v, EngineImageType image_type, VehicleSpriteSeq *result) @@ -209,7 +209,7 @@ static void GetAircraftIcon(EngineID engine, EngineImageType image_type, Vehicle } assert(IsValidImageIndex(spritenum)); - result->Set(DIR_W + _aircraft_sprite[spritenum]); + result->Set(to_underlying(Direction::W) + _aircraft_sprite[spritenum]); } void DrawAircraftEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) diff --git a/src/direction_func.h b/src/direction_func.h index 652fed34be..ae6ca8e653 100644 --- a/src/direction_func.h +++ b/src/direction_func.h @@ -54,7 +54,7 @@ inline bool IsValidAxis(Axis d) inline Direction ReverseDir(Direction d) { assert(IsValidDirection(d)); - return (Direction)(4 ^ d); + return static_cast(4 ^ to_underlying(d)); } @@ -176,7 +176,7 @@ inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta) inline DiagDirection DirToDiagDir(Direction dir) { assert(IsValidDirection(dir)); - return static_cast(dir >> 1); + return static_cast(to_underlying(dir) >> 1); } /** @@ -300,7 +300,7 @@ inline DiagDirection XYNSToDiagDir(Axis xy, uint ns) inline bool IsDiagonalDirection(Direction dir) { assert(IsValidDirection(dir)); - return (dir & 1) != 0; + return (to_underlying(dir) & 1) != 0; } #endif /* DIRECTION_FUNC_H */ diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp index ff2e65550d..7e9900487b 100644 --- a/src/newgrf_engine.cpp +++ b/src/newgrf_engine.cpp @@ -813,7 +813,7 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec case 0x1C: return v->y_pos; case 0x1D: return GB(v->y_pos, 8, 8); case 0x1E: return v->z_pos; - case 0x1F: return object->rotor_in_gui ? DIR_W : v->direction; // for rotors the spriteset contains animation frames, so NewGRF need a different way to tell the helicopter orientation. + case 0x1F: return to_underlying(object->rotor_in_gui ? Direction::W : v->direction); // for rotors the spriteset contains animation frames, so NewGRF need a different way to tell the helicopter orientation. case 0x20: break; // not implemented case 0x21: break; // not implemented case 0x22: break; // not implemented @@ -1120,7 +1120,7 @@ static void GetCustomEngineSprite(EngineID engine, const Vehicle *v, Direction d const auto *group = object.Resolve(); int32_t reg100 = sprite_stack ? object.GetRegister(0x100) : 0; if (group != nullptr && group->num_sprites != 0) { - result->seq[result->count].sprite = group->sprite + (direction % group->num_sprites); + result->seq[result->count].sprite = group->sprite + (to_underlying(direction) % group->num_sprites); result->seq[result->count].pal = GB(reg100, 0, 16); // zero means default recolouring result->count++; } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 30e3c7677d..fb4b6fde87 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -116,7 +116,7 @@ static void GetRoadVehIcon(EngineID engine, EngineImageType image_type, VehicleS } assert(IsValidImageIndex(spritenum)); - result->Set(DIR_W + _roadveh_images[spritenum]); + result->Set(to_underlying(Direction::W) + _roadveh_images[spritenum]); } void RoadVehicle::GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const @@ -132,7 +132,7 @@ void RoadVehicle::GetImage(Direction direction, EngineImageType image_type, Vehi } assert(IsValidImageIndex(spritenum)); - SpriteID sprite = direction + _roadveh_images[spritenum]; + SpriteID sprite = to_underlying(direction) + _roadveh_images[spritenum]; if (this->cargo.StoredCount() >= this->cargo_cap / 2U) sprite += _roadveh_full_adder[spritenum]; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 35a8635951..f2a8ad4c4e 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -91,7 +91,7 @@ static void GetShipIcon(EngineID engine, EngineImageType image_type, VehicleSpri } assert(IsValidImageIndex(spritenum)); - result->Set(DIR_W + _ship_sprites[spritenum]); + result->Set(to_underlying(Direction::W) + _ship_sprites[spritenum]); } void DrawShipEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type) @@ -145,7 +145,7 @@ void Ship::GetImage(Direction direction, EngineImageType image_type, VehicleSpri } assert(IsValidImageIndex(spritenum)); - result->Set(_ship_sprites[spritenum] + direction); + result->Set(_ship_sprites[spritenum] + to_underlying(direction)); } static const Depot *FindClosestShipDepot(const Vehicle *v, uint max_distance) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index a5b8fd30b7..d5ca320160 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -500,7 +500,7 @@ int Train::GetDisplayImageWidth(Point *offset) const static SpriteID GetDefaultTrainSprite(uint8_t spritenum, Direction direction) { assert(IsValidImageIndex(spritenum)); - return ((direction + _engine_sprite_add[spritenum]) & _engine_sprite_and[spritenum]) + _engine_sprite_base[spritenum]; + return ((to_underlying(direction) + _engine_sprite_add[spritenum]) & _engine_sprite_and[spritenum]) + _engine_sprite_base[spritenum]; } /** diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index bfcba8b910..416d5b076d 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -892,7 +892,7 @@ static void TileLoop_Trees(TileIndex tile) TreeType treetype = GetTreeType(tile); - tile += TileOffsByDir(static_cast(Random() % DIR_END)); + tile += TileOffsByDir(static_cast(RandomRange(to_underlying(Direction::End)))); if (!CanPlantTreesOnTile(tile, false)) return;