Skip to content

Commit

Permalink
Remove ImageId::FromUInt32 and ToUInt32 (OpenRCT2#23415)
Browse files Browse the repository at this point in the history
* Allow high image ids when rendering an inline sprite

* CustomWindow: refactor use of ImageId::FromUInt32

* Dropdown: refactor use of ImageId::FromUInt32, ToUInt32

* Remove ImageId::FromUInt32

* Fix typo in mechanic status string ids

* Rewrite InventoryFormatItem to not use inline sprites any more

* Widget: replace ImageId::ToUInt32 with ImageId::GetIndex

* Remove ImageId::ToUInt32
  • Loading branch information
AaronVanGeffen authored Dec 17, 2024
1 parent cbe8963 commit 2a3a723
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 69 deletions.
1 change: 0 additions & 1 deletion data/language/en-GB.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1258,7 +1258,6 @@ STR_1870 :Number of complete rotations
STR_1871 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COMMA16}
STR_1873 :{WINDOW_COLOUR_2}Income: {BLACK}{CURRENCY2DP} per hour
STR_1874 :{WINDOW_COLOUR_2}Profit: {BLACK}{CURRENCY2DP} per hour
STR_1875 :{BLACK} {SPRITE}{BLACK} {STRINGID}
STR_1876 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{251}{19}{00}{00}Inspect Rides
STR_1877 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{252}{19}{00}{00}Fix Rides
STR_1878 :{WINDOW_COLOUR_2}Inspection:
Expand Down
5 changes: 2 additions & 3 deletions src/openrct2-ui/UiStringIds.h
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,6 @@ namespace OpenRCT2
STR_GUEST_EXPENSES_RIDE_PLURAL = 2298,
STR_GUEST_EXPENSES_SOUVENIR = 2303,
STR_GUEST_EXPENSES_SOUVENIR_PLURAL = 2304,
STR_GUEST_ITEM_FORMAT = 1875,
STR_GUEST_LABEL_RIDES_BEEN_ON = 2292,
STR_GUEST_RECENT_THOUGHTS_LABEL = 1654,
STR_GUEST_RENAME_PROMPT = 1453,
Expand Down Expand Up @@ -1475,8 +1474,8 @@ namespace OpenRCT2
STR_MAX_SPEED = 1340,
STR_MAX_VEHICLES_TIP = 5922,
STR_MEASUREMENTS_AND_TEST_DATA_TIP = 1398,
STR_MEHCANIC_IS_FIXING_THE_RIDE = 3119,
STR_MEHCANIC_IS_HEADING_FOR_THE_RIDE = 3118,
STR_MECHANIC_IS_FIXING_THE_RIDE = 3119,
STR_MECHANIC_IS_HEADING_FOR_THE_RIDE = 3118,
STR_MINIMUM_LENGTH_BEFORE_DEPARTING_TIP = 1213,
STR_MINIMUM_WAITING_TIME = 1211,
STR_MOVING_TO_END_OF = 1098,
Expand Down
8 changes: 5 additions & 3 deletions src/openrct2-ui/interface/Widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,8 @@ namespace OpenRCT2::Ui

auto colour = w.colours[widget.colour];

