1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-17 12:03:07 +01:00

implement most of income tab for ride window

This commit is contained in:
IntelOrca
2014-09-05 23:44:02 +01:00
parent 5c1b8a7c3c
commit abdfa95b24
3 changed files with 370 additions and 3 deletions

View File

@@ -146,7 +146,7 @@ typedef struct {
uint16 mechanic; // 0x18E
uint8 pad_190[0x03];
uint8 breakdown_reason; // 0x193
uint8 pad_194[2];
money16 price_secondary; // 0x194
uint16 var_196;
// used in computing excitement, nausea, etc
uint8 var_198;

View File

@@ -408,6 +408,7 @@ enum {
STR_FOOTPATH_TIP = 1424,
STR_CUSTOMERS_PER_HOUR = 1427,
STR_RIDE_INCOME_ADMISSION_PRICE = 1428,
STR_FREE = 1430,
STR_WALKING = 1431,
@@ -627,6 +628,8 @@ enum {
STR_MARKETING = 1953,
STR_RESEARCH_FUNDING = 1954,
STR_ON_RIDE_PHOTO_PRICE = 1963,
STR_ITEM_START = 1988,
STR_ITEM_SINGULAR_START = 2044,
STR_ITEM2_START = 2090,
@@ -1004,6 +1007,9 @@ enum {
STR_REAL_PARKS = STR_BEGINNER_PARKS + 3,
STR_OTHER_PARKS = STR_BEGINNER_PARKS + 4,
STR_SAME_PRICE_THROUGHOUT_PARK = 3071,
STR_SAME_PRICE_THROUGHOUT_PARK_TIP = 3072,
STR_LIST_RIDES_TIP = 3104,
STR_LIST_SHOPS_AND_STALLS_TIP = 3105,
STR_LIST_KIOSKS_AND_FACILITIES_TIP = 3106,

View File

@@ -89,6 +89,17 @@ enum {
WIDX_SAVE_DESIGN,
WIDX_CANCEL_DESIGN,
WIDX_PRIMARY_PRICE_LABEL = 14,
WIDX_PRIMARY_PRICE,
WIDX_PRIMARY_PRICE_INCREASE,
WIDX_PRIMARY_PRICE_DECREASE,
WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK,
WIDX_SECONDARY_PRICE_LABEL,
WIDX_SECONDARY_PRICE,
WIDX_SECONDARY_PRICE_INCREASE,
WIDX_SECONDARY_PRICE_DECREASE,
WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK,
WIDX_SHOW_GUESTS_THOUGHTS = 14,
WIDX_SHOW_GUESTS_ON_RIDE,
WIDX_SHOW_GUESTS_QUEUING
@@ -194,6 +205,36 @@ static rct_widget window_ride_measurements_widgets[] = {
{ WIDGETS_END },
};
// 0x009AE844
static rct_widget window_ride_income_widgets[] = {
{ WWT_FRAME, 0, 0, 315, 0, 206, 0x0FFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 314, 1, 14, 0x3DD, STR_WINDOW_TITLE_TIP },
{ WWT_CLOSEBOX, 0, 303, 313, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP },
{ WWT_RESIZE, 1, 0, 315, 43, 179, 0x0FFFFFFFF, STR_NONE },
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_VIEW_OF_RIDE_ATTRACTION_TIP },
{ WWT_TAB, 1, 34, 64, 17, 46, 0x2000144E, STR_VEHICLE_DETAILS_AND_OPTIONS_TIP },
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_OPERATING_OPTIONS_TIP },
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_MAINTENANCE_OPTIONS_TIP },
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_COLOUR_SCHEME_OPTIONS_TIP },
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_SOUND_AND_MUSIC_OPTIONS_TIP },
{ WWT_TAB, 1, 189, 219, 17, 43, 0x2000144E, STR_MEASUREMENTS_AND_TEST_DATA_TIP },
{ WWT_TAB, 1, 220, 250, 17, 43, 0x2000144E, STR_GRAPHS_TIP },
{ WWT_TAB, 1, 251, 281, 17, 43, 0x2000144E, STR_INCOME_AND_COSTS_TIP },
{ WWT_TAB, 1, 282, 312, 17, 43, 0x2000144E, STR_CUSTOMER_INFORMATION_TIP },
{ WWT_24, 1, 5, 144, 50, 61, 0xFFFFFFFF, STR_NONE },
{ WWT_SPINNER, 1, 147, 308, 50, 61, 1429, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 51, 55, STR_NUMERIC_UP, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 56, 60, STR_NUMERIC_DOWN, STR_NONE },
{ WWT_CHECKBOX, 1, 5, 310, 61, 72, STR_SAME_PRICE_THROUGHOUT_PARK, STR_SAME_PRICE_THROUGHOUT_PARK_TIP },
{ WWT_24, 1, 5, 144, 89, 100, 0xFFFFFFFF, STR_NONE },
{ WWT_SPINNER, 1, 147, 308, 89, 100, 1799, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 90, 94, STR_NUMERIC_UP, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, 297, 307, 95, 99, STR_NUMERIC_DOWN, STR_NONE },
{ WWT_CHECKBOX, 1, 5, 310, 100, 111, STR_SAME_PRICE_THROUGHOUT_PARK, STR_SAME_PRICE_THROUGHOUT_PARK_TIP },
{ WIDGETS_END },
};
// 0x009AE9C8
static rct_widget window_ride_customer_widgets[] = {
{ WWT_FRAME, 0, 0, 315, 0, 206, 0x0FFFFFFFF, STR_NONE },
@@ -226,7 +267,7 @@ static rct_widget *window_ride_page_widgets[] = {
window_ride_music_widgets,
window_ride_measurements_widgets,
(rct_widget*)0x009AE710,
(rct_widget*)0x009AE844,
window_ride_income_widgets,
window_ride_customer_widgets
};
@@ -286,6 +327,13 @@ static void window_ride_measurements_toolabort();
static void window_ride_measurements_invalidate();
static void window_ride_measurements_paint();
static void window_ride_income_mouseup();
static void window_ride_income_resize();
static void window_ride_income_mousedown(int widgetIndex, rct_window *w, rct_widget *widget);
static void window_ride_income_update(rct_window *w);
static void window_ride_income_invalidate();
static void window_ride_income_paint();
static void window_ride_customer_mouseup();
static void window_ride_customer_resize();
static void window_ride_customer_update(rct_window *w);
@@ -420,6 +468,38 @@ static void* window_ride_measurements_events[] = {
window_ride_emptysub
};
// 0x0098DEF4
static void* window_ride_income_events[] = {
window_ride_emptysub,
window_ride_income_mouseup,
window_ride_income_resize,
window_ride_income_mousedown,
window_ride_emptysub,
window_ride_emptysub,
window_ride_income_update,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_emptysub,
window_ride_income_invalidate,
window_ride_income_paint,
window_ride_emptysub
};
// 0x0098DE84
static void* window_ride_customer_events[] = {
window_ride_emptysub,
@@ -461,7 +541,7 @@ static uint32* window_ride_page_events[] = {
(uint32*)window_ride_music_events,
(uint32*)window_ride_measurements_events,
(uint32*)0x0098DF64,
(uint32*)0x0098DEF4,
(uint32*)window_ride_income_events,
(uint32*)window_ride_customer_events
};
@@ -2456,6 +2536,287 @@ static void window_ride_measurements_paint()
#pragma endregion
#pragma region Income
/**
*
* rct2: 0x006ADEFD
*/
static void window_ride_income_toggle_primary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006AE06E
*/
static void window_ride_income_toggle_secondary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006AE1E4
*/
static void window_ride_income_increase_primary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006AE237
*/
static void window_ride_income_decrease_primary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006AE269
*/
static void window_ride_income_increase_secondary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006AE28D
*/
static void window_ride_income_decrease_secondary_price(rct_window *w)
{
}
/**
*
* rct2: 0x006ADEA9
*/
static void window_ride_income_mouseup()
{
short widgetIndex;
rct_window *w;
window_widget_get_registers(w, widgetIndex);
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
case WIDX_TAB_5:
case WIDX_TAB_6:
case WIDX_TAB_7:
case WIDX_TAB_8:
case WIDX_TAB_9:
case WIDX_TAB_10:
window_ride_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK:
window_ride_income_toggle_primary_price(w);
break;
case WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK:
window_ride_income_toggle_primary_price(w);
break;
}
}
/**
*
* rct2: 0x006AE2F8
*/
static void window_ride_income_resize()
{
rct_window *w;
window_get_register(w);
window_set_resize(w, 316, 177, 316, 177);
}
/**
*
* rct2: 0x006ADED4
*/
static void window_ride_income_mousedown(int widgetIndex, rct_window *w, rct_widget *widget)
{
switch (widgetIndex) {
case WIDX_PRIMARY_PRICE_INCREASE:
window_ride_income_increase_primary_price(w);
break;
case WIDX_PRIMARY_PRICE_DECREASE:
window_ride_income_decrease_primary_price(w);
break;
case WIDX_SECONDARY_PRICE_INCREASE:
window_ride_income_increase_secondary_price(w);
break;
case WIDX_SECONDARY_PRICE_DECREASE:
window_ride_income_decrease_secondary_price(w);
break;
}
}
/**
*
* rct2: 0x006AE2BF
*/
static void window_ride_income_update(rct_window *w)
{
rct_ride *ride;
w->frame_no++;
RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0);
widget_invalidate(WC_RIDE, w->number, WIDX_TAB_9);
ride = GET_RIDE(w->number);
if (ride->var_14D & 2) {
ride->var_14D &= ~2;
window_invalidate(w);
}
}
/**
*
* rct2: 0x006ADAA3
*/
static void window_ride_income_invalidate()
{
rct_window *w;
rct_widget *widgets;
rct_ride_type *rideEntry, **rideEntries = (rct_ride_type**)0x009ACFA4;
rct_string_id stringId;
int primaryItem, secondaryItem;
window_get_register(w);
widgets = window_ride_page_widgets[w->page];
if (w->widgets != widgets) {
w->widgets = widgets;
window_init_scroll_widgets(w);
}
window_ride_set_pressed_tab(w);
rct_ride *ride = GET_RIDE(w->number);
RCT2_GLOBAL(0x013CE952 + 0, uint16) = ride->name;
RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments;
rideEntry = rideEntries[ride->subtype];
// Primary item
w->pressed_widgets &= ~(1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
w->disabled_widgets &= ~(1 << WIDX_PRIMARY_PRICE);
if (
!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_PARK_FREE_ENTRY) &&
rideEntry->shop_item == 255 &&
ride->type != RIDE_TYPE_BATHROOM
) {
w->disabled_widgets |= (1 << WIDX_PRIMARY_PRICE);
}
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].image = STR_RIDE_INCOME_ADMISSION_PRICE;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].image = STR_ON_RIDE_PHOTO_PRICE;
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_EMPTY;
window_ride_income_widgets[WIDX_PRIMARY_PRICE].image = 1429;
RCT2_GLOBAL(0x013CE952 + 6, money32) = ride->price;
if (ride->price == 0)
window_ride_income_widgets[WIDX_PRIMARY_PRICE].image = STR_FREE;
primaryItem = 31;
if (ride->type != RIDE_TYPE_BATHROOM) {
if ((primaryItem = (sint8)rideEntry->shop_item) != -1) {
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_CHECKBOX;
if (primaryItem < 32) {
if (RCT2_GLOBAL(0x01358838, uint32) & (1 << primaryItem))
w->pressed_widgets |= (1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
if (primaryItem != 31)
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].image = 1960 + primaryItem;
} else {
primaryItem -= 32;
if (RCT2_GLOBAL(0x0135934C, uint32) & (1 << primaryItem))
w->pressed_widgets |= (1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].image = 2100 + primaryItem;
}
}
}
// Get secondary item
secondaryItem = RCT2_GLOBAL(0x0097D7CB + (ride->type * 4), uint8);
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) {
if ((secondaryItem = (sint8)rideEntry->shop_item_secondary) != -1) {
// Set secondary item label
stringId = 1960 + secondaryItem;
if (stringId >= 1992)
stringId += 108;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].image = stringId;
}
}
if (secondaryItem == -1) {
// Hide secondary item widgets
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].type = WWT_EMPTY;
window_ride_income_widgets[WIDX_SECONDARY_PRICE].type = WWT_EMPTY;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_INCREASE].type = WWT_EMPTY;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_DECREASE].type = WWT_EMPTY;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_EMPTY;
} else {
// Set same price throughout park checkbox
w->pressed_widgets &= ~(1 << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
if (secondaryItem < 32) {
if (RCT2_GLOBAL(0x01358838, uint32) & (1 << secondaryItem))
w->pressed_widgets |= (1 << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
} else {
secondaryItem -= 32;
if (RCT2_GLOBAL(0x0135884C, uint32) & (1 << secondaryItem))
w->pressed_widgets |= (1 << WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK);
}
// Show widgets
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].type = WWT_24;
window_ride_income_widgets[WIDX_SECONDARY_PRICE].type = WWT_SPINNER;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_INCREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_DECREASE].type = WWT_DROPDOWN_BUTTON;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_CHECKBOX;
// Set secondary item price
window_ride_income_widgets[WIDX_SECONDARY_PRICE].image = 1799;
RCT2_GLOBAL(0x013CE952 + 10, money32) = ride->price_secondary;
if (ride->price_secondary == 0)
window_ride_income_widgets[WIDX_SECONDARY_PRICE].image = STR_FREE;
}
window_ride_anchor_border_widgets(w);
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_10);
}
/**
*
* rct2: 0x006ADCE5
*/
static void window_ride_income_paint()
{
rct_window *w;
rct_drawpixelinfo *dpi;
window_paint_get_registers(w, dpi);
window_draw_widgets(w, dpi);
window_ride_draw_tab_images(dpi, w);
}
#pragma endregion
#pragma region Customer
/**