diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 03f9ef2254..74ae30c44f 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2829,37 +2829,43 @@ void CcBuildPrimaryVehicle(const CommandCost &result, TileIndex tile, uint32 p1, } /** - * Get the width of a vehicle (including all parts of the consist) in pixels. + * Get the width of a vehicle (part) in pixels. * @param v Vehicle to get the width for. * @return Width of the vehicle. */ -int GetVehicleWidth(Vehicle *v, EngineImageType image_type) +int GetSingleVehicleWidth(const Vehicle *v, EngineImageType image_type) { - int vehicle_width = 0; - switch (v->type) { case VEH_TRAIN: - for (const Train *u = Train::From(v); u != NULL; u = u->Next()) { - vehicle_width += u->GetDisplayImageWidth(); - } - break; + return Train::From(v)->GetDisplayImageWidth(); case VEH_ROAD: - for (const RoadVehicle *u = RoadVehicle::From(v); u != NULL; u = u->Next()) { - vehicle_width += u->GetDisplayImageWidth(); - } - break; + return RoadVehicle::From(v)->GetDisplayImageWidth(); default: bool rtl = _current_text_dir == TD_RTL; SpriteID sprite = v->GetImage(rtl ? DIR_E : DIR_W, image_type); const Sprite *real_sprite = GetSprite(sprite, ST_NORMAL); - vehicle_width = UnScaleGUI(real_sprite->width); - - break; + return UnScaleGUI(real_sprite->width); } +} - return vehicle_width; +/** + * Get the width of a vehicle (including all parts of the consist) in pixels. + * @param v Vehicle to get the width for. + * @return Width of the vehicle. + */ +int GetVehicleWidth(const Vehicle *v, EngineImageType image_type) +{ + if (v->type == VEH_TRAIN || v->type == VEH_ROAD) { + int vehicle_width = 0; + for (const Vehicle *u = v; u != NULL; u = u->Next()) { + vehicle_width += GetSingleVehicleWidth(u, image_type); + } + return vehicle_width; + } else { + return GetSingleVehicleWidth(v, image_type); + } } /** diff --git a/src/vehicle_gui.h b/src/vehicle_gui.h index da98bf0333..92975425df 100644 --- a/src/vehicle_gui.h +++ b/src/vehicle_gui.h @@ -64,7 +64,8 @@ static inline uint GetVehicleHeight(VehicleType type) return (type == VEH_TRAIN || type == VEH_ROAD) ? 14 : 24; } -int GetVehicleWidth(Vehicle *v, EngineImageType image_type); +int GetSingleVehicleWidth(const Vehicle *v, EngineImageType image_type); +int GetVehicleWidth(const Vehicle *v, EngineImageType image_type); /** Dimensions of a cell in the purchase/depot windows. */ struct VehicleCellSize {