1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-19 21:13:05 +01:00

implement tab images

This commit is contained in:
IntelOrca
2014-09-03 23:19:13 +01:00
parent e452ed00fa
commit ae9b91d859
2 changed files with 199 additions and 15 deletions

View File

@@ -2265,14 +2265,13 @@ rct_drawpixelinfo* clip_drawpixelinfo(rct_drawpixelinfo* dpi, int left, int widt
newDrawPixelInfo->height = dpi->height;
newDrawPixelInfo->pitch = dpi->pitch;
newDrawPixelInfo->zoom_level = 0;
newDrawPixelInfo->var_0F = dpi->var_0F;
if (left > newDrawPixelInfo->x) {
uint16 newWidth = left - newDrawPixelInfo->x;
newDrawPixelInfo->width -= newWidth;
uint16 clippedFromLeft = left - newDrawPixelInfo->x;
newDrawPixelInfo->width -= clippedFromLeft;
newDrawPixelInfo->x = left;
newDrawPixelInfo->pitch += newWidth;
newDrawPixelInfo->bits += newWidth;
newDrawPixelInfo->pitch += clippedFromLeft;
newDrawPixelInfo->bits += clippedFromLeft;
}
int stickOutWidth = newDrawPixelInfo->x + newDrawPixelInfo->width - right;
@@ -2282,10 +2281,10 @@ rct_drawpixelinfo* clip_drawpixelinfo(rct_drawpixelinfo* dpi, int left, int widt
}
if (top > newDrawPixelInfo->y) {
uint16 newHeight = top - newDrawPixelInfo->y;
newDrawPixelInfo->height = newHeight;
uint16 clippedFromTop = top - newDrawPixelInfo->y;
newDrawPixelInfo->height -= clippedFromTop;
newDrawPixelInfo->y = top;
int bitsPlus = (newDrawPixelInfo->pitch + newDrawPixelInfo->width) * newHeight;
uint32 bitsPlus = (newDrawPixelInfo->pitch + newDrawPixelInfo->width) * clippedFromTop;
newDrawPixelInfo->bits += bitsPlus;
}

View File

@@ -168,6 +168,7 @@ static void window_ride_main_mousedown(int widgetIndex, rct_window *w, rct_widge
static void window_ride_main_dropdown();
static void window_ride_main_update(rct_window *w);
static void window_ride_main_textinput();
static void window_ride_main_unknown_14();
static void window_ride_main_invalidate();
static void window_ride_main_paint();
@@ -200,7 +201,7 @@ static void* window_ride_main_events[] = {
window_ride_emptysub,
window_ride_emptysub,
window_ride_main_textinput,
window_ride_emptysub,
window_ride_main_unknown_14,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
@@ -257,6 +258,177 @@ static uint32* window_ride_page_events[] = {
#pragma endregion
const int window_ride_tab_animation_divisor[] = { 0, 0, 2, 2, 4, 2, 8, 8, 2, 0 };
const int window_ride_tab_animation_frames[] = { 0, 0, 4, 16, 8, 16, 8, 8, 8, 0 };
// WINDOW_PARK_PAGE_MAIN,
// WINDOW_PARK_PAGE_VEHICLE,
// WINDOW_PARK_PAGE_OPERATING,
// WINDOW_PARK_PAGE_MAINTENANCE,
// WINDOW_PARK_PAGE_COLOUR,
// WINDOW_PARK_PAGE_MUSIC,
// WINDOW_PARK_PAGE_MEASUREMENTS,
// WINDOW_PARK_PAGE_GRAPHS,
// WINDOW_PARK_PAGE_INCOME,
// WINDOW_PARK_PAGE_CUSTOMER
static void window_ride_draw_tab_image(rct_drawpixelinfo *dpi, rct_window *w, int page, int spriteIndex)
{
int widgetIndex = WIDX_TAB_1 + page;
if (!(w->disabled_widgets & (1LL << widgetIndex))) {
if (w->page == page) {
int frame = w->frame_no / window_ride_tab_animation_divisor[w->page];
spriteIndex += (frame % window_ride_tab_animation_frames[w->page]);
}
gfx_draw_sprite(dpi, spriteIndex, w->x + w->widgets[widgetIndex].left, w->y + w->widgets[widgetIndex].top, 0);
}
}
/**
*
* rct2: 0x006B2E88
*/
static void window_ride_draw_tab_main(rct_drawpixelinfo *dpi, rct_window *w)
{
int widgetIndex = WIDX_TAB_1 + WINDOW_PARK_PAGE_MAIN;
if (!(w->disabled_widgets & (1LL << widgetIndex))) {
int spriteIndex;
int rideType = GET_RIDE(w->number)->type;
switch (gRideClassifications[rideType]) {
case RIDE_CLASS_RIDE:
spriteIndex = 5442;
if (w->page == WINDOW_PARK_PAGE_MAIN)
spriteIndex += (w->frame_no / 4) % 16;
break;
case RIDE_CLASS_SHOP_OR_STALL:
spriteIndex = 5351;
if (w->page == WINDOW_PARK_PAGE_MAIN)
spriteIndex += (w->frame_no / 4) % 16;
break;
case RIDE_CLASS_KIOSK_OR_FACILITY:
spriteIndex = 5367;
if (w->page == WINDOW_PARK_PAGE_MAIN)
spriteIndex += (w->frame_no / 4) % 8;
break;
}
gfx_draw_sprite(dpi, spriteIndex, w->x + w->widgets[widgetIndex].left, w->y + w->widgets[widgetIndex].top, 0);
}
}
/**
*
* rct2: 0x006B2B68
*/
static void window_ride_draw_tab_vehicle(rct_drawpixelinfo *dpi, rct_window *w)
{
rct_ride *ride;
rct_widget *widget;
int widgetIndex, spriteIndex, colour, x, y, width, height;
uint8 *ebp;
rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4;
widgetIndex = WIDX_TAB_1 + WINDOW_PARK_PAGE_VEHICLE;
widget = &w->widgets[widgetIndex];
if (!(w->disabled_widgets & (1LL << widgetIndex))) {
x = widget->left + 1;
y = widget->top + 1;
width = widget->right - x;
height = widget->bottom - 3 - y;
if (w->page == WINDOW_PARK_PAGE_VEHICLE)
height += 4;
x += w->x;
y += w->y;
dpi = clip_drawpixelinfo(dpi, x, width, y, height);
if (dpi == NULL)
return;
x = (widget->right - widget->left) / 2;
y = (widget->bottom - widget->top) - 12;
ride = GET_RIDE(w->number);
RCT2_CALLPROC_X(0x006DE4CD, (ride->var_0C9 << 8) | ride->subtype, 0, 0, 0, 0, 0, 0);
rideEntry = rideEntries[ride->subtype];
if (rideEntry->var_008 & 1) {
dpi->zoom_level = 1;
dpi->width *= 2;
dpi->height *= 2;
x *= 2;
y *= 2;
dpi->x *= 2;
dpi->y *= 2;
}
ebp = (uint8*)rideEntry + (RCT2_ADDRESS(0x00F64E38, uint8)[rideEntry->var_013] * 101);
height += RCT2_GLOBAL(ebp + 0x24, sint8);
RCT2_GLOBAL(0x00F43480, uint32) = ride->var_1D4;
colour = (ride->vehicle_colours[1] << 24) | (ride->vehicle_colours[0] << 19);
spriteIndex = 32;
if (w->page == WINDOW_PARK_PAGE_VEHICLE)
spriteIndex += w->frame_no;
spriteIndex /= 2;
if (RCT2_GLOBAL(ebp + 0x2C, uint16) & 0x800)
spriteIndex /= 2;
spriteIndex &= RCT2_GLOBAL(ebp + 0x1A, uint16);
spriteIndex *= RCT2_GLOBAL(ebp + 0x30, uint16);
spriteIndex += RCT2_GLOBAL(ebp + 0x32, uint32);
spriteIndex |= colour;
spriteIndex |= 0x80000000;
gfx_draw_sprite(dpi, spriteIndex, x, y, RCT2_GLOBAL(0x00F43480, uint32));
}
}
/**
*
* rct2: 0x006B2F42
*/
static void window_ride_draw_tab_customer(rct_drawpixelinfo *dpi, rct_window *w)
{
int spriteIndex;
int widgetIndex = WIDX_TAB_1 + WINDOW_PARK_PAGE_CUSTOMER;
rct_widget *widget = &w->widgets[widgetIndex];
if (!(w->disabled_widgets & (1LL << widgetIndex))) {
spriteIndex = 0;
if (w->page == WINDOW_PARK_PAGE_CUSTOMER)
spriteIndex = w->var_492 & ~3;
spriteIndex += RCT2_GLOBAL(RCT2_GLOBAL(0x00982708, uint32), uint32);
spriteIndex += 1;
spriteIndex |= 0xA9E00000;
gfx_draw_sprite(dpi, spriteIndex, w->x + (widget->left + widget->right) / 2, w->y + widget->bottom - 6, 0);
}
}
/**
*
* rct2: 0x006B2B35
*/
static void window_ride_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
{
window_ride_draw_tab_vehicle(dpi, w);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_OPERATING, 5201);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_MAINTENANCE, 5205);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_INCOME, 5253);
window_ride_draw_tab_main(dpi, w);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_MEASUREMENTS, 5229);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_COLOUR, 5221);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_GRAPHS, 5237);
window_ride_draw_tab_customer(dpi, w);
window_ride_draw_tab_image(dpi, w, WINDOW_PARK_PAGE_MUSIC, 5335);
}
/**
*
* rct2: 0x006AEAB4
@@ -456,8 +628,8 @@ static void window_ride_rename(rct_window *w)
rct_ride *ride;
ride = GET_RIDE(w->number);
RCT2_GLOBAL(0x013CE962, uint32) = ride->var_04C;
window_show_textinput(w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->var_04A);
RCT2_GLOBAL(0x013CE962, uint32) = ride->name_arguments;
window_show_textinput(w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->name);
}
/**
@@ -786,7 +958,7 @@ static void window_ride_main_dropdown()
}
RCT2_GLOBAL(0x013CE952 + 6, uint16) = ride->overall_view;
RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->var_04C;
RCT2_GLOBAL(0x013CE952 + 8, uint32) = ride->name_arguments;
game_do_command(0, 1, 0, w->number | (status << 8), GAME_COMMAND_SET_RIDE_OPEN, 0, 0);
break;
}
@@ -858,6 +1030,19 @@ static void window_ride_main_textinput()
game_do_command(0, (w->number << 8) | 1, 0, *((int*)(text + 24)), GAME_COMMAND_SET_RIDE_NAME, *((int*)(text + 32)), *((int*)(text + 28)));
}
/**
*
* rct2: 0x006AF55A
*/
static void window_ride_main_unknown_14()
{
rct_window *w;
window_get_register(w);
window_ride_init_viewport(w);
}
/**
*
* rct2: 0x006AECF6
@@ -886,8 +1071,8 @@ static void window_ride_main_invalidate()
if (ride->lifecycle_flags & RIDE_LIFECYCLE_19)
w->disabled_widgets |= 0x80000;
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->overall_view;
RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->var_04C;
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name;
RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments;
window_ride_main_widgets[WIDX_OPEN].image = SPR_CLOSED + ride->status;
window_ride_anchor_border_widgets(w);
@@ -1058,7 +1243,7 @@ static void window_ride_main_paint()
window_paint_get_registers(w, dpi);
window_draw_widgets(w, dpi);
// window_ride_draw_tabs(w);
window_ride_draw_tab_images(dpi, w);
// Viewport and ear icon
if (w->viewport != NULL) {