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

Integrate globals in new_ride.c

This commit is contained in:
Ted John
2016-09-05 23:20:08 +01:00
parent 248424e6ad
commit 2b33c3d55e
2 changed files with 39 additions and 41 deletions

View File

@@ -295,10 +295,6 @@
#define RCT2_ADDRESS_HINSTANCE 0x01423A08
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE 0x00F43833
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB 0x00F43824
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM 0x00F43825
#define RCT2_ADDRESS_WINDOW_MAP_SELECTED_TAB 0x014209E4
#define RCT2_ADDRESS_GAME_VERSION_NUMBER 0x0013587BC
@@ -478,6 +474,10 @@
#define RCT2_ADDRESS_CONSTRUCT_PATH_VALID_DIRECTIONS 0x00F3EF9E
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE 0x00F43833
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB 0x00F43824
#define RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM 0x00F43825
#define RCT2_ADDRESS_STAFF_HIGHLIGHTED_INDEX 0x00F43908
#define RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB 0x00F4390A

View File

@@ -14,7 +14,6 @@
*****************************************************************************/
#pragma endregion
#include "../addresses.h"
#include "../audio/audio.h"
#include "../config.h"
#include "../game.h"
@@ -35,7 +34,9 @@
#include "../sprites.h"
#include "../ride/track_data.h"
#define _window_new_ride_current_tab RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8)
static uint8 _windowNewRideCurrentTab;
static ride_list_item _windowNewRideHighlightedItem[6];
static ride_list_item _windowNewRideListItems[384];
#pragma region Ride type view order
@@ -270,13 +271,13 @@ static bool _trackSelectionByType;
*
* rct2: 0x006ACA58
*/
void window_new_ride_init_vars() {
void window_new_ride_init_vars()
{
// If we are in the track designer, default to the Roller Coaster tab
if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) {
RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8) = WINDOW_NEW_RIDE_PAGE_ROLLER_COASTER;
}
else {
RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8) = WINDOW_NEW_RIDE_PAGE_TRANSPORT;
_windowNewRideCurrentTab = WINDOW_NEW_RIDE_PAGE_ROLLER_COASTER;
} else {
_windowNewRideCurrentTab = WINDOW_NEW_RIDE_PAGE_TRANSPORT;
}
for (short i = 0; i < 6; i++) {
@@ -284,10 +285,8 @@ void window_new_ride_init_vars() {
Reset what is highlighted in each tab.
Each 16bit number represents the item in its respective tab.
*/
RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, uint16)[i] = 0xFFFF;
_windowNewRideHighlightedItem[i] = (ride_list_item){ 255, 255 };
}
RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE, uint8) = 0;
}
/**
@@ -297,8 +296,8 @@ void window_new_ride_init_vars() {
*/
static void window_new_ride_populate_list()
{
uint8 currentCategory = _window_new_ride_current_tab;
ride_list_item *nextListItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
uint8 currentCategory = _windowNewRideCurrentTab;
ride_list_item *nextListItem = _windowNewRideListItems;
// For each ride type in the view order list
for (int i = 0; i < countof(RideTypeViewOrder); i++) {
@@ -390,9 +389,9 @@ static void window_new_ride_scroll_to_focused_ride(rct_window *w)
// Find row index of the focused ride type
rct_widget *listWidget = &window_new_ride_widgets[WIDX_RIDE_LIST];
int focusRideType = RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, uint16)[_window_new_ride_current_tab];
int focusRideType = _windowNewRideHighlightedItem[_windowNewRideCurrentTab].ride_type_and_entry;
int count = 0, row = 0;
ride_list_item *listItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
ride_list_item *listItem = _windowNewRideListItems;
while (listItem->type != 255 || listItem->entry_index != 255) {
if (listItem->type == focusRideType) {
row = count / 5;
@@ -450,9 +449,9 @@ rct_window *window_new_ride_open()
window_new_ride_populate_list();
w->new_ride.highlighted_ride_id = RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, sint16)[_window_new_ride_current_tab];
w->new_ride.highlighted_ride_id = _windowNewRideHighlightedItem[_windowNewRideCurrentTab].ride_type_and_entry;
if (w->new_ride.highlighted_ride_id == -1)
w->new_ride.highlighted_ride_id = RCT2_GLOBAL(0x00F43523, sint16);
w->new_ride.highlighted_ride_id = _windowNewRideListItems[0].ride_type_and_entry;
w->width = 1;
window_new_ride_refresh_widget_sizing(w);
@@ -490,12 +489,11 @@ void window_new_ride_focus(ride_list_item rideItem)
else
window_new_ride_set_page(w, gRideCategories[rideType->ride_type[0]]);
ride_list_item *listItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
ride_list_item *listItem = _windowNewRideListItems;
while (listItem->type != RIDE_TYPE_NULL) {
if (listItem->type == rideItem.type && listItem->entry_index == rideItem.entry_index) {
RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, uint8) = rideItem.type;
RCT2_GLOBAL(0x00F43826, uint8) = rideItem.entry_index;
w->new_ride.highlighted_ride_id = (rideItem.entry_index << 8) | rideItem.type;
_windowNewRideHighlightedItem[0] = rideItem;
w->new_ride.highlighted_ride_id = rideItem.ride_type_and_entry;
window_new_ride_scroll_to_focused_ride(w);
}
listItem++;
@@ -504,15 +502,15 @@ void window_new_ride_focus(ride_list_item rideItem)
static void window_new_ride_set_page(rct_window *w, int page)
{
_window_new_ride_current_tab = page;
_windowNewRideCurrentTab = page;
w->frame_no = 0;
w->new_ride.highlighted_ride_id = -1;
w->new_ride.selected_ride_countdown = -1;
window_new_ride_populate_list();
if (page < WINDOW_NEW_RIDE_PAGE_RESEARCH) {
w->new_ride.highlighted_ride_id = RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, sint16)[page];
w->new_ride.highlighted_ride_id = _windowNewRideHighlightedItem[page].ride_type_and_entry;
if (w->new_ride.highlighted_ride_id == -1)
w->new_ride.highlighted_ride_id = RCT2_GLOBAL(0x00F43523, sint16);
w->new_ride.highlighted_ride_id = _windowNewRideListItems[0].ride_type_and_entry;
}
window_new_ride_refresh_widget_sizing(w);
@@ -529,7 +527,7 @@ static void window_new_ride_refresh_widget_sizing(rct_window *w)
int width, height;
// Show or hide unrelated widgets
if (_window_new_ride_current_tab != WINDOW_NEW_RIDE_PAGE_RESEARCH) {
if (_windowNewRideCurrentTab != WINDOW_NEW_RIDE_PAGE_RESEARCH) {
window_new_ride_widgets[WIDX_RIDE_LIST].type = WWT_SCROLL;
window_new_ride_widgets[WIDX_CURRENTLY_IN_DEVELOPMENT_GROUP].type = WWT_EMPTY;
window_new_ride_widgets[WIDX_LAST_DEVELOPMENT_GROUP].type = WWT_EMPTY;
@@ -576,7 +574,7 @@ static void window_new_ride_set_pressed_tab(rct_window *w)
int i;
for (i = 0; i < WINDOW_NEW_RIDE_PAGE_COUNT; i++)
w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + i));
w->pressed_widgets |= 1LL << (WIDX_TAB_1 + _window_new_ride_current_tab);
w->pressed_widgets |= 1LL << (WIDX_TAB_1 + _windowNewRideCurrentTab);
}
const int ThrillRidesTabAnimationSequence[] = {
@@ -589,7 +587,7 @@ static void window_new_ride_draw_tab_image(rct_drawpixelinfo *dpi, rct_window *w
if (w->widgets[widgetIndex].type != WWT_EMPTY && !(w->disabled_widgets & (1LL << widgetIndex))) {
int frame = 0;
if (_window_new_ride_current_tab == page)
if (_windowNewRideCurrentTab == page)
frame = w->frame_no / window_new_ride_tab_animation_divisor[page];
spriteIndex += page == WINDOW_NEW_RIDE_PAGE_THRILL ?
@@ -648,10 +646,10 @@ static void window_new_ride_mousedown(int widgetIndex, rct_window *w, rct_widget
static void window_new_ride_update(rct_window *w)
{
w->frame_no++;
if (w->frame_no >= window_new_ride_tab_animation_loops[_window_new_ride_current_tab])
if (w->frame_no >= window_new_ride_tab_animation_loops[_windowNewRideCurrentTab])
w->frame_no = 0;
widget_invalidate(w, WIDX_TAB_1 + _window_new_ride_current_tab);
widget_invalidate(w, WIDX_TAB_1 + _windowNewRideCurrentTab);
if (w->new_ride.selected_ride_id != -1 && w->new_ride.selected_ride_countdown-- == 0)
window_new_ride_select(w);
@@ -668,7 +666,7 @@ static void window_new_ride_update(rct_window *w)
*/
static void window_new_ride_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height)
{
ride_list_item *listItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
ride_list_item *listItem = _windowNewRideListItems;
int count = 0;
while (listItem->type != 255 || listItem->entry_index != 255) {
@@ -690,7 +688,7 @@ static void window_new_ride_scrollmousedown(rct_window *w, int scrollIndex, int
if (item.type == 255 && item.entry_index == 255)
return;
RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, ride_list_item)[_window_new_ride_current_tab] = item;
_windowNewRideHighlightedItem[_windowNewRideCurrentTab] = item;
w->new_ride.selected_ride_id = item.ride_type_and_entry;
audio_play_sound_panned(SOUND_CLICK_1, w->x + (w->width / 2), 0, 0, 0);
@@ -715,7 +713,7 @@ static void window_new_ride_scrollmouseover(rct_window *w, int scrollIndex, int
return;
w->new_ride.highlighted_ride_id = item.ride_type_and_entry;
RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, ride_list_item)[_window_new_ride_current_tab] = item;
_windowNewRideHighlightedItem[_windowNewRideCurrentTab] = item;
window_invalidate(w);
}
@@ -738,12 +736,12 @@ static void window_new_ride_invalidate(rct_window *w)
window_new_ride_set_pressed_tab(w);
window_new_ride_widgets[WIDX_TITLE].text = window_new_ride_titles[_window_new_ride_current_tab];
window_new_ride_widgets[WIDX_TITLE].text = window_new_ride_titles[_windowNewRideCurrentTab];
window_new_ride_widgets[WIDX_TAB_7].type = WWT_TAB;
if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER)
window_new_ride_widgets[WIDX_TAB_7].type = WWT_EMPTY;
if (_window_new_ride_current_tab == WINDOW_NEW_RIDE_PAGE_RESEARCH) {
if (_windowNewRideCurrentTab == WINDOW_NEW_RIDE_PAGE_RESEARCH) {
window_new_ride_widgets[WIDX_LAST_DEVELOPMENT_BUTTON].type = WWT_EMPTY;
uint32 typeId = gResearchLastItemSubject;
if (typeId != 0xFFFFFFFF) {
@@ -762,7 +760,7 @@ static void window_new_ride_paint(rct_window *w, rct_drawpixelinfo *dpi)
window_draw_widgets(w, dpi);
window_new_ride_draw_tab_images(dpi, w);
if (_window_new_ride_current_tab != WINDOW_NEW_RIDE_PAGE_RESEARCH) {
if (_windowNewRideCurrentTab != WINDOW_NEW_RIDE_PAGE_RESEARCH) {
ride_list_item item = { .ride_type_and_entry = w->new_ride.highlighted_ride_id };
if (item.type != 255 || item.entry_index != 255)
window_new_ride_paint_ride_information(w, dpi, item, w->x + 3, w->y + w->height - 52, w->width - 6);
@@ -777,14 +775,14 @@ static void window_new_ride_paint(rct_window *w, rct_drawpixelinfo *dpi)
*/
static void window_new_ride_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrollIndex)
{
if (_window_new_ride_current_tab == WINDOW_NEW_RIDE_PAGE_RESEARCH)
if (_windowNewRideCurrentTab == WINDOW_NEW_RIDE_PAGE_RESEARCH)
return;
gfx_clear(dpi, ColourMapA[w->colours[1]].mid_light * 0x1010101);
int x = 1;
int y = 1;
ride_list_item *listItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
ride_list_item *listItem = _windowNewRideListItems;
while (listItem->type != 255 || listItem->entry_index != 255) {
rct_ride_entry *rideEntry;
// Draw flat button rectangle
@@ -836,7 +834,7 @@ static ride_list_item window_new_ride_scroll_get_ride_list_item_at(rct_window *w
int index = column + (row * 5);
ride_list_item *listItem = RCT2_ADDRESS(0x00F43523, ride_list_item);
ride_list_item *listItem = _windowNewRideListItems;
while (listItem->type != 255 || listItem->entry_index != 255) {
if (index-- == 0)
return *listItem;