diff --git a/src/openrct2-ui/interface/Widget.cpp b/src/openrct2-ui/interface/Widget.cpp index cf4e5904b0..924c607080 100644 --- a/src/openrct2-ui/interface/Widget.cpp +++ b/src/openrct2-ui/interface/Widget.cpp @@ -116,8 +116,7 @@ static void widget_frame_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgeti rct_widget* widget = &w->widgets[widgetIndex]; // Resolve the absolute ltrb - int32_t l = w->windowPos.x + widget->left; - int32_t t = w->windowPos.y + widget->top; + auto leftTop = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t r = w->windowPos.x + widget->right; int32_t b = w->windowPos.y + widget->bottom; @@ -128,7 +127,7 @@ static void widget_frame_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgeti uint8_t colour = w->colours[widget->colour]; // Draw the frame - gfx_fill_rect_inset(dpi, l, t, r, b, colour, press); + gfx_fill_rect_inset(dpi, leftTop.x, leftTop.y, r, b, colour, press); // Check if the window can be resized if (!(w->flags & WF_RESIZABLE)) @@ -137,9 +136,8 @@ static void widget_frame_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgeti return; // Draw the resize sprite at the bottom right corner - l = w->windowPos.x + widget->right - 18; - t = w->windowPos.y + widget->bottom - 18; - gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), l, t, 0); + leftTop = w->windowPos + ScreenCoordsXY{ widget->right - 18, widget->bottom - 18 }; + gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), leftTop, 0); } /** @@ -152,8 +150,7 @@ static void widget_resize_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widget rct_widget* widget = &w->widgets[widgetIndex]; // Resolve the absolute ltrb - int32_t l = w->windowPos.x + widget->left; - int32_t t = w->windowPos.y + widget->top; + auto leftTop = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t r = w->windowPos.x + widget->right; int32_t b = w->windowPos.y + widget->bottom; @@ -161,7 +158,7 @@ static void widget_resize_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widget uint8_t colour = w->colours[widget->colour]; // Draw the panel - gfx_fill_rect_inset(dpi, l, t, r, b, colour, 0); + gfx_fill_rect_inset(dpi, leftTop.x, leftTop.y, r, b, colour, 0); // Check if the window can be resized if (!(w->flags & WF_RESIZABLE)) @@ -170,9 +167,8 @@ static void widget_resize_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widget return; // Draw the resize sprite at the bottom right corner - l = w->windowPos.x + widget->right - 18; - t = w->windowPos.y + widget->bottom - 18; - gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), l, t, 0); + leftTop = w->windowPos + ScreenCoordsXY{ widget->right - 18, widget->bottom - 18 }; + gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), leftTop, 0); } /** @@ -240,15 +236,14 @@ static void widget_tab_draw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetind } // Resolve the absolute ltrb - int32_t l = w->windowPos.x + widget->left; - int32_t t = w->windowPos.y + widget->top; + auto leftTop = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; // Get the colour and disabled image uint8_t colour = w->colours[widget->colour] & 0x7F; uint32_t image = widget->image + 2; // Draw disabled image - gfx_draw_sprite(dpi, image | (colour << 19), l, t, 0); + gfx_draw_sprite(dpi, image | (colour << 19), leftTop, 0); } /** @@ -836,7 +831,7 @@ static void widget_draw_image(rct_drawpixelinfo* dpi, rct_window* w, rct_widgeti else image |= colour << 19; - gfx_draw_sprite(dpi, image, screenCoords.x, screenCoords.y, 0); + gfx_draw_sprite(dpi, image, screenCoords, 0); } } diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 9fef63240c..03176a3330 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -696,8 +696,7 @@ namespace OpenRCT2::Ui::Windows auto widget = &w->widgets[widgetIndex]; if (widget_is_enabled(w, widgetIndex)) { - auto l = w->windowPos.x + widget->left + tab.offset.x; - auto t = w->windowPos.y + widget->top + tab.offset.y; + auto leftTop = w->windowPos + tab.offset + ScreenCoordsXY{ widget->left, widget->top }; auto image = tab.imageFrameBase; if (static_cast(w->page) == tabIndex && tab.imageFrameDuration != 0 && tab.imageFrameCount != 0) { @@ -705,7 +704,7 @@ namespace OpenRCT2::Ui::Windows auto imageOffset = frame % tab.imageFrameCount; image = image.WithIndex(image.GetIndex() + imageOffset); } - gfx_draw_sprite(dpi, image.ToUInt32(), l, t, image.GetTertiary()); + gfx_draw_sprite(dpi, image.ToUInt32(), leftTop, image.GetTertiary()); } tabIndex++; } diff --git a/src/openrct2-ui/windows/About.cpp b/src/openrct2-ui/windows/About.cpp index 95facf1d60..e45e538d3c 100644 --- a/src/openrct2-ui/windows/About.cpp +++ b/src/openrct2-ui/windows/About.cpp @@ -237,7 +237,7 @@ static void window_about_openrct2_paint(rct_window* w, rct_drawpixelinfo* dpi) + lineHeight; logoSize = gfx_get_sprite_size(SPR_G2_LOGO); - gfx_draw_sprite(dpi, SPR_G2_LOGO, aboutCoords.x - (logoSize.width / 2), aboutCoords.y, 0); + gfx_draw_sprite(dpi, SPR_G2_LOGO, aboutCoords - ScreenCoordsXY{ logoSize.width / 2, 0 }, 0); aboutCoords.y += logoSize.height + lineHeight * 2; // About OpenRCT2 text @@ -322,7 +322,7 @@ static void window_about_rct2_paint(rct_window* w, rct_drawpixelinfo* dpi) gfx_draw_string_centred(dpi, STR_LICENSED_TO_INFOGRAMES_INTERACTIVE_INC, screenCoords, COLOUR_BLACK, nullptr); // Images - gfx_draw_sprite(dpi, SPR_CREDITS_CHRIS_SAWYER_SMALL, w->windowPos.x + 92, yPage + 24, 0); + gfx_draw_sprite(dpi, SPR_CREDITS_CHRIS_SAWYER_SMALL, { w->windowPos.x + 92, yPage + 24 }, 0); // Licence } diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 0fd3b81701..106495bdd2 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -1270,7 +1270,7 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_CHEATS_PAGE_MONEY) sprite_idx += (w->frame_no / 2) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos.x + w->widgets[WIDX_TAB_1].left, w->windowPos.y + w->widgets[WIDX_TAB_1].top, 0); + dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }, 0); } // Guests tab @@ -1280,7 +1280,7 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_CHEATS_PAGE_GUESTS) sprite_idx += (w->frame_no / 3) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos.x + w->widgets[WIDX_TAB_2].left, w->windowPos.y + w->widgets[WIDX_TAB_2].top, 0); + dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left, w->widgets[WIDX_TAB_2].top }, 0); } // Misc tab @@ -1288,7 +1288,7 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) { sprite_idx = SPR_TAB_PARK; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos.x + w->widgets[WIDX_TAB_3].left, w->windowPos.y + w->widgets[WIDX_TAB_3].top, 0); + dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }, 0); } // Rides tab @@ -1298,7 +1298,7 @@ static void window_cheats_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_CHEATS_PAGE_RIDES) sprite_idx += (w->frame_no / 4) % 16; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos.x + w->widgets[WIDX_TAB_4].left, w->windowPos.y + w->widgets[WIDX_TAB_4].top, 0); + dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_4].left, w->widgets[WIDX_TAB_4].top }, 0); } } diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index b4bca3ee14..0c16c4e456 100644 --- a/src/openrct2-ui/windows/Dropdown.cpp +++ b/src/openrct2-ui/windows/Dropdown.cpp @@ -372,8 +372,9 @@ static void window_dropdown_paint(rct_window* w, rct_drawpixelinfo* dpi) image++; gfx_draw_sprite( - dpi, image, w->windowPos.x + 2 + (cell_x * _dropdown_item_width), - w->windowPos.y + 2 + (cell_y * _dropdown_item_height), 0); + dpi, image, + w->windowPos + ScreenCoordsXY{ 2 + (cell_x * _dropdown_item_width), 2 + (cell_y * _dropdown_item_height) }, + 0); } else { diff --git a/src/openrct2-ui/windows/EditorBottomToolbar.cpp b/src/openrct2-ui/windows/EditorBottomToolbar.cpp index 5958feea35..e02d1570dd 100644 --- a/src/openrct2-ui/windows/EditorBottomToolbar.cpp +++ b/src/openrct2-ui/windows/EditorBottomToolbar.cpp @@ -465,8 +465,11 @@ void window_editor_bottom_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) if (drawPreviousButton) { gfx_draw_sprite( - dpi, SPR_PREVIOUS, window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].left + 6 + w->windowPos.x, - window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].top + 6 + w->windowPos.y, 0); + dpi, SPR_PREVIOUS, + w->windowPos + + ScreenCoordsXY{ window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].left + 6, + window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].top + 6 }, + 0); int32_t textColour = NOT_TRANSLUCENT(w->colours[1]); if (gHoverWidget.window_classification == WC_BOTTOM_TOOLBAR @@ -492,8 +495,11 @@ void window_editor_bottom_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) if ((drawPreviousButton || drawNextButton) && gS6Info.editor_step != EDITOR_STEP_ROLLERCOASTER_DESIGNER) { gfx_draw_sprite( - dpi, SPR_NEXT, window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].right - 29 + w->windowPos.x, - window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].top + 6 + w->windowPos.y, 0); + dpi, SPR_NEXT, + w->windowPos + + ScreenCoordsXY{ window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].right - 29, + window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].top + 6 }, + 0); int32_t textColour = NOT_TRANSLUCENT(w->colours[1]); diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 1fafee4099..58ef87ec94 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -552,7 +552,7 @@ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo // Tab image auto screenPos = w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }; - gfx_draw_sprite(dpi, SPR_TAB_FINANCES_RESEARCH_0 + (w->frame_no / 2) % 8, screenPos.x, screenPos.y, 0); + gfx_draw_sprite(dpi, SPR_TAB_FINANCES_RESEARCH_0 + (w->frame_no / 2) % 8, screenPos, 0); // Pre-researched items label screenPos = w->windowPos diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index e3ad31f09f..390846336e 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -966,7 +966,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf { auto image = ObjectSelectionPages[i].Image; auto screenPos = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, image, screenPos.x, screenPos.y, 0); + gfx_draw_sprite(dpi, image, screenPos, 0); } } @@ -994,7 +994,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf spriteIndex += (i == 4 ? ThrillRidesTabAnimationSequence[frame] : frame); auto screenPos = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, spriteIndex | (w->colours[1] << 19), screenPos.x, screenPos.y, 0); + gfx_draw_sprite(dpi, spriteIndex | (w->colours[1] << 19), screenPos, 0); } } diff --git a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp index cd259c418a..bce4f27e0e 100644 --- a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp +++ b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp @@ -304,7 +304,7 @@ static void window_editor_objective_options_draw_tab_images(rct_window* w, rct_d if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN) spriteIndex += (w->frame_no / 4) % 16; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos.x + widget->left, w->windowPos.y + widget->top, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); // Tab 2 if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) @@ -314,7 +314,7 @@ static void window_editor_objective_options_draw_tab_images(rct_window* w, rct_d if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_RIDES) spriteIndex += (w->frame_no / 4) % 16; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos.x + widget->left, w->windowPos.y + widget->top, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); } } diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index db5a65935c..eb46281586 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -440,7 +440,7 @@ static void window_editor_scenario_options_draw_tab_images(rct_window* w, rct_dr if (w->page == WINDOW_EDITOR_SCENARIO_OPTIONS_PAGE_FINANCIAL) spriteIndex += (w->frame_no / 2) % 8; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos.x + widget->left, w->windowPos.y + widget->top, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); // Tab 2 widget = &w->widgets[WIDX_TAB_2]; @@ -448,12 +448,12 @@ static void window_editor_scenario_options_draw_tab_images(rct_window* w, rct_dr if (w->page == WINDOW_EDITOR_SCENARIO_OPTIONS_PAGE_GUESTS) spriteIndex += (w->frame_no / 4) % 8; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos.x + widget->left, w->windowPos.y + widget->top, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); // Tab 3 widget = &w->widgets[WIDX_TAB_3]; spriteIndex = SPR_TAB_PARK; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos.x + widget->left, w->windowPos.y + widget->top, 0); + gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); } /** diff --git a/src/openrct2-ui/windows/Finances.cpp b/src/openrct2-ui/windows/Finances.cpp index dc23c5a91f..21e7912b15 100644 --- a/src/openrct2-ui/windows/Finances.cpp +++ b/src/openrct2-ui/windows/Finances.cpp @@ -1501,7 +1501,7 @@ static void window_finances_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos.x + w->widgets[widgetIndex].left, w->windowPos.y + w->widgets[widgetIndex].top, 0); + dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); } } diff --git a/src/openrct2-ui/windows/Footpath.cpp b/src/openrct2-ui/windows/Footpath.cpp index 074e53eb6f..a60c13f532 100644 --- a/src/openrct2-ui/windows/Footpath.cpp +++ b/src/openrct2-ui/windows/Footpath.cpp @@ -619,24 +619,24 @@ static void window_footpath_paint(rct_window* w, rct_drawpixelinfo* dpi) image += pathType->image; // Draw construction image - screenCoords = { - w->windowPos.x + (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2, - w->windowPos.y + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 60 - }; - gfx_draw_sprite(dpi, image, screenCoords.x, screenCoords.y, 0); + screenCoords = w->windowPos + + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) + / 2, + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 60 }; + gfx_draw_sprite(dpi, image, screenCoords, 0); // Draw build this... label - screenCoords = { - w->windowPos.x + (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2, - w->windowPos.y + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 23 - }; + screenCoords = w->windowPos + + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) + / 2, + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 23 }; gfx_draw_string_centred(dpi, STR_BUILD_THIS, screenCoords, COLOUR_BLACK, nullptr); } // Draw cost - screenCoords.x = w->windowPos.x - + (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2; - screenCoords.y = w->windowPos.y + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 12; + screenCoords = w->windowPos + + ScreenCoordsXY{ (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2, + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 12 }; if (_window_footpath_cost != MONEY32_UNDEFINED) { if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 3f48cddf80..197177e7f2 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -491,8 +491,8 @@ static void window_game_bottom_toolbar_draw_park_rating( } // Draw thumbs on the sides - gfx_draw_sprite(dpi, SPR_RATING_LOW, x - 14, y, 0); - gfx_draw_sprite(dpi, SPR_RATING_HIGH, x + 114, y, 0); + gfx_draw_sprite(dpi, SPR_RATING_LOW, { x - 14, y }, 0); + gfx_draw_sprite(dpi, SPR_RATING_HIGH, { x + 114, y }, 0); } static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, rct_window* w) @@ -548,7 +548,7 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, // Current weather auto currentWeatherSpriteId = climate_get_weather_sprite_id(gClimateCurrent); - gfx_draw_sprite(dpi, currentWeatherSpriteId, screenCoords.x, screenCoords.y, 0); + gfx_draw_sprite(dpi, currentWeatherSpriteId, screenCoords, 0); // Next weather auto nextWeatherSpriteId = climate_get_weather_sprite_id(gClimateNext); @@ -556,8 +556,8 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, { if (gClimateUpdateTimer < 960) { - gfx_draw_sprite(dpi, SPR_NEXT_WEATHER, screenCoords.x + 27, screenCoords.y + 5, 0); - gfx_draw_sprite(dpi, nextWeatherSpriteId, screenCoords.x + 40, screenCoords.y, 0); + gfx_draw_sprite(dpi, SPR_NEXT_WEATHER, screenCoords + ScreenCoordsXY{ 27, 5 }, 0); + gfx_draw_sprite(dpi, nextWeatherSpriteId, screenCoords + ScreenCoordsXY{ 40, 0 }, 0); } } } @@ -568,7 +568,7 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, */ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rct_window* w) { - int32_t x, y, width; + int32_t width; NewsItem* newsItem; rct_widget* middleOutsetWidget; @@ -583,18 +583,20 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc // Text utf8* newsItemText = newsItem->Text; - x = w->windowPos.x + (middleOutsetWidget->left + middleOutsetWidget->right) / 2; - y = w->windowPos.y + middleOutsetWidget->top + 11; + auto screenCoords = w->windowPos + + ScreenCoordsXY{ (middleOutsetWidget->left + middleOutsetWidget->right) / 2, middleOutsetWidget->top + 11 }; width = middleOutsetWidget->right - middleOutsetWidget->left - 62; gfx_draw_string_centred_wrapped_partial( - dpi, x, y, width, COLOUR_BRIGHT_GREEN, STR_BOTTOM_TOOLBAR_NEWS_TEXT, &newsItemText, newsItem->Ticks); + dpi, screenCoords.x, screenCoords.y, width, COLOUR_BRIGHT_GREEN, STR_BOTTOM_TOOLBAR_NEWS_TEXT, &newsItemText, + newsItem->Ticks); - x = w->windowPos.x + window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].left; - y = w->windowPos.y + window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].top; + screenCoords = w->windowPos + + ScreenCoordsXY{ window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].left, + window_game_bottom_toolbar_widgets[WIDX_NEWS_SUBJECT].top }; switch (newsItem->Type) { case NEWS_ITEM_RIDE: - gfx_draw_sprite(dpi, SPR_RIDE, x, y, 0); + gfx_draw_sprite(dpi, SPR_RIDE, screenCoords, 0); break; case NEWS_ITEM_PEEP_ON_RIDE: case NEWS_ITEM_PEEP: @@ -603,7 +605,7 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc break; rct_drawpixelinfo cliped_dpi; - if (!clip_drawpixelinfo(&cliped_dpi, dpi, x + 1, y + 1, 22, 22)) + if (!clip_drawpixelinfo(&cliped_dpi, dpi, screenCoords.x + 1, screenCoords.y + 1, 22, 22)) { break; } @@ -616,11 +618,11 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc if (peep == nullptr) return; - int32_t clip_x = 10, clip_y = 19; + auto clipCoords = ScreenCoordsXY{ 10, 19 }; if (peep->AssignedPeepType == PEEP_TYPE_STAFF && peep->StaffType == STAFF_TYPE_ENTERTAINER) { - clip_y += 3; + clipCoords.y += 3; } uint32_t image_id_base = g_peep_animation_entries[peep->SpriteType].sprite_animation->base_image; @@ -630,45 +632,45 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc uint32_t image_id = image_id_base; image_id |= SPRITE_ID_PALETTE_COLOUR_2(peep->TshirtColour, peep->TrousersColour); - gfx_draw_sprite(&cliped_dpi, image_id, clip_x, clip_y, 0); + gfx_draw_sprite(&cliped_dpi, image_id, clipCoords, 0); if (image_id_base >= 0x2A1D && image_id_base < 0x2A3D) { image_id_base += 32; image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour); - gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0); + gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); } else if (image_id_base >= 0x2BBD && image_id_base < 0x2BDD) { image_id_base += 32; image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour); - gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0); + gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); } else if (image_id_base >= 0x29DD && image_id_base < 0x29FD) { image_id_base += 32; image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour); - gfx_draw_sprite(&cliped_dpi, image_id_base, clip_x, clip_y, 0); + gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); } break; } case NEWS_ITEM_MONEY: - gfx_draw_sprite(dpi, SPR_FINANCE, x, y, 0); + gfx_draw_sprite(dpi, SPR_FINANCE, screenCoords, 0); break; case NEWS_ITEM_RESEARCH: - gfx_draw_sprite(dpi, (newsItem->Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE), x, y, 0); + gfx_draw_sprite(dpi, (newsItem->Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE), screenCoords, 0); break; case NEWS_ITEM_PEEPS: - gfx_draw_sprite(dpi, SPR_GUESTS, x, y, 0); + gfx_draw_sprite(dpi, SPR_GUESTS, screenCoords, 0); break; case NEWS_ITEM_AWARD: - gfx_draw_sprite(dpi, SPR_AWARD, x, y, 0); + gfx_draw_sprite(dpi, SPR_AWARD, screenCoords, 0); break; case NEWS_ITEM_GRAPH: - gfx_draw_sprite(dpi, SPR_GRAPH, x, y, 0); + gfx_draw_sprite(dpi, SPR_GRAPH, screenCoords, 0); break; } } diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index b3adfa4f20..1f947735ff 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -860,24 +860,22 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp rct_widget* widget = &w->widgets[WIDX_TAB_1]; int32_t width = widget->right - widget->left - 1; int32_t height = widget->bottom - widget->top - 1; - int32_t x = widget->left + 1 + w->windowPos.x; - int32_t y = widget->top + 1 + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left + 1, widget->top + 1 }; if (w->page == WINDOW_GUEST_OVERVIEW) height++; rct_drawpixelinfo clip_dpi; - if (!clip_drawpixelinfo(&clip_dpi, dpi, x, y, width, height)) + if (!clip_drawpixelinfo(&clip_dpi, dpi, screenCoords.x, screenCoords.y, width, height)) { return; } - x = 14; - y = 20; + screenCoords = ScreenCoordsXY{ 14, 20 }; Peep* peep = GET_PEEP(w->number); if (peep->AssignedPeepType == PEEP_TYPE_STAFF && peep->StaffType == STAFF_TYPE_ENTERTAINER) - y++; + screenCoords.y++; int32_t animationFrame = g_peep_animation_entries[peep->SpriteType].sprite_animation->base_image + 1; @@ -891,14 +889,14 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp animationFrame += animationFrameOffset; int32_t sprite_id = animationFrame | SPRITE_ID_PALETTE_COLOUR_2(peep->TshirtColour, peep->TrousersColour); - gfx_draw_sprite(&clip_dpi, sprite_id, x, y, 0); + gfx_draw_sprite(&clip_dpi, sprite_id, screenCoords, 0); // If holding a balloon if (animationFrame >= 0x2A1D && animationFrame < 0x2A3D) { animationFrame += 32; animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour); - gfx_draw_sprite(&clip_dpi, animationFrame, x, y, 0); + gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); } // If holding umbrella @@ -906,7 +904,7 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp { animationFrame += 32; animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour); - gfx_draw_sprite(&clip_dpi, animationFrame, x, y, 0); + gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); } // If wearing hat @@ -914,7 +912,7 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp { animationFrame += 32; animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour); - gfx_draw_sprite(&clip_dpi, animationFrame, x, y, 0); + gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); } } @@ -928,8 +926,7 @@ static void window_guest_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) return; rct_widget* widget = &w->widgets[WIDX_TAB_2]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; Peep* peep = GET_PEEP(w->number); int32_t image_id = get_peep_face_sprite_large(peep); @@ -950,7 +947,7 @@ static void window_guest_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) break; } } - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } /** @@ -963,8 +960,7 @@ static void window_guest_rides_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) return; rct_widget* widget = &w->widgets[WIDX_TAB_3]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t image_id = SPR_TAB_RIDE_0; @@ -973,7 +969,7 @@ static void window_guest_rides_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) image_id += (w->frame_no / 4) & 0xF; } - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } /** @@ -986,8 +982,7 @@ static void window_guest_finance_tab_paint(rct_window* w, rct_drawpixelinfo* dpi return; rct_widget* widget = &w->widgets[WIDX_TAB_4]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t image_id = SPR_TAB_FINANCES_SUMMARY_0; @@ -996,7 +991,7 @@ static void window_guest_finance_tab_paint(rct_window* w, rct_drawpixelinfo* dpi image_id += (w->frame_no / 2) & 0x7; } - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } /** @@ -1009,8 +1004,7 @@ static void window_guest_thoughts_tab_paint(rct_window* w, rct_drawpixelinfo* dp return; rct_widget* widget = &w->widgets[WIDX_TAB_5]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t image_id = SPR_TAB_THOUGHTS_0; @@ -1019,7 +1013,7 @@ static void window_guest_thoughts_tab_paint(rct_window* w, rct_drawpixelinfo* dp image_id += (w->frame_no / 2) & 0x7; } - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } /** @@ -1032,12 +1026,11 @@ static void window_guest_inventory_tab_paint(rct_window* w, rct_drawpixelinfo* d return; rct_widget* widget = &w->widgets[WIDX_TAB_6]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t image_id = SPR_TAB_GUEST_INVENTORY; - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) @@ -1046,8 +1039,7 @@ static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) return; rct_widget* widget = &w->widgets[WIDX_TAB_7]; - int32_t x = widget->left + w->windowPos.x; - int32_t y = widget->top + w->windowPos.y; + auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; int32_t image_id = SPR_TAB_GEARS_0; if (w->page == WINDOW_GUEST_DEBUG) @@ -1055,7 +1047,7 @@ static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) image_id += (w->frame_no / 2) & 0x3; } - gfx_draw_sprite(dpi, image_id, x, y, 0); + gfx_draw_sprite(dpi, image_id, screenCoords, 0); } /** @@ -1080,7 +1072,7 @@ void window_guest_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) rct_viewport* viewport = w->viewport; if (viewport->flags & VIEWPORT_FLAG_SOUND_ON) { - gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos.x + 2, w->windowPos.y + 2, 0); + gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos + ScreenCoordsXY{ 2, 2 }, 0); } } diff --git a/src/openrct2/Intro.cpp b/src/openrct2/Intro.cpp index d34fff2d2b..2ca78ced54 100644 --- a/src/openrct2/Intro.cpp +++ b/src/openrct2/Intro.cpp @@ -183,10 +183,10 @@ void intro_draw(rct_drawpixelinfo* dpi) _introStateCounter + 50 + 425, BORDER_COLOUR_PUBLISHER); // Draw Infogrames logo - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_00, (screenWidth / 2) - 320 + 69, _introStateCounter + 69, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_10, (screenWidth / 2) - 320 + 319, _introStateCounter + 69, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_01, (screenWidth / 2) - 320 + 69, _introStateCounter + 319, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_11, (screenWidth / 2) - 320 + 319, _introStateCounter + 319, 0); + gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_00, { (screenWidth / 2) - 320 + 69, _introStateCounter + 69 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_10, { (screenWidth / 2) - 320 + 319, _introStateCounter + 69 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_01, { (screenWidth / 2) - 320 + 69, _introStateCounter + 319 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_11, { (screenWidth / 2) - 320 + 319, _introStateCounter + 319 }, 0); break; case INTRO_STATE_DEVELOPER_BEGIN: gfx_clear(dpi, BACKROUND_COLOUR_DARK); @@ -196,8 +196,8 @@ void intro_draw(rct_drawpixelinfo* dpi) gfx_clear(dpi, BACKROUND_COLOUR_DARK); // Draw Chris Sawyer logo - gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_00, (screenWidth / 2) - 320 + 70, _introStateCounter, 0); - gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_10, (screenWidth / 2) - 320 + 320, _introStateCounter, 0); + gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_00, { (screenWidth / 2) - 320 + 70, _introStateCounter }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_10, { (screenWidth / 2) - 320 + 320, _introStateCounter }, 0); break; case INTRO_STATE_LOGO_FADE_IN: if (_introStateCounter <= 0xFF00) @@ -284,10 +284,10 @@ static void screen_intro_draw_logo(rct_drawpixelinfo* dpi) drawing_engine_invalidate_image(SPR_INTRO_LOGO_21); gfx_clear(dpi, BACKROUND_COLOUR_LOGO); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_00, imageX + 0, 0, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_10, imageX + 220, 0, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_20, imageX + 440, 0, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_01, imageX + 0, 240, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_11, imageX + 220, 240, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_21, imageX + 440, 240, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_00, { imageX + 0, 0 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_10, { imageX + 220, 0 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_20, { imageX + 440, 0 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_01, { imageX + 0, 240 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_11, { imageX + 220, 240 }, 0); + gfx_draw_sprite(dpi, SPR_INTRO_LOGO_21, { imageX + 440, 240 }, 0); } diff --git a/src/openrct2/drawing/Drawing.String.cpp b/src/openrct2/drawing/Drawing.String.cpp index b939830698..034e5f0e04 100644 --- a/src/openrct2/drawing/Drawing.String.cpp +++ b/src/openrct2/drawing/Drawing.String.cpp @@ -776,7 +776,7 @@ static const utf8* ttf_process_format_code(rct_drawpixelinfo* dpi, const utf8* t { if (!(info->flags & TEXT_DRAW_FLAG_NO_DRAW)) { - gfx_draw_sprite(dpi, imageId, info->x, info->y, 0); + gfx_draw_sprite(dpi, imageId, { info->x, info->y }, 0); } info->x += g1->width; } diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index d1fdd2378f..987dfc3657 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -630,6 +630,7 @@ void FASTCALL gfx_sprite_to_buffer(DrawSpriteArgs& args); void FASTCALL gfx_bmp_sprite_to_buffer(DrawSpriteArgs& args); void FASTCALL gfx_rle_sprite_to_buffer(DrawSpriteArgs& args); void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image_id, int32_t x, int32_t y, uint32_t tertiary_colour); +void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image_id, const ScreenCoordsXY& coords, uint32_t tertiary_colour); void FASTCALL gfx_draw_glyph(rct_drawpixelinfo* dpi, int32_t image_id, int32_t x, int32_t y, const PaletteMap& paletteMap); void FASTCALL gfx_draw_sprite_raw_masked(rct_drawpixelinfo* dpi, int32_t x, int32_t y, int32_t maskImage, int32_t colourImage); void FASTCALL gfx_draw_sprite_solid(rct_drawpixelinfo* dpi, int32_t image, const ScreenCoordsXY& coords, uint8_t colour); diff --git a/src/openrct2/drawing/NewDrawing.cpp b/src/openrct2/drawing/NewDrawing.cpp index f80dcbc8ec..31080f11ab 100644 --- a/src/openrct2/drawing/NewDrawing.cpp +++ b/src/openrct2/drawing/NewDrawing.cpp @@ -244,16 +244,21 @@ void gfx_draw_dashed_line( } } -void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image, int32_t x, int32_t y, uint32_t tertiary_colour) +void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image, const ScreenCoordsXY& coords, uint32_t tertiary_colour) { auto drawingEngine = dpi->DrawingEngine; if (drawingEngine != nullptr) { IDrawingContext* dc = drawingEngine->GetDrawingContext(dpi); - dc->DrawSprite(image, x, y, tertiary_colour); + dc->DrawSprite(image, coords.x, coords.y, tertiary_colour); } } +void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image, int32_t x, int32_t y, uint32_t tertiary_colour) +{ + gfx_draw_sprite(dpi, image, { x, y }, tertiary_colour); +} + void FASTCALL gfx_draw_glyph(rct_drawpixelinfo* dpi, int32_t image, int32_t x, int32_t y, const PaletteMap& paletteMap) { auto drawingEngine = dpi->DrawingEngine; diff --git a/src/openrct2/object/BannerObject.cpp b/src/openrct2/object/BannerObject.cpp index bba21f706d..7997ab19ce 100644 --- a/src/openrct2/object/BannerObject.cpp +++ b/src/openrct2/object/BannerObject.cpp @@ -75,12 +75,11 @@ void BannerObject::Unload() void BannerObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; uint32_t imageId = 0x20D00000 | _legacyType.image; - gfx_draw_sprite(dpi, imageId + 0, x - 12, y + 8, 0); - gfx_draw_sprite(dpi, imageId + 1, x - 12, y + 8, 0); + gfx_draw_sprite(dpi, imageId + 0, screenCoords + ScreenCoordsXY{ -12, 8 }, 0); + gfx_draw_sprite(dpi, imageId + 1, screenCoords + ScreenCoordsXY{ -12, 8 }, 0); } void BannerObject::ReadJson(IReadObjectContext* context, const json_t* root) diff --git a/src/openrct2/object/EntranceObject.cpp b/src/openrct2/object/EntranceObject.cpp index 592caac883..498beabc8b 100644 --- a/src/openrct2/object/EntranceObject.cpp +++ b/src/openrct2/object/EntranceObject.cpp @@ -43,13 +43,12 @@ void EntranceObject::Unload() void EntranceObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; uint32_t imageId = _legacyType.image_id; - gfx_draw_sprite(dpi, imageId + 1, x - 32, y + 14, 0); - gfx_draw_sprite(dpi, imageId + 0, x + 0, y + 28, 0); - gfx_draw_sprite(dpi, imageId + 2, x + 32, y + 44, 0); + gfx_draw_sprite(dpi, imageId + 1, screenCoords + ScreenCoordsXY{ -32, 14 }, 0); + gfx_draw_sprite(dpi, imageId + 0, screenCoords + ScreenCoordsXY{ 0, 28 }, 0); + gfx_draw_sprite(dpi, imageId + 2, screenCoords + ScreenCoordsXY{ 32, 44 }, 0); } void EntranceObject::ReadJson(IReadObjectContext* context, const json_t* root) diff --git a/src/openrct2/object/FootpathItemObject.cpp b/src/openrct2/object/FootpathItemObject.cpp index c21a2b8f8d..15c6280eca 100644 --- a/src/openrct2/object/FootpathItemObject.cpp +++ b/src/openrct2/object/FootpathItemObject.cpp @@ -81,9 +81,8 @@ void FootpathItemObject::Unload() void FootpathItemObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; - gfx_draw_sprite(dpi, _legacyType.image, x - 22, y - 24, 0); + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; + gfx_draw_sprite(dpi, _legacyType.image, screenCoords - ScreenCoordsXY{ 22, 24 }, 0); } static uint8_t ParseDrawType(const std::string& s) diff --git a/src/openrct2/object/FootpathObject.cpp b/src/openrct2/object/FootpathObject.cpp index d32843f9c0..30ee693e8a 100644 --- a/src/openrct2/object/FootpathObject.cpp +++ b/src/openrct2/object/FootpathObject.cpp @@ -70,10 +70,9 @@ void FootpathObject::Unload() void FootpathObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; - gfx_draw_sprite(dpi, _pathSurfaceEntry.preview, x - 49, y - 17, 0); - gfx_draw_sprite(dpi, _queueEntry.preview, x + 4, y - 17, 0); + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; + gfx_draw_sprite(dpi, _pathSurfaceEntry.preview, screenCoords - ScreenCoordsXY{ 49, 17 }, 0); + gfx_draw_sprite(dpi, _queueEntry.preview, screenCoords + ScreenCoordsXY{ 4, -17 }, 0); } static RailingEntrySupportType ParseSupportType(const std::string& s) diff --git a/src/openrct2/object/LargeSceneryObject.cpp b/src/openrct2/object/LargeSceneryObject.cpp index f5d98a7157..113b758f8e 100644 --- a/src/openrct2/object/LargeSceneryObject.cpp +++ b/src/openrct2/object/LargeSceneryObject.cpp @@ -102,11 +102,10 @@ void LargeSceneryObject::Unload() void LargeSceneryObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = (height / 2) - 39; + auto screenCoords = ScreenCoordsXY{ width / 2, (height / 2) - 39 }; uint32_t imageId = 0xB2D00000 | _legacyType.image; - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); } std::vector LargeSceneryObject::ReadTiles(IStream* stream) diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index c746d6ff7a..0e24cce3ea 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -370,7 +370,7 @@ void RideObject::DrawPreview(rct_drawpixelinfo* dpi, [[maybe_unused]] int32_t wi imageId++; } - gfx_draw_sprite(dpi, imageId, 0, 0, 0); + gfx_draw_sprite(dpi, imageId, { 0, 0 }, 0); } std::string RideObject::GetDescription() const diff --git a/src/openrct2/object/SceneryGroupObject.cpp b/src/openrct2/object/SceneryGroupObject.cpp index b33804238d..2c602350a7 100644 --- a/src/openrct2/object/SceneryGroupObject.cpp +++ b/src/openrct2/object/SceneryGroupObject.cpp @@ -60,11 +60,10 @@ void SceneryGroupObject::Unload() void SceneryGroupObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; uint32_t imageId = _legacyType.image + 0x20600001; - gfx_draw_sprite(dpi, imageId, x - 15, y - 14, 0); + gfx_draw_sprite(dpi, imageId, screenCoords - ScreenCoordsXY{ 15, 14 }, 0); } void SceneryGroupObject::UpdateEntryIndexes() diff --git a/src/openrct2/object/SmallSceneryObject.cpp b/src/openrct2/object/SmallSceneryObject.cpp index e5830acd82..e6b37025a7 100644 --- a/src/openrct2/object/SmallSceneryObject.cpp +++ b/src/openrct2/object/SmallSceneryObject.cpp @@ -107,17 +107,16 @@ void SmallSceneryObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int3 } } - int32_t x = width / 2; - int32_t y = (height / 2) + (_legacyType.small_scenery.height / 2); - y = std::min(y, height - 16); + auto screenCoords = ScreenCoordsXY{ width / 2, (height / 2) + (_legacyType.small_scenery.height / 2) }; + screenCoords.y = std::min(screenCoords.y, height - 16); if ((scenery_small_entry_has_flag(&_legacyType, SMALL_SCENERY_FLAG_FULL_TILE)) && (scenery_small_entry_has_flag(&_legacyType, SMALL_SCENERY_FLAG_VOFFSET_CENTRE))) { - y -= 12; + screenCoords.y -= 12; } - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); if (scenery_small_entry_has_flag(&_legacyType, SMALL_SCENERY_FLAG_HAS_GLASS)) { @@ -126,7 +125,7 @@ void SmallSceneryObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int3 { imageId |= 0x92000000; } - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); } if (scenery_small_entry_has_flag(&_legacyType, SMALL_SCENERY_FLAG_ANIMATED_FG)) @@ -136,7 +135,7 @@ void SmallSceneryObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int3 { imageId |= 0x92000000; } - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); } } diff --git a/src/openrct2/object/StationObject.cpp b/src/openrct2/object/StationObject.cpp index 29a95cf1a1..0e57815019 100644 --- a/src/openrct2/object/StationObject.cpp +++ b/src/openrct2/object/StationObject.cpp @@ -46,8 +46,7 @@ void StationObject::Unload() void StationObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = (height / 2) + 16; + auto screenCoords = ScreenCoordsXY{ width / 2, (height / 2) + 16 }; auto colour0 = COLOUR_LIGHT_BLUE; auto colour1 = COLOUR_BORDEAUX_RED; @@ -66,16 +65,16 @@ void StationObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t h tImageId |= (colour1 << 24) | IMAGE_TYPE_REMAP_2_PLUS; } - gfx_draw_sprite(dpi, imageId + 0, x, y, 0); + gfx_draw_sprite(dpi, imageId + 0, screenCoords, 0); if (Flags & STATION_OBJECT_FLAGS::IS_TRANSPARENT) { - gfx_draw_sprite(dpi, tImageId, x, y, 0); + gfx_draw_sprite(dpi, tImageId, screenCoords, 0); } - gfx_draw_sprite(dpi, imageId + 4, x, y, 0); + gfx_draw_sprite(dpi, imageId + 4, screenCoords, 0); if (Flags & STATION_OBJECT_FLAGS::IS_TRANSPARENT) { - gfx_draw_sprite(dpi, tImageId + 4, x, y, 0); + gfx_draw_sprite(dpi, tImageId + 4, screenCoords, 0); } } diff --git a/src/openrct2/object/TerrainEdgeObject.cpp b/src/openrct2/object/TerrainEdgeObject.cpp index 8ade1513b0..bba366facf 100644 --- a/src/openrct2/object/TerrainEdgeObject.cpp +++ b/src/openrct2/object/TerrainEdgeObject.cpp @@ -37,12 +37,11 @@ void TerrainEdgeObject::Unload() void TerrainEdgeObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; uint32_t imageId = BaseImageId; - gfx_draw_sprite(dpi, imageId + 5, x + 8, y - 8, 0); - gfx_draw_sprite(dpi, imageId + 5, x + 8, y + 8, 0); + gfx_draw_sprite(dpi, imageId + 5, screenCoords + ScreenCoordsXY{ 8, -8 }, 0); + gfx_draw_sprite(dpi, imageId + 5, screenCoords + ScreenCoordsXY{ 8, 8 }, 0); } void TerrainEdgeObject::ReadJson(IReadObjectContext* context, const json_t* root) diff --git a/src/openrct2/object/TerrainSurfaceObject.cpp b/src/openrct2/object/TerrainSurfaceObject.cpp index a79b0fd600..1f6de394e6 100644 --- a/src/openrct2/object/TerrainSurfaceObject.cpp +++ b/src/openrct2/object/TerrainSurfaceObject.cpp @@ -54,21 +54,22 @@ void TerrainSurfaceObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, in imageId |= SPRITE_ID_PALETTE_COLOUR_1(Colour); } + ScreenCoordsXY screenCoords{}; int32_t x0 = 0; - int32_t y = -16; + screenCoords.y = -16; for (int32_t i = 0; i < 8; i++) { - int32_t x = x0; + screenCoords.x = x0; if (i % 2 == 0) { - x -= 32; + screenCoords.x -= 32; } for (int32_t j = 0; j < 4; j++) { - gfx_draw_sprite(dpi, imageId, x, y, 0); - x += 64; + gfx_draw_sprite(dpi, imageId, screenCoords, 0); + screenCoords.x += 64; } - y += 16; + screenCoords.y += 16; } } diff --git a/src/openrct2/object/WallObject.cpp b/src/openrct2/object/WallObject.cpp index ed69b18882..aba576cfbb 100644 --- a/src/openrct2/object/WallObject.cpp +++ b/src/openrct2/object/WallObject.cpp @@ -69,11 +69,10 @@ void WallObject::Unload() void WallObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const { - int32_t x = width / 2; - int32_t y = height / 2; + auto screenCoords = ScreenCoordsXY{ width / 2, height / 2 }; - x += 14; - y += (_legacyType.wall.height * 2) + 16; + screenCoords.x += 14; + screenCoords.y += (_legacyType.wall.height * 2) + 16; uint32_t imageId = 0x20D00000 | _legacyType.image; if (_legacyType.wall.flags & WALL_SCENERY_HAS_SECONDARY_COLOUR) @@ -81,17 +80,17 @@ void WallObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t heig imageId |= 0x92000000; } - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); if (_legacyType.wall.flags & WALL_SCENERY_HAS_GLASS) { imageId = _legacyType.image + 0x44500006; - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); } else if (_legacyType.wall.flags & WALL_SCENERY_IS_DOOR) { imageId++; - gfx_draw_sprite(dpi, imageId, x, y, 0); + gfx_draw_sprite(dpi, imageId, screenCoords, 0); } } diff --git a/src/openrct2/paint/Paint.cpp b/src/openrct2/paint/Paint.cpp index aa01e05902..ee7ce56287 100644 --- a/src/openrct2/paint/Paint.cpp +++ b/src/openrct2/paint/Paint.cpp @@ -522,17 +522,16 @@ static void paint_attached_ps(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t attached_paint_struct* attached_ps = ps->attached_ps; for (; attached_ps; attached_ps = attached_ps->next) { - int16_t x = attached_ps->x + ps->x; - int16_t y = attached_ps->y + ps->y; + auto screenCoords = ScreenCoordsXY{ attached_ps->x + ps->x, attached_ps->y + ps->y }; uint32_t imageId = paint_ps_colourify_image(attached_ps->image_id, ps->sprite_type, viewFlags); if (attached_ps->flags & PAINT_STRUCT_FLAG_IS_MASKED) { - gfx_draw_sprite_raw_masked(dpi, x, y, imageId, attached_ps->colour_image_id); + gfx_draw_sprite_raw_masked(dpi, screenCoords.x, screenCoords.y, imageId, attached_ps->colour_image_id); } else { - gfx_draw_sprite(dpi, imageId, x, y, ps->tertiary_colour); + gfx_draw_sprite(dpi, imageId, screenCoords, ps->tertiary_colour); } } } @@ -636,7 +635,7 @@ static void paint_ps_image(rct_drawpixelinfo* dpi, paint_struct* ps, uint32_t im return gfx_draw_sprite_raw_masked(dpi, x, y, imageId, ps->colour_image_id); } - gfx_draw_sprite(dpi, imageId, x, y, ps->tertiary_colour); + gfx_draw_sprite(dpi, imageId, { x, y }, ps->tertiary_colour); } static uint32_t paint_ps_colourify_image(uint32_t imageId, uint8_t spriteType, uint32_t viewFlags)