if (static_cast<int32_t>(widget.image.ToUInt32()) == -2)
// Dead code?
if (static_cast<int32_t>(widget.image.GetIndex()) == -2)
{
// Draw border with no fill
GfxFillRectInset(dpi, rect, colour, press | INSET_RECT_FLAG_FILL_NONE);
Expand Down Expand Up @@ -288,7 +289,8 @@ namespace OpenRCT2::Ui
// Check if the button is pressed down
if (WidgetIsPressed(w, widgetIndex) || isToolActive(w, widgetIndex))
{
if (static_cast<int32_t>(widget.image.ToUInt32()) == -2)
// Dead code?
if (static_cast<int32_t>(widget.image.GetIndex()) == -2)
{
// Draw border with no fill
GfxFillRectInset(dpi, rect, colour, INSET_RECT_FLAG_BORDER_INSET | INSET_RECT_FLAG_FILL_NONE);
Expand Down Expand Up @@ -821,7 +823,7 @@ namespace OpenRCT2::Ui
const auto& widget = w.widgets[widgetIndex];

// Get the image
if (widget.image.ToUInt32() == kSpriteIdNull)
if (widget.image.GetIndex() == kSpriteIdNull)
return;
auto image = widget.image;

Expand Down
6 changes: 3 additions & 3 deletions src/openrct2-ui/scripting/CustomWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ namespace OpenRCT2::Ui::Windows
auto dukImage = desc["image"];
if (dukImage.type() == DukValue::Type::STRING || dukImage.type() == DukValue::Type::NUMBER)
{
result.Image = ImageId::FromUInt32(ImageFromDuk(dukImage));
result.Image = ImageId(ImageFromDuk(dukImage));
result.HasBorder = false;
}
else
Expand Down Expand Up @@ -208,13 +208,13 @@ namespace OpenRCT2::Ui::Windows
auto dukImage = desc["image"];
if (dukImage.type() == DukValue::Type::STRING || dukImage.type() == DukValue::Type::NUMBER)
{
result.imageFrameBase = ImageId::FromUInt32(ImageFromDuk(dukImage));
result.imageFrameBase = ImageId(ImageFromDuk(dukImage));
result.imageFrameCount = 0;
result.imageFrameDuration = 0;
}
else if (dukImage.type() == DukValue::Type::OBJECT)
{
result.imageFrameBase = ImageId::FromUInt32(dukImage["frameBase"].as_uint());
result.imageFrameBase = ImageId(dukImage["frameBase"].as_uint());
result.imageFrameCount = AsOrDefault(dukImage["frameCount"], 0);
result.imageFrameDuration = AsOrDefault(dukImage["frameDuration"], 0);

Expand Down
4 changes: 2 additions & 2 deletions src/openrct2-ui/windows/Dropdown.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ namespace OpenRCT2::Ui::Windows
{
// Image item
auto image = UseImages ? _dropdownItemsImages[i]
: ImageId::FromUInt32(static_cast<uint32_t>(gDropdownItems[i].Args));
: ImageId(static_cast<uint32_t>(gDropdownItems[i].Args));
if (item == Dropdown::FormatColourPicker && highlightedIndex == i)
image = image.WithIndexOffset(1);
GfxDrawSprite(dpi, image, screenCoords);
Expand Down Expand Up @@ -512,7 +512,7 @@ static constexpr colour_t kColoursDropdownOrder[] = {
: ImageId(SPR_PALETTE_BTN, orderedColour);

gDropdownItems[i].Format = Dropdown::FormatColourPicker;
gDropdownItems[i].Args = (i << 32) | imageId.ToUInt32();
Dropdown::SetImage(i, imageId);
}

// Show dropdown
Expand Down
38 changes: 21 additions & 17 deletions src/openrct2-ui/windows/Guest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1608,14 +1608,17 @@ namespace OpenRCT2::Ui::Windows
}
}

std::pair<StringId, Formatter> InventoryFormatItem(Guest& guest, ShopItem item) const
std::pair<ImageId, Formatter> InventoryFormatItem(Guest& guest, ShopItem item) const
{
auto parkName = GetGameState().Park.Name.c_str();

// Default item image
auto& itemDesc = GetShopItemDescriptor(item);
auto itemImage = ImageId(itemDesc.Image);

// Default arguments
auto ft = Formatter();
ft.Add<uint32_t>(GetShopItemDescriptor(item).Image);
ft.Add<StringId>(GetShopItemDescriptor(item).Naming.Display);
ft.Add<StringId>(itemDesc.Naming.Display);
ft.Add<StringId>(STR_STRING);
ft.Add<const char*>(parkName);

Expand All @@ -1624,8 +1627,7 @@ namespace OpenRCT2::Ui::Windows
switch (item)
{
case ShopItem::Balloon:
ft.Rewind();
ft.Add<uint32_t>(ImageId(GetShopItemDescriptor(item).Image, (guest.BalloonColour)).ToUInt32());
itemImage = ImageId(itemDesc.Image, guest.BalloonColour);
break;
case ShopItem::Photo:
invRide = GetRide(guest.Photo1RideRef);
Expand All @@ -1638,8 +1640,7 @@ namespace OpenRCT2::Ui::Windows

break;
case ShopItem::Umbrella:
ft.Rewind();
ft.Add<uint32_t>(ImageId(GetShopItemDescriptor(item).Image, (guest.UmbrellaColour)).ToUInt32());
itemImage = ImageId(itemDesc.Image, guest.UmbrellaColour);
break;
case ShopItem::Voucher:
switch (guest.VoucherType)
Expand Down Expand Up @@ -1677,12 +1678,10 @@ namespace OpenRCT2::Ui::Windows
}
break;
case ShopItem::Hat:
ft.Rewind();
ft.Add<uint32_t>(ImageId(GetShopItemDescriptor(item).Image, (guest.HatColour)).ToUInt32());
itemImage = ImageId(itemDesc.Image, guest.HatColour);
break;
case ShopItem::TShirt:
ft.Rewind();
ft.Add<uint32_t>(ImageId(GetShopItemDescriptor(item).Image, (guest.TshirtColour)).ToUInt32());
itemImage = ImageId(itemDesc.Image, guest.TshirtColour);
break;
case ShopItem::Photo2:
invRide = GetRide(guest.Photo2RideRef);
Expand Down Expand Up @@ -1716,7 +1715,7 @@ namespace OpenRCT2::Ui::Windows
break;
}

return std::make_pair(STR_GUEST_ITEM_FORMAT, ft);
return std::make_pair(itemImage, ft);
}

void OnDrawInventory(DrawPixelInfo& dpi)
Expand All @@ -1736,9 +1735,9 @@ namespace OpenRCT2::Ui::Windows
return;
}

Widget* pageBackgroundWidget = &widgets[WIDX_PAGE_BACKGROUND];
auto screenCoords = windowPos + ScreenCoordsXY{ pageBackgroundWidget->left + 4, pageBackgroundWidget->top + 2 };
int32_t itemNameWidth = pageBackgroundWidget->width() - 8;
auto& widget = widgets[WIDX_PAGE_BACKGROUND];
auto screenCoords = windowPos + ScreenCoordsXY{ widget.left + 4, widget.top + 2 };
int32_t itemNameWidth = widget.width() - 8;

int32_t maxY = windowPos.y + height - 22;
int32_t numItems = 0;
Expand All @@ -1753,8 +1752,13 @@ namespace OpenRCT2::Ui::Windows
if (!guest->HasItem(item))
continue;

auto [stringId, ft] = InventoryFormatItem(*guest, item);
screenCoords.y += DrawTextWrapped(dpi, screenCoords, itemNameWidth, stringId, ft);
auto [imageId, ft] = InventoryFormatItem(*guest, item);
GfxDrawSprite(dpi, imageId, screenCoords);

screenCoords.x += 16;
screenCoords.y += DrawTextWrapped(dpi, screenCoords, itemNameWidth, STR_BLACK_STRING, ft);

screenCoords.x -= 16;
numItems++;
}

