Part of #12017 - create gfx_draw_sprite overload (#12026)

* Part of #12017 - create gfx_draw_sprite overload

Part 1. Creates the overload and replaces about a half of the calls since there are too many for one PR.

Co-authored-by: Tulio Leao <tupaschoal@gmail.com>
This commit is contained in:
TomasZilinek 2020-06-23 23:32:34 +02:00 committed by GitHub
parent d2542194fa
commit 9d965ccfb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 169 additions and 178 deletions

View File

@ -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);
}
}

View File

@ -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<size_t>(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++;
}

View File

@ -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
}

View File

@ -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);
}
}

View File

@ -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
{

View File

@ -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]);

View File

@ -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

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
/**

View File

@ -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);
}
}

View File

@ -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))

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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;

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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<rct_large_scenery_tile> LargeSceneryObject::ReadTiles(IStream* stream)

View File

@ -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

View File

@ -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()

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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)