mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-20 05:23:04 +01:00
map window work + identified window var 4AC (selected tab idx)
This commit is contained in:
@@ -203,6 +203,23 @@ enum {
|
||||
|
||||
SPR_TAB_AWARDS = 5527,
|
||||
|
||||
SPR_TAB_GUESTS_0 = 5568,
|
||||
SPR_TAB_GUESTS_1 = SPR_TAB_GUESTS_0 + 1,
|
||||
SPR_TAB_GUESTS_2 = SPR_TAB_GUESTS_0 + 2,
|
||||
SPR_TAB_GUESTS_3 = SPR_TAB_GUESTS_0 + 3,
|
||||
SPR_TAB_GUESTS_4 = SPR_TAB_GUESTS_0 + 4,
|
||||
SPR_TAB_GUESTS_5 = SPR_TAB_GUESTS_0 + 5,
|
||||
SPR_TAB_GUESTS_6 = SPR_TAB_GUESTS_0 + 6,
|
||||
SPR_TAB_GUESTS_7 = SPR_TAB_GUESTS_0 + 7,
|
||||
SPR_TAB_GUESTS_8 = SPR_TAB_GUESTS_0 + 8,
|
||||
SPR_TAB_GUESTS_9 = SPR_TAB_GUESTS_0 + 9,
|
||||
SPR_TAB_GUESTS_10 = SPR_TAB_GUESTS_0 + 10,
|
||||
SPR_TAB_GUESTS_11 = SPR_TAB_GUESTS_0 + 11,
|
||||
SPR_TAB_GUESTS_12 = SPR_TAB_GUESTS_0 + 12,
|
||||
SPR_TAB_GUESTS_13 = SPR_TAB_GUESTS_0 + 13,
|
||||
SPR_TAB_GUESTS_14 = SPR_TAB_GUESTS_0 + 14,
|
||||
SPR_TAB_GUESTS_15 = SPR_TAB_GUESTS_0 + 15,
|
||||
|
||||
SPR_FLOOR_TEXTURE_GRASS = 5579,
|
||||
SPR_FLOOR_TEXTURE_SAND = SPR_FLOOR_TEXTURE_GRASS + 1,
|
||||
SPR_FLOOR_TEXTURE_DIRT = SPR_FLOOR_TEXTURE_GRASS + 2,
|
||||
|
||||
@@ -378,7 +378,7 @@ rct_window *window_create(int x, int y, int width, int height, uint32 *event_han
|
||||
w->var_48E = 0;
|
||||
w->var_490 = 0;
|
||||
w->var_492 = 0;
|
||||
w->var_4AC = 0;
|
||||
w->selected_tab = 0;
|
||||
w->var_4AE = 0;
|
||||
RCT2_NEW_WINDOW++;
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ typedef struct rct_window {
|
||||
sint16 var_492;
|
||||
uint32 var_494;
|
||||
uint8 var_498[0x14];
|
||||
sint16 var_4AC;
|
||||
sint16 selected_tab; // 0x4AC
|
||||
sint16 var_4AE;
|
||||
sint16 var_4B0; // viewport target sprite?
|
||||
sint16 saved_view_x; // 0x4B2
|
||||
|
||||
@@ -171,8 +171,8 @@ static void window_game_top_toolbar_mouseup()
|
||||
window_rotate_camera(mainWindow);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
//RCT2_CALLPROC_EBPSAFE(0x0068C88A);
|
||||
window_map_open();
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
|
||||
//window_map_open();
|
||||
break;
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
if ((RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 16) {
|
||||
|
||||
@@ -195,7 +195,7 @@ static void window_guest_list_mouseup()
|
||||
window_close(w);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
|
||||
window_map_open();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ static enum WINDOW_MAP_WIDGET_IDX {
|
||||
WIDX_BACKGROUND,
|
||||
WIDX_TITLE,
|
||||
WIDX_CLOSE,
|
||||
WIDX_PEOPLE_TAB = 4,
|
||||
WIDX_RIDES_TAB = 5
|
||||
};
|
||||
|
||||
static rct_widget window_map_widgets[] = {
|
||||
@@ -103,13 +105,51 @@ static void* window_map_events[] = {
|
||||
*/
|
||||
void window_map_open()
|
||||
{
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068C88A);
|
||||
//rct_window* w;
|
||||
rct_window* w;
|
||||
int* var;
|
||||
|
||||
// Check if window is already open
|
||||
//w = window_bring_to_front_by_id(WC_OPTIONS, 0);
|
||||
//if (w != NULL)
|
||||
// return;
|
||||
w = window_bring_to_front_by_id(WC_MAP, 0);
|
||||
if (w != NULL) {
|
||||
w->selected_tab = 0;
|
||||
w->var_490 = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var = (int*)rct2_malloc(0x40000);
|
||||
if (var == NULL)
|
||||
return;
|
||||
|
||||
RCT2_GLOBAL(0x00F1AD68, uint32) = (uint32)var;
|
||||
w = window_create_auto_pos(245, 259, (uint32*)window_map_events, WC_MAP, 0x0400);
|
||||
w->widgets = window_map_widgets;
|
||||
w->enabled_widgets =
|
||||
(1 << 2) |
|
||||
(1 << 4) |
|
||||
(1 << 5) |
|
||||
(1 << 8) |
|
||||
(1 << 9) |
|
||||
(1 << 14) |
|
||||
(1 << 15) |
|
||||
(1 << 10) |
|
||||
(1 << 16) |
|
||||
(1 << 17) |
|
||||
(1 << 18) |
|
||||
(1 << 19) |
|
||||
(1 << 11) |
|
||||
(1 << 20) |
|
||||
(1 << 12);
|
||||
//TODO: .text:0068C943 or dword ptr [esi+20h], 300h
|
||||
|
||||
window_init_scroll_widgets(w);
|
||||
w->var_480 = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint16);
|
||||
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068CA6C);
|
||||
RCT2_GLOBAL(0x00F64F05, uint8) = 0;
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068C990);
|
||||
|
||||
w->colours[0] = 12;
|
||||
w->colours[1] = 24;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -192,14 +232,33 @@ static void window_map_invalidate()
|
||||
*/
|
||||
static void window_map_paint()
|
||||
{
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068CDA9);
|
||||
/*rct_window *w;
|
||||
//RCT2_CALLPROC_EBPSAFE(0x0068CDA9);
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
int image_id;
|
||||
|
||||
__asm mov w, esi
|
||||
__asm mov dpi, edi
|
||||
|
||||
window_draw_widgets(w, dpi);*/
|
||||
window_draw_widgets(w, dpi);
|
||||
|
||||
// guest tab image (animated)
|
||||
image_id = SPR_TAB_GUESTS_0;
|
||||
if (w->selected_tab == 0)
|
||||
image_id += w->var_490 / 4;
|
||||
|
||||
gfx_draw_sprite(dpi, image_id,
|
||||
w->x + w->widgets[WIDX_PEOPLE_TAB].left,
|
||||
w->y + w->widgets[WIDX_PEOPLE_TAB].top);
|
||||
|
||||
// ride/stall tab image (animated)
|
||||
image_id = SPR_TAB_RIDE_0;
|
||||
if (w->selected_tab == 1)
|
||||
image_id += w->var_490 / 4;
|
||||
|
||||
gfx_draw_sprite(dpi, image_id,
|
||||
w->x + w->widgets[WIDX_RIDES_TAB].left,
|
||||
w->y + w->widgets[WIDX_RIDES_TAB].top);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -132,7 +132,7 @@ void window_scenarioselect_open()
|
||||
|
||||
window_scenarioselect_init_tabs();
|
||||
|
||||
window->var_4AC = 0;
|
||||
window->selected_tab = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -188,7 +188,7 @@ static void window_scenarioselect_mousedown()
|
||||
__asm mov w, esi
|
||||
|
||||
if (widgetIndex >= WIDX_TAB1 && widgetIndex <= WIDX_TAB5) {
|
||||
w->var_4AC = widgetIndex - 4;
|
||||
w->selected_tab = widgetIndex - 4;
|
||||
w->var_494 = 0;
|
||||
window_invalidate(w);
|
||||
RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0);
|
||||
@@ -209,7 +209,7 @@ static void window_scenarioselect_scrollgetsize()
|
||||
height = 0;
|
||||
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
|
||||
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
|
||||
if (scenario->category != w->var_4AC)
|
||||
if (scenario->category != w->selected_tab)
|
||||
continue;
|
||||
if (scenario->flags & SCENARIO_FLAGS_VISIBLE)
|
||||
height += 24;
|
||||
@@ -232,7 +232,7 @@ static void window_scenarioselect_scrollmousedown()
|
||||
|
||||
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
|
||||
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
|
||||
if (scenario->category != w->var_4AC)
|
||||
if (scenario->category != w->selected_tab)
|
||||
continue;
|
||||
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
|
||||
continue;
|
||||
@@ -261,7 +261,7 @@ static void window_scenarioselect_scrollmouseover()
|
||||
selected = NULL;
|
||||
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
|
||||
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
|
||||
if (scenario->category != w->var_4AC)
|
||||
if (scenario->category != w->selected_tab)
|
||||
continue;
|
||||
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
|
||||
continue;
|
||||
@@ -286,7 +286,7 @@ static void window_scenarioselect_invalidate()
|
||||
__asm mov w, esi
|
||||
|
||||
w->pressed_widgets &= ~(0x10 | 0x20 | 0x40 | 0x80 | 0x100);
|
||||
w->pressed_widgets |= 1LL << (w->var_4AC + 4);
|
||||
w->pressed_widgets |= 1LL << (w->selected_tab + 4);
|
||||
}
|
||||
|
||||
static void window_scenarioselect_paint()
|
||||
@@ -369,7 +369,7 @@ static void window_scenarioselect_scrollpaint()
|
||||
y = 0;
|
||||
for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) {
|
||||
scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]);
|
||||
if (scenario->category != w->var_4AC)
|
||||
if (scenario->category != w->selected_tab)
|
||||
continue;
|
||||
if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE))
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user