Expand Down
4 changes: 2 additions & 2 deletions src/openrct2-ui/windows/Ride.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4143,11 +4143,11 @@ namespace OpenRCT2::Ui::Windows
break;
}
case RIDE_MECHANIC_STATUS_HEADING:
stringId = STR_MEHCANIC_IS_HEADING_FOR_THE_RIDE;
stringId = STR_MECHANIC_IS_HEADING_FOR_THE_RIDE;
break;
case RIDE_MECHANIC_STATUS_FIXING:
case RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES:
stringId = STR_MEHCANIC_IS_FIXING_THE_RIDE;
stringId = STR_MECHANIC_IS_FIXING_THE_RIDE;
break;
default:
stringId = STR_EMPTY;
Expand Down
4 changes: 2 additions & 2 deletions src/openrct2/drawing/Drawing.String.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -592,8 +592,8 @@ static void TTFProcessFormatCode(DrawPixelInfo& dpi, const FmtString::Token& tok
}
case FormatToken::InlineSprite:
{
auto imageId = ImageId::FromUInt32(token.parameter);
auto g1 = GfxGetG1Element(imageId.GetIndex());
auto imageId = ImageId(token.parameter);
auto g1 = GfxGetG1Element(imageId);
if (g1 != nullptr && g1->width <= 32 && g1->height <= 32)
{
if (!(info->flags & TEXT_DRAW_FLAG_NO_DRAW))
Expand Down
36 changes: 0 additions & 36 deletions src/openrct2/drawing/ImageId.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,26 +75,6 @@ struct ImageId
uint8_t _flags = 0;

public:
[[nodiscard]] static ImageId FromUInt32(uint32_t value)
{
ImageId result;
result._index = value & MASK_INDEX;
if (value & FLAG_SECONDARY)
result._primary = (value & MASK_PRIMARY) >> SHIFT_PRIMARY;
else
result._primary = (value & MASK_REMAP) >> SHIFT_REMAP;
if (value & FLAG_SECONDARY)
result._secondary = (value & MASK_SECONDARY) >> SHIFT_SECONDARY;
if (value & FLAG_PRIMARY)
result._flags |= NEW_FLAG_PRIMARY;
if (value & FLAG_BLEND)
result._flags |= NEW_FLAG_BLEND;
if (value & FLAG_SECONDARY)
result._flags |= NEW_FLAG_SECONDARY;
assert(result.ToUInt32() == value);
return result;
}

ImageId() = default;

explicit constexpr ImageId(ImageIndex index)
Expand Down Expand Up @@ -122,22 +102,6 @@ struct ImageId
{
}

[[nodiscard]] constexpr uint32_t ToUInt32() const
{
auto result = (_index & MASK_INDEX);
result |= (_primary << SHIFT_REMAP) & MASK_REMAP;
if (_flags & NEW_FLAG_PRIMARY)
result |= FLAG_PRIMARY;
if (_flags & NEW_FLAG_SECONDARY)
{
result |= (_secondary << SHIFT_SECONDARY) & MASK_SECONDARY;
result |= FLAG_SECONDARY;
}
if (_flags & NEW_FLAG_BLEND)
result |= FLAG_BLEND;
return result;
}

bool HasValue() const
{
return GetIndex() != ImageIndexUndefined;
Expand Down

0 comments on commit 2a3a723

Please sign in to comment.