mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-24 07:14:31 +01:00
merge in random map generator
This commit is contained in:
@@ -33,7 +33,7 @@
|
||||
#include "../util/util.h"
|
||||
#include "error.h"
|
||||
|
||||
enum WINDOW_EDITOR_TOP_TOOLBAR_WIDGET_IDX {
|
||||
enum {
|
||||
WIDX_PREVIOUS_IMAGE, // 1
|
||||
WIDX_PREVIOUS_STEP_BUTTON, // 2
|
||||
WIDX_NEXT_IMAGE, // 4
|
||||
|
||||
@@ -87,7 +87,7 @@ void window_editor_main_open()
|
||||
RCT2_GLOBAL(0x009E32B3, uint8) = 0;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_TYPE, uint8) = 0;
|
||||
|
||||
window_editor_top_toolbar_open();
|
||||
window_top_toolbar_open();
|
||||
window_editor_bottom_toolbar_open();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,437 +0,0 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2014 Dániel Tar, Ted John
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* This file is part of OpenRCT2.
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../localisation/string_ids.h"
|
||||
#include "../sprites.h"
|
||||
#include "../game.h"
|
||||
#include "../editor.h"
|
||||
#include "../toolbar.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../interface/widget.h"
|
||||
#include "../interface/window.h"
|
||||
#include "dropdown.h"
|
||||
|
||||
enum WINDOW_EDITOR_TOP_TOOLBAR_WIDGET_IDX {
|
||||
WIDX_PAUSE, // 0, 1
|
||||
WIDX_FILE_MENU, // 1, 2
|
||||
WIDX_ZOOM_OUT, // 2, 4
|
||||
WIDX_ZOOM_IN, // 3, 8
|
||||
WIDX_ROTATE, // 4, 10
|
||||
WIDX_VIEW_MENU, // 5, 20
|
||||
WIDX_MAP, // 6, 40
|
||||
WIDX_LAND, // 7, 80
|
||||
WIDX_WATER, // 8, 100
|
||||
WIDX_SCENERY, // 9, 200
|
||||
WIDX_PATH, // 10, 400
|
||||
WIDX_CONSTRUCT_RIDE, // 11, 800
|
||||
WIDX_UNUSED1, // 12, 1000
|
||||
WIDX_UNUSED2, // 13, 2000
|
||||
WIDX_UNUSED3, // 14, 4000
|
||||
WIDX_UNUSED4, // 15, 8000
|
||||
WIDX_CLEAR_SCENERY, // 16, 10000
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
DDIDX_SE_LOAD_LANDSCAPE = 0,
|
||||
DDIDX_SE_SAVE_LANDSCAPE = 1,
|
||||
DDIDX_SE_ABOUT = 3,
|
||||
DDIDX_SE_OPTIONS = 4,
|
||||
DDIDX_SE_SCREENSHOT = 5,
|
||||
DDIDX_SE_QUIT_GAME = 7,
|
||||
} SCENARIO_EDITOR_FILE_MENU_DDIDX;
|
||||
|
||||
typedef enum {
|
||||
DDIDX_TD_ABOUT = 0,
|
||||
DDIDX_TD_OPTIONS = 1,
|
||||
DDIDX_TD_SCREENSHOT = 2,
|
||||
DDIDX_TD_QUIT_GAME = 4,
|
||||
} TRACK_DESINGER_FILE_MENU_DDIDX;
|
||||
|
||||
#pragma region Toolbar_widget_ordering
|
||||
|
||||
// from left to right
|
||||
static const int left_aligned_widgets_order[] = {
|
||||
WIDX_PAUSE, WIDX_FILE_MENU,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
|
||||
WIDX_ZOOM_OUT,
|
||||
WIDX_ZOOM_IN,
|
||||
WIDX_ROTATE,
|
||||
WIDX_VIEW_MENU,
|
||||
WIDX_MAP,
|
||||
};
|
||||
|
||||
// from right to left
|
||||
static const int right_aligned_widgets_order[] = {
|
||||
WIDX_CONSTRUCT_RIDE, WIDX_PATH,
|
||||
WIDX_SCENERY,
|
||||
WIDX_WATER,
|
||||
WIDX_LAND,
|
||||
WIDX_CLEAR_SCENERY,
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
static rct_widget window_editor_top_toolbar_widgets[] = {
|
||||
{ WWT_EMPTY, 0, 0, 0, 0, 0, 0xFFFFFFFF, 0xFFFF }, // 1 0x009A9844
|
||||
{ WWT_TRNBTN, 0, 0, 29, 0, 27, 0x20000000 | SPR_TOOLBAR_FILE, STR_DISC_AND_GAME_OPTIONS_TIP }, // 2 0x009A9854
|
||||
{ WWT_TRNBTN, 1, 40, 69, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_OUT, STR_ZOOM_OUT_TIP }, // 4 0x009A9864
|
||||
{ WWT_TRNBTN, 1, 70, 99, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_IN, STR_ZOOM_IN_TIP }, // 8 0x009A9874
|
||||
{ WWT_TRNBTN, 1, 100, 129, 0, 27, 0x20000000 | SPR_TOOLBAR_ROTATE, STR_ROTATE_TIP }, // 10 0x009A9884
|
||||
{ WWT_TRNBTN, 1, 130, 159, 0, 27, 0x20000000 | SPR_TOOLBAR_VIEW, STR_VIEW_OPTIONS_TIP }, // 20 0x009A9894
|
||||
{ WWT_TRNBTN, 1, 160, 189, 0, 27, 0x20000000 | SPR_TOOLBAR_MAP, STR_SHOW_MAP_TIP }, // 40 0x009A98A4
|
||||
{ WWT_TRNBTN, 2, 267, 296, 0, 27, 0x20000000 | SPR_TOOLBAR_LAND, STR_ADJUST_LAND_TIP }, // 80 0x009A98B4
|
||||
{ WWT_TRNBTN, 2, 297, 326, 0, 27, 0x20000000 | SPR_TOOLBAR_WATER, STR_ADJUST_WATER_TIP }, // 100 0x009A98C4
|
||||
{ WWT_TRNBTN, 2, 327, 356, 0, 27, 0x20000000 | SPR_TOOLBAR_SCENERY, STR_PLACE_SCENERY_TIP }, // 200 0x009A98D4
|
||||
{ WWT_TRNBTN, 2, 357, 386, 0, 27, 0x20000000 | SPR_TOOLBAR_FOOTPATH, STR_BUILD_FOOTPATH_TIP }, // 400 0x009A98E4
|
||||
{ WWT_TRNBTN, 2, 387, 416, 0, 27, 0x20000000 | SPR_TOOLBAR_CONSTRUCT_RIDE, STR_BUILD_RIDE_TIP }, // 800 0x009A98F4
|
||||
{ WWT_EMPTY, 0, 0, 0, 0, 0, 0xFFFFFFFF, 0xFFFF }, // 1000 0x009A9904
|
||||
{ WWT_EMPTY, 0, 0, 0, 0, 0, 0xFFFFFFFF, 0xFFFF }, // 2000 0x009A9914
|
||||
{ WWT_EMPTY, 0, 0, 0, 0, 0, 0xFFFFFFFF, 0xFFFF }, // 4000 0x009A9924
|
||||
{ WWT_EMPTY, 0, 0, 0, 0, 0, 0xFFFFFFFF, 0xFFFF }, // 8000 0x009A9934
|
||||
{ WWT_TRNBTN, 2, 560, 589, 0, 27, 0x20000000 | SPR_TOOLBAR_CLEAR_SCENERY, STR_CLEAR_SCENERY_TIP }, // 10000 0x009A9944
|
||||
|
||||
{ WWT_EMPTY, 0, 0, 10-1, 0, 0, 0xFFFFFFFF, 0xFFFF }, // Artificial widget separator
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static void window_editor_top_toolbar_emptysub() { }
|
||||
|
||||
static void window_editor_top_toolbar_mouseup();
|
||||
static void window_editor_top_toolbar_resize();
|
||||
static void window_editor_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget);
|
||||
static void window_editor_top_toolbar_dropdown();
|
||||
static void window_editor_top_toolbar_invalidate();
|
||||
static void window_editor_top_toolbar_paint();
|
||||
|
||||
static void* window_editor_top_toolbar_events[] = {
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_mouseup, //(void*)0x0066f9d7, // mouseup
|
||||
window_editor_top_toolbar_resize, //(void*)0x0066fada, // resize
|
||||
window_editor_top_toolbar_mousedown, //(void*)0x0066fa57, // mousedown
|
||||
window_editor_top_toolbar_dropdown, //(void*)0x0066fa38, // dropdown
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
(void*)0x0066fb0e,
|
||||
(void*)0x0066fb5c,
|
||||
(void*)0x0066fb37,
|
||||
(void*)0x0066fc44,
|
||||
(void*)0x0066fa74,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_emptysub,
|
||||
window_editor_top_toolbar_invalidate, // (void*)0x0066f87d, // oninvalidate
|
||||
window_editor_top_toolbar_paint, //(void*)0x0066f9d1, // onpaint
|
||||
window_editor_top_toolbar_emptysub
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates the main editor top toolbar window.
|
||||
* rct2: 0x0066EFC8 (part of 0x0066EF38)
|
||||
*/
|
||||
void window_editor_top_toolbar_open()
|
||||
{
|
||||
rct_window* window;
|
||||
|
||||
window = window_create(0, 0, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16), 28,
|
||||
(uint32*)window_editor_top_toolbar_events,
|
||||
WC_TOP_TOOLBAR, WF_STICK_TO_FRONT | WF_TRANSPARENT | WF_5);
|
||||
window->widgets = window_editor_top_toolbar_widgets;
|
||||
|
||||
window->enabled_widgets |=
|
||||
(1 << WIDX_ZOOM_IN) |
|
||||
(1 << WIDX_ZOOM_OUT) |
|
||||
(1 << WIDX_ROTATE) |
|
||||
(1 << WIDX_FILE_MENU) |
|
||||
(1 << WIDX_LAND) |
|
||||
(1 << WIDX_VIEW_MENU) |
|
||||
(1 << WIDX_SCENERY) |
|
||||
(1 << WIDX_WATER) |
|
||||
(1 << WIDX_PATH) |
|
||||
(1 << WIDX_MAP) |
|
||||
(1 << WIDX_CONSTRUCT_RIDE) |
|
||||
(1 << WIDX_CLEAR_SCENERY);
|
||||
|
||||
window_init_scroll_widgets(window);
|
||||
window->colours[0] = 7;
|
||||
window->colours[1] = 12;
|
||||
window->colours[2] = 24;
|
||||
window->colours[3] = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C957
|
||||
*/
|
||||
static void window_editor_top_toolbar_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w, *mainWindow;
|
||||
|
||||
window_widget_get_registers(w, widgetIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_ZOOM_IN:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_in(mainWindow);
|
||||
break;
|
||||
case WIDX_ZOOM_OUT:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_out(mainWindow);
|
||||
break;
|
||||
case WIDX_ROTATE:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_rotate_camera(mainWindow);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
if (!tool_set(w, WIDX_SCENERY, 0)) {
|
||||
RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
|
||||
window_scenery_open();
|
||||
}
|
||||
break;
|
||||
case WIDX_PATH:
|
||||
toggle_footpath_window();
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
toggle_land_window(w, WIDX_LAND);
|
||||
break;
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
toggle_clear_scenery_window(w, WIDX_CLEAR_SCENERY);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
toggle_water_window(w, WIDX_WATER);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
window_map_open();
|
||||
break;
|
||||
case WIDX_CONSTRUCT_RIDE:
|
||||
window_new_ride_open();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066FADA
|
||||
*/
|
||||
static void window_editor_top_toolbar_resize() {
|
||||
rct_window *mainWindow = window_get_main();
|
||||
rct_window *w;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
int eax = 0;
|
||||
|
||||
if ((w->disabled_widgets & 0xFF) == 0)
|
||||
eax |= (1 << 3);
|
||||
|
||||
if ((w->disabled_widgets & 0xFF) == 3)
|
||||
eax |= (1 << 2);
|
||||
|
||||
RCT2_CALLPROC_X(0x006ECE14, 0, 0, 0, 0, (int)w, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066FA57
|
||||
*/
|
||||
static void window_editor_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget)
|
||||
{
|
||||
if (widgetIndex == WIDX_FILE_MENU) {
|
||||
short dropdownItemCount = 8;
|
||||
gDropdownItemsFormat[0] = STR_LOAD_LANDSCAPE;
|
||||
gDropdownItemsFormat[1] = STR_SAVE_LANDSCAPE;
|
||||
gDropdownItemsFormat[2] = 0;
|
||||
gDropdownItemsFormat[3] = STR_ABOUT;
|
||||
gDropdownItemsFormat[4] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[5] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[6] = 0;
|
||||
gDropdownItemsFormat[7] = STR_QUIT_SCENARIO_EDITOR;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
|
||||
dropdownItemCount = 5;
|
||||
gDropdownItemsFormat[0] = STR_ABOUT;
|
||||
gDropdownItemsFormat[1] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[2] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[3] = 0;
|
||||
gDropdownItemsFormat[4] = STR_QUIT_TRACK_DESIGNS_MANAGER;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) {
|
||||
gDropdownItemsFormat[4] = STR_QUIT_ROLLERCOASTER_DESIGNER;
|
||||
}
|
||||
}
|
||||
|
||||
window_dropdown_show_text(w->x + widget->left, w->y + widget->top,
|
||||
widget->bottom - widget->top + 1, w->colours[0] | 0x80, 0x80, dropdownItemCount);
|
||||
} else if (widgetIndex == WIDX_VIEW_MENU) {
|
||||
top_toolbar_init_view_menu(w, widget);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066FA38
|
||||
*/
|
||||
void window_editor_top_toolbar_dropdown() {
|
||||
short widgetIndex, dropdownIndex;
|
||||
rct_window* w;
|
||||
|
||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||
|
||||
if (widgetIndex == WIDX_FILE_MENU) {
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
|
||||
if (dropdownIndex == DDIDX_TD_ABOUT) {
|
||||
window_about_open();
|
||||
} else if (dropdownIndex == DDIDX_TD_OPTIONS) {
|
||||
window_options_open();
|
||||
} else if (dropdownIndex == DDIDX_TD_SCREENSHOT) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
|
||||
} else if (dropdownIndex == DDIDX_TD_QUIT_GAME) {
|
||||
window_close_by_number(WC_MANAGE_TRACK_DESIGN, w->number);
|
||||
window_close_by_number(WC_TRACK_DELETE_PROMPT, w->number);
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
|
||||
}
|
||||
} else {
|
||||
if (dropdownIndex == DDIDX_SE_LOAD_LANDSCAPE) {
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
|
||||
} else if (dropdownIndex == DDIDX_SE_SAVE_LANDSCAPE) {
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066FE2A);
|
||||
} else if (dropdownIndex == DDIDX_SE_ABOUT) {
|
||||
window_about_open();
|
||||
} else if (dropdownIndex == DDIDX_SE_OPTIONS) {
|
||||
window_options_open();
|
||||
} else if (dropdownIndex == DDIDX_SE_SCREENSHOT) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
|
||||
} else if (dropdownIndex == DDIDX_SE_QUIT_GAME) {
|
||||
window_close_by_number(WC_MANAGE_TRACK_DESIGN, w->number);
|
||||
window_close_by_number(WC_TRACK_DELETE_PROMPT, w->number);
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
|
||||
}
|
||||
}
|
||||
} else if (widgetIndex == WIDX_VIEW_MENU) {
|
||||
top_toolbar_view_menu_dropdown(dropdownIndex);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066F87D
|
||||
*/
|
||||
void window_editor_top_toolbar_invalidate()
|
||||
{
|
||||
rct_window *w;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_MAP].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_LAND].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_WATER].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_SCENERY].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_PATH].type = WWT_EMPTY;
|
||||
window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_EMPTY;
|
||||
|
||||
|
||||
if (g_editor_step == EDITOR_STEP_LANDSCAPE_EDITOR) {
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_MAP].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_LAND].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_WATER].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_SCENERY].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_PATH].type = WWT_TRNBTN;
|
||||
} else if (g_editor_step == EDITOR_STEP_ROLLERCOASTER_DESIGNER) {
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_ROTATE].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_TRNBTN;
|
||||
window_editor_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_TRNBTN;
|
||||
}
|
||||
|
||||
if (window_find_by_class(0x94) == NULL)
|
||||
w->pressed_widgets &= ~(1 << WIDX_PATH);
|
||||
else
|
||||
w->pressed_widgets |= (1 << WIDX_PATH);
|
||||
|
||||
sint16 x = max(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16), 640);
|
||||
|
||||
for (int i = 0; i < countof(right_aligned_widgets_order); ++i) {
|
||||
rct_widget *current_widget = &window_editor_top_toolbar_widgets[right_aligned_widgets_order[i]];
|
||||
int widget_width = current_widget->right - current_widget->left;
|
||||
|
||||
if (current_widget->type == WWT_EMPTY && right_aligned_widgets_order[i] != WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
x -= 1;
|
||||
current_widget->right = x;
|
||||
x -= widget_width;
|
||||
current_widget->left = x;
|
||||
}
|
||||
|
||||
x = 0;
|
||||
|
||||
for (int i = 0; i < countof(left_aligned_widgets_order); ++i) {
|
||||
rct_widget *current_widget = &window_editor_top_toolbar_widgets[left_aligned_widgets_order[i]];
|
||||
int widget_width = current_widget->right - current_widget->left;
|
||||
|
||||
if (current_widget->type == WWT_EMPTY && left_aligned_widgets_order[i] != WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
current_widget->left = x;
|
||||
x += widget_width;
|
||||
current_widget->right = x;
|
||||
x += 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066F9D1
|
||||
*/
|
||||
static void window_editor_top_toolbar_paint()
|
||||
{
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
window_paint_get_registers(w, dpi);
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
}
|
||||
@@ -1,703 +0,0 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2014 Ted John
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* This file is part of OpenRCT2.
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../game.h"
|
||||
#include "../input.h"
|
||||
#include "../sprites.h"
|
||||
#include "../toolbar.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../interface/widget.h"
|
||||
#include "../interface/window.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "dropdown.h"
|
||||
#include "scenery.h"
|
||||
|
||||
enum {
|
||||
WIDX_PAUSE,
|
||||
WIDX_FILE_MENU,
|
||||
WIDX_ZOOM_OUT,
|
||||
WIDX_ZOOM_IN,
|
||||
WIDX_ROTATE,
|
||||
WIDX_VIEW_MENU,
|
||||
WIDX_MAP,
|
||||
|
||||
WIDX_LAND,
|
||||
WIDX_WATER,
|
||||
WIDX_SCENERY,
|
||||
WIDX_PATH,
|
||||
WIDX_CONSTRUCT_RIDE,
|
||||
WIDX_RIDES,
|
||||
WIDX_PARK,
|
||||
WIDX_STAFF,
|
||||
WIDX_GUESTS,
|
||||
WIDX_CLEAR_SCENERY,
|
||||
|
||||
//WIDX_FASTFORWARD,
|
||||
WIDX_FINANCES,
|
||||
WIDX_RESEARCH,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
DDIDX_LOAD_GAME = 0,
|
||||
DDIDX_SAVE_GAME = 1,
|
||||
DDIDX_ABOUT = 3,
|
||||
DDIDX_OPTIONS = 4,
|
||||
DDIDX_SCREENSHOT = 5,
|
||||
DDIDX_QUIT_GAME = 7,
|
||||
} FILE_MENU_DDIDX;
|
||||
|
||||
#pragma region Toolbar_widget_ordering
|
||||
|
||||
// from left to right
|
||||
static const int left_aligned_widgets_order[] = {
|
||||
WIDX_PAUSE,
|
||||
//WIDX_FASTFORWARD,
|
||||
WIDX_FILE_MENU,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
|
||||
WIDX_ZOOM_OUT,
|
||||
WIDX_ZOOM_IN,
|
||||
WIDX_ROTATE,
|
||||
WIDX_VIEW_MENU,
|
||||
WIDX_MAP,
|
||||
};
|
||||
|
||||
// from right to left
|
||||
static const int right_aligned_widgets_order[] = {
|
||||
WIDX_GUESTS,
|
||||
WIDX_STAFF,
|
||||
WIDX_PARK,
|
||||
WIDX_RIDES,
|
||||
WIDX_RESEARCH,
|
||||
WIDX_FINANCES,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
|
||||
WIDX_CONSTRUCT_RIDE,
|
||||
WIDX_PATH,
|
||||
WIDX_SCENERY,
|
||||
WIDX_WATER,
|
||||
WIDX_LAND,
|
||||
WIDX_CLEAR_SCENERY,
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
static rct_widget window_game_top_toolbar_widgets[] = {
|
||||
{ WWT_TRNBTN, 0, 0x0000, 0x001D, 0, 27, 0x20000000 | SPR_TOOLBAR_PAUSE, STR_PAUSE_GAME_TIP }, // Pause
|
||||
{ WWT_TRNBTN, 0, 0x001E + 30, 0x003B + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_FILE, STR_DISC_AND_GAME_OPTIONS_TIP }, // File menu
|
||||
{ WWT_TRNBTN, 1, 0x0046 + 30, 0x0063 + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_OUT, STR_ZOOM_OUT_TIP }, // Zoom out
|
||||
{ WWT_TRNBTN, 1, 0x0064 + 30, 0x0081 + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_IN, STR_ZOOM_IN_TIP }, // Zoom in
|
||||
{ WWT_TRNBTN, 1, 0x0082 + 30, 0x009F + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ROTATE, STR_ROTATE_TIP }, // Rotate camera
|
||||
{ WWT_TRNBTN, 1, 0x00A0 + 30, 0x00BD + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_VIEW, STR_VIEW_OPTIONS_TIP }, // Transparancy menu
|
||||
{ WWT_TRNBTN, 1, 0x00BE + 30, 0x00DB + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_MAP, STR_SHOW_MAP_TIP }, // Map
|
||||
|
||||
{ WWT_TRNBTN, 2, 0x010B, 0x0128, 0, 27, 0x20000000 | SPR_TOOLBAR_LAND, STR_ADJUST_LAND_TIP }, // Land
|
||||
{ WWT_TRNBTN, 2, 0x0129, 0x0146, 0, 27, 0x20000000 | SPR_TOOLBAR_WATER, STR_ADJUST_WATER_TIP }, // Water
|
||||
{ WWT_TRNBTN, 2, 0x0147, 0x0164, 0, 27, 0x20000000 | SPR_TOOLBAR_SCENERY, STR_PLACE_SCENERY_TIP }, // Scenery
|
||||
{ WWT_TRNBTN, 2, 0x0165, 0x0182, 0, 27, 0x20000000 | SPR_TOOLBAR_FOOTPATH, STR_BUILD_FOOTPATH_TIP }, // Path
|
||||
{ WWT_TRNBTN, 2, 0x0183, 0x01A0, 0, 27, 0x20000000 | SPR_TOOLBAR_CONSTRUCT_RIDE, STR_BUILD_RIDE_TIP }, // Construct ride
|
||||
{ WWT_TRNBTN, 3, 0x01EA, 0x0207, 0, 27, 0x20000000 | SPR_TOOLBAR_RIDES, STR_RIDES_IN_PARK_TIP }, // Rides
|
||||
{ WWT_TRNBTN, 3, 0x0208, 0x0225, 0, 27, 0x20000000 | SPR_TOOLBAR_PARK, STR_PARK_INFORMATION_TIP }, // Park
|
||||
{ WWT_TRNBTN, 3, 0x0226, 0x0243, 0, 27, 0x20000000 | 0x15F9, STR_STAFF_TIP }, // Staff
|
||||
{ WWT_TRNBTN, 3, 0x0230, 0x024D, 0, 27, 0x20000000 | SPR_TOOLBAR_GUESTS, STR_GUESTS_TIP }, // Guests
|
||||
{ WWT_TRNBTN, 2, 0x0230, 0x024D, 0, 27, 0x20000000 | SPR_TOOLBAR_CLEAR_SCENERY, STR_CLEAR_SCENERY_TIP }, // Clear scenery
|
||||
|
||||
//{ WWT_TRNBTN, 0, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, STR_NONE }, // Fast forward
|
||||
{ WWT_TRNBTN, 3, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, 3235 }, // Finances
|
||||
{ WWT_TRNBTN, 3, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, 2275 }, // Research
|
||||
|
||||
{ WWT_EMPTY, 0, 0, 10-1, 0, 0, 0xFFFFFFFF, STR_NONE }, // Artificial widget separator
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static void window_game_top_toolbar_emptysub() { }
|
||||
static void window_game_top_toolbar_mouseup();
|
||||
static void window_game_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget);
|
||||
static void window_game_top_toolbar_dropdown();
|
||||
static void window_game_top_toolbar_tool_update();
|
||||
static void window_game_top_toolbar_tool_down();
|
||||
static void window_game_top_toolbar_tool_drag();
|
||||
static void window_game_top_toolbar_invalidate();
|
||||
static void window_game_top_toolbar_paint();
|
||||
|
||||
static void* window_game_top_toolbar_events[] = {
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_mouseup,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_mousedown,
|
||||
window_game_top_toolbar_dropdown,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_tool_update,
|
||||
window_game_top_toolbar_tool_down,
|
||||
window_game_top_toolbar_tool_drag,
|
||||
(void*)0x0066CC5B,
|
||||
(void*)0x0066CA58,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_emptysub,
|
||||
window_game_top_toolbar_invalidate,
|
||||
window_game_top_toolbar_paint,
|
||||
window_game_top_toolbar_emptysub
|
||||
};
|
||||
|
||||
/**
|
||||
* Creates the main game top toolbar window.
|
||||
* rct2: 0x0066B485 (part of 0x0066B3E8)
|
||||
*/
|
||||
void window_game_top_toolbar_open()
|
||||
{
|
||||
rct_window* window;
|
||||
|
||||
window = window_create(
|
||||
0, 0,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16), 28,
|
||||
(uint32*)window_game_top_toolbar_events,
|
||||
WC_TOP_TOOLBAR,
|
||||
WF_STICK_TO_FRONT | WF_TRANSPARENT | WF_5
|
||||
);
|
||||
window->widgets = window_game_top_toolbar_widgets;
|
||||
|
||||
window->enabled_widgets |=
|
||||
(1 << WIDX_PAUSE) |
|
||||
(1 << WIDX_FILE_MENU) |
|
||||
(1 << WIDX_ZOOM_OUT) |
|
||||
(1 << WIDX_ZOOM_IN) |
|
||||
(1 << WIDX_ROTATE) |
|
||||
(1 << WIDX_VIEW_MENU) |
|
||||
(1 << WIDX_MAP) |
|
||||
(1 << WIDX_LAND) |
|
||||
(1 << WIDX_WATER) |
|
||||
(1 << WIDX_SCENERY) |
|
||||
(1 << WIDX_PATH) |
|
||||
(1 << WIDX_CONSTRUCT_RIDE) |
|
||||
(1 << WIDX_RIDES) |
|
||||
(1 << WIDX_PARK) |
|
||||
(1 << WIDX_STAFF) |
|
||||
(1 << WIDX_GUESTS) |
|
||||
(1 << WIDX_CLEAR_SCENERY) |
|
||||
//(1ULL << WIDX_FASTFORWARD) |
|
||||
(1ULL << WIDX_FINANCES) |
|
||||
(1ULL << WIDX_RESEARCH);
|
||||
|
||||
window_init_scroll_widgets(window);
|
||||
window->colours[0] = 7;
|
||||
window->colours[1] = 12;
|
||||
window->colours[2] = 24;
|
||||
window->colours[3] = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C957
|
||||
*/
|
||||
static void window_game_top_toolbar_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w, *mainWindow;
|
||||
|
||||
window_widget_get_registers(w, widgetIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_PAUSE:
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_TOGGLE_PAUSE, 0, 0);
|
||||
break;
|
||||
// case WIDX_FASTFORWARD:
|
||||
// // This is an excellent place to add in debugging statements and
|
||||
// // print routines, that will be triggered when you press the
|
||||
// // button in the game. Use "git update-index --skip-worktree
|
||||
// // src/window_game_top_toolbar" to avoid committing these changes to
|
||||
// // version control.
|
||||
// window_cheats_open();
|
||||
// break;
|
||||
|
||||
case WIDX_ZOOM_OUT:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_out(mainWindow);
|
||||
break;
|
||||
case WIDX_ZOOM_IN:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_in(mainWindow);
|
||||
break;
|
||||
case WIDX_ROTATE:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_rotate_camera(mainWindow);
|
||||
break;
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
toggle_clear_scenery_window(w, WIDX_CLEAR_SCENERY);
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
toggle_land_window(w, WIDX_LAND);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
toggle_water_window(w, WIDX_WATER);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
if (!tool_set(w, WIDX_SCENERY, 0)) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) |= INPUT_FLAG_6;
|
||||
window_scenery_open();
|
||||
}
|
||||
break;
|
||||
case WIDX_PATH:
|
||||
toggle_footpath_window();
|
||||
break;
|
||||
case WIDX_CONSTRUCT_RIDE:
|
||||
window_new_ride_open();
|
||||
break;
|
||||
case WIDX_RIDES:
|
||||
window_ride_list_open();
|
||||
break;
|
||||
case WIDX_PARK:
|
||||
window_park_entrance_open();
|
||||
break;
|
||||
case WIDX_STAFF:
|
||||
window_staff_list_open();
|
||||
break;
|
||||
case WIDX_GUESTS:
|
||||
window_guest_list_open();
|
||||
break;
|
||||
case WIDX_FINANCES:
|
||||
window_finances_open();
|
||||
break;
|
||||
case WIDX_RESEARCH:
|
||||
window_research_open();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CA3B
|
||||
*/
|
||||
static void window_game_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget)
|
||||
{
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FILE_MENU:
|
||||
gDropdownItemsFormat[0] = STR_LOAD_GAME;
|
||||
gDropdownItemsFormat[1] = STR_SAVE_GAME;
|
||||
gDropdownItemsFormat[2] = 0;
|
||||
gDropdownItemsFormat[3] = STR_ABOUT;
|
||||
gDropdownItemsFormat[4] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[5] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[6] = 0;
|
||||
gDropdownItemsFormat[7] = STR_QUIT_GAME;
|
||||
window_dropdown_show_text(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[0] | 0x80,
|
||||
0x80,
|
||||
8
|
||||
);
|
||||
break;
|
||||
case WIDX_VIEW_MENU:
|
||||
top_toolbar_init_view_menu(w, widget);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
gDropdownItemsFormat[0] = 2523;
|
||||
gDropdownItemsFormat[1] = 2780;
|
||||
window_dropdown_show_text(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[1] | 0x80,
|
||||
0,
|
||||
2
|
||||
);
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C9EA
|
||||
*/
|
||||
static void window_game_top_toolbar_dropdown()
|
||||
{
|
||||
short widgetIndex, dropdownIndex;
|
||||
rct_window* w;
|
||||
|
||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FILE_MENU:
|
||||
switch (dropdownIndex) {
|
||||
case DDIDX_LOAD_GAME: // load game
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
|
||||
break;
|
||||
case DDIDX_SAVE_GAME: // save game
|
||||
tool_cancel();
|
||||
save_game();
|
||||
break;
|
||||
case DDIDX_ABOUT: // about
|
||||
window_about_open();
|
||||
break;
|
||||
case DDIDX_OPTIONS: // options
|
||||
window_options_open();
|
||||
break;
|
||||
case DDIDX_SCREENSHOT: // screenshot
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
|
||||
break;
|
||||
case DDIDX_QUIT_GAME: // quit game
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WIDX_VIEW_MENU:
|
||||
top_toolbar_view_menu_dropdown(dropdownIndex);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
if (dropdownIndex == -1)
|
||||
dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
switch (dropdownIndex) {
|
||||
case 0:
|
||||
window_map_open();
|
||||
break;
|
||||
case 1:
|
||||
window_viewport_open();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C810
|
||||
*/
|
||||
static void window_game_top_toolbar_invalidate()
|
||||
{
|
||||
int x;
|
||||
rct_window *w;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
// Anchor the right half of the buttons to the right
|
||||
x = RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16);
|
||||
if (x < 640)
|
||||
x = 640;
|
||||
|
||||
for (int i = 0; i < countof(right_aligned_widgets_order); ++i) {
|
||||
rct_widget *current_widget = &window_game_top_toolbar_widgets[right_aligned_widgets_order[i]];
|
||||
int widget_width = current_widget->right - current_widget->left;
|
||||
|
||||
x -= 1;
|
||||
current_widget->right = x;
|
||||
x -= widget_width;
|
||||
current_widget->left = x;
|
||||
}
|
||||
|
||||
x = 0;
|
||||
|
||||
for (int i = 0; i < countof(left_aligned_widgets_order); ++i) {
|
||||
rct_widget *current_widget = &window_game_top_toolbar_widgets[left_aligned_widgets_order[i]];
|
||||
int widget_width = current_widget->right - current_widget->left;
|
||||
|
||||
current_widget->left = x;
|
||||
x += widget_width;
|
||||
current_widget->right = x;
|
||||
x += 1;
|
||||
}
|
||||
|
||||
// Footpath button pressed down
|
||||
if (window_find_by_class(WC_FOOTPATH) == NULL)
|
||||
w->pressed_widgets &= ~(1 << WIDX_PATH);
|
||||
else
|
||||
w->pressed_widgets |= (1 << WIDX_PATH);
|
||||
|
||||
// Fast forward button pressed down
|
||||
// if (0)
|
||||
// w->pressed_widgets |= (1 << WIDX_FASTFORWARD);
|
||||
// else
|
||||
// w->pressed_widgets &= ~(1 << WIDX_FASTFORWARD);
|
||||
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint32) & 1))
|
||||
w->pressed_widgets &= ~(1 << WIDX_PAUSE);
|
||||
else
|
||||
w->pressed_widgets |= (1 << WIDX_PAUSE);
|
||||
|
||||
// Zoomed out/in disable. Not sure where this code is in the original.
|
||||
if (window_get_main()->viewport->zoom == 0){
|
||||
w->disabled_widgets |= (1 << WIDX_ZOOM_IN);
|
||||
}
|
||||
else if (window_get_main()->viewport->zoom == 3){
|
||||
w->disabled_widgets |= (1 << WIDX_ZOOM_OUT);
|
||||
}
|
||||
else
|
||||
{
|
||||
w->disabled_widgets &= ~((1 << WIDX_ZOOM_IN) | (1 << WIDX_ZOOM_OUT));
|
||||
}
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY) {
|
||||
window_game_top_toolbar_widgets[WIDX_FINANCES].type = WWT_EMPTY;
|
||||
}
|
||||
else{
|
||||
window_game_top_toolbar_widgets[WIDX_FINANCES].type = WWT_TRNBTN;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C8EC
|
||||
*/
|
||||
static void window_game_top_toolbar_paint()
|
||||
{
|
||||
int x, y, imgId;
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
window_paint_get_registers(w, dpi);
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
|
||||
// Draw staff button image (setting masks to the staff colours)
|
||||
x = w->x + window_game_top_toolbar_widgets[WIDX_STAFF].left;
|
||||
y = w->y + window_game_top_toolbar_widgets[WIDX_STAFF].top;
|
||||
imgId = 5627;
|
||||
if (widget_is_pressed(w, WIDX_STAFF))
|
||||
imgId++;
|
||||
imgId |= (RCT2_GLOBAL(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8) << 19) | 0xA0000000 | (RCT2_GLOBAL(RCT2_ADDRESS_MECHANIC_COLOUR, uint8) << 24);
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
|
||||
// Draw research button
|
||||
x = w->x + window_game_top_toolbar_widgets[WIDX_RESEARCH].left - 1;
|
||||
y = w->y + window_game_top_toolbar_widgets[WIDX_RESEARCH].top;
|
||||
imgId = SPR_TAB_FINANCES_RESEARCH_0;
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
|
||||
// Draw finances button
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)){
|
||||
x = w->x + window_game_top_toolbar_widgets[WIDX_FINANCES].left + 3;
|
||||
y = w->y + window_game_top_toolbar_widgets[WIDX_FINANCES].top + 1;
|
||||
imgId = SPR_FINANCE;
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x6e2cc6
|
||||
*/
|
||||
static void window_game_top_toolbar_scenery_tool_down(short x, short y, rct_window* w, short widgetIndex){
|
||||
RCT2_CALLPROC_EBPSAFE(0x006E2712);
|
||||
if (window_scenery_is_repaint_scenery_tool_on & 1){
|
||||
//6e3158
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
|
||||
int selected_tab = window_scenery_selected_scenery_by_tab[window_scenery_active_tab_index];
|
||||
if (selected_tab == -1) return;
|
||||
|
||||
sint16 grid_x, grid_y, grid_z;
|
||||
uint8 item_colour;
|
||||
uint8 model_type;
|
||||
int ebp = selected_tab;
|
||||
|
||||
{
|
||||
int eax = x, ebx = y, ecx = 0, edx = 0, esi = 0, edi = 0;
|
||||
RCT2_CALLFUNC_X(0x6E1F34, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
item_colour = edi;
|
||||
model_type = (ebx & 0xFF00) >> 8;
|
||||
grid_x = eax;
|
||||
grid_y = ecx;
|
||||
grid_z = edx;
|
||||
}
|
||||
|
||||
if (grid_x == 0x8000)return;
|
||||
|
||||
if (ebp >= 1024){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 1161;
|
||||
|
||||
// The return value will be banner id but the input is colour
|
||||
int banner_id = item_colour;
|
||||
|
||||
int ebx = (model_type << 8) | 1;
|
||||
|
||||
{
|
||||
int esi = 0, eax = grid_x, ecx = grid_y, edx = grid_z;
|
||||
game_do_command_p(GAME_COMMAND_50, &eax, &ebx, &ecx, &edx, &esi, &banner_id, &ebp);
|
||||
}
|
||||
|
||||
if (ebx == 0x80000000)return;
|
||||
|
||||
sound_play_panned(SOUND_PLACE_ITEM, 0x8001, RCT2_GLOBAL(0x009DEA5E, uint16), RCT2_GLOBAL(0x009DEA60, uint16), RCT2_GLOBAL(0x009DEA62, uint16));
|
||||
|
||||
window_banner_open(banner_id);
|
||||
}
|
||||
else if (ebp >= 768){
|
||||
//6e301c
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else if (ebp >= 512){
|
||||
//6e2f2e
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else if (ebp >= 256){
|
||||
//6e2eda
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else{
|
||||
//6e2d2d
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CB25
|
||||
*/
|
||||
static void window_game_top_toolbar_tool_update()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
RCT2_CALLPROC_X(0x0068E213, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
RCT2_CALLPROC_X(0x00664280, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
RCT2_CALLPROC_X(0x006E6BDC, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
RCT2_CALLPROC_X(0x006E287B, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x0066CB73
|
||||
*/
|
||||
static void window_game_top_toolbar_tool_down(){
|
||||
short widgetIndex;
|
||||
rct_window* w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
if (!RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) & (1 << 0))
|
||||
break;
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 3438;
|
||||
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
0,
|
||||
GAME_COMMAND_CLEAR_SCENERY,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 12;
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16)&(1 << 0)){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 1387;
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) | (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) << 8),
|
||||
GAME_COMMAND_CHANGE_SURFACE_STYLE,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 3;
|
||||
}
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16)&(1 << 0)){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 3;
|
||||
}
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
window_game_top_toolbar_scenery_tool_down(x, y, w, widgetIndex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CB4E
|
||||
*/
|
||||
static void window_game_top_toolbar_tool_drag()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
if (window_find_by_class(WC_ERROR) != NULL)
|
||||
break;
|
||||
|
||||
if (!RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) & (1 << 0))
|
||||
break;
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 3438;
|
||||
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
0,
|
||||
GAME_COMMAND_CLEAR_SCENERY,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 12;
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
RCT2_CALLPROC_X(0x00664454, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
RCT2_CALLPROC_X(0x006E6D4B, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
RCT2_CALLPROC_X(0x006E2CBC, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
646
src/windows/mapgen.c
Normal file
646
src/windows/mapgen.c
Normal file
@@ -0,0 +1,646 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2014 Ted John
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* This file is part of OpenRCT2.
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "../input.h"
|
||||
#include "../interface/widget.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../interface/window.h"
|
||||
#include "../sprites.h"
|
||||
#include "../windows/scenery.h"
|
||||
#include "../world/mapgen.h"
|
||||
#include "dropdown.h"
|
||||
|
||||
enum {
|
||||
WINDOW_MAPGEN_PAGE_BASE,
|
||||
WINDOW_MAPGEN_PAGE_RANDOM,
|
||||
WINDOW_MAPGEN_PAGE_COUNT
|
||||
};
|
||||
|
||||
enum {
|
||||
WIDX_BACKGROUND,
|
||||
WIDX_TITLE,
|
||||
WIDX_CLOSE,
|
||||
WIDX_PAGE_BACKGROUND,
|
||||
WIDX_TAB_1,
|
||||
WIDX_TAB_2,
|
||||
|
||||
WIDX_GENERATE,
|
||||
|
||||
WIDX_MAP_SIZE = 7,
|
||||
WIDX_MAP_SIZE_UP,
|
||||
WIDX_MAP_SIZE_DOWN,
|
||||
WIDX_BASE_HEIGHT,
|
||||
WIDX_BASE_HEIGHT_UP,
|
||||
WIDX_BASE_HEIGHT_DOWN,
|
||||
WIDX_WATER_LEVEL,
|
||||
WIDX_WATER_LEVEL_UP,
|
||||
WIDX_WATER_LEVEL_DOWN,
|
||||
WIDX_FLOOR_TEXTURE,
|
||||
WIDX_WALL_TEXTURE,
|
||||
|
||||
WIDX_RANDOM_TERRAIN = 7,
|
||||
WIDX_PLACE_TREES,
|
||||
};
|
||||
|
||||
#pragma region Widgets
|
||||
|
||||
static rct_widget window_mapgen_base_widgets[] = {
|
||||
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
|
||||
{ WWT_CAPTION, 0, 1, 298, 1, 14, 2690, STR_WINDOW_TITLE_TIP },
|
||||
{ WWT_CLOSEBOX, 0, 287, 297, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP },
|
||||
{ WWT_RESIZE, 1, 0, 299, 43, 195, 0xFFFFFFFF, STR_NONE },
|
||||
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_NONE },
|
||||
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_NONE },
|
||||
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, 2694, STR_NONE },
|
||||
|
||||
{ WWT_SPINNER, 1, 104, 198, 52, 63, STR_NONE, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 53, 57, STR_NUMERIC_UP, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 58, 62, STR_NUMERIC_DOWN, STR_NONE },
|
||||
{ WWT_SPINNER, 1, 104, 198, 70, 81, STR_NONE, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 71, 75, STR_NUMERIC_UP, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 76, 80, STR_NUMERIC_DOWN, STR_NONE },
|
||||
{ WWT_SPINNER, 1, 104, 198, 88, 99, STR_NONE, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 89, 93, STR_NUMERIC_UP, STR_NONE },
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 187, 197, 94, 98, STR_NUMERIC_DOWN, STR_NONE },
|
||||
{ WWT_FLATBTN, 1, 104, 150, 106, 141, 0xFFFFFFFF, STR_CHANGE_BASE_LAND_TIP },
|
||||
{ WWT_FLATBTN, 1, 151, 197, 106, 141, 0xFFFFFFFF, STR_CHANGE_VERTICAL_LAND_TIP },
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static rct_widget window_mapgen_random_widgets[] = {
|
||||
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
|
||||
{ WWT_CAPTION, 0, 1, 298, 1, 14, 2690, STR_WINDOW_TITLE_TIP },
|
||||
{ WWT_CLOSEBOX, 0, 287, 297, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP },
|
||||
{ WWT_RESIZE, 1, 0, 299, 43, 195, 0xFFFFFFFF, STR_NONE },
|
||||
{ WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_NONE },
|
||||
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_NONE },
|
||||
|
||||
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, 2694, STR_NONE },
|
||||
|
||||
{ WWT_CHECKBOX, 1, 4, 198, 52, 63, 2695, STR_NONE },
|
||||
{ WWT_CHECKBOX, 1, 4, 198, 70, 81, 2696, STR_NONE },
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static rct_widget *window_mapgen_page_widgets[] = {
|
||||
window_mapgen_base_widgets,
|
||||
window_mapgen_random_widgets
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Events
|
||||
|
||||
static void window_mapgen_emptysub() { }
|
||||
|
||||
static void window_mapgen_base_mouseup();
|
||||
static void window_mapgen_base_mousedown(int widgetIndex, rct_window *w, rct_widget* widget);
|
||||
static void window_mapgen_base_dropdown();
|
||||
static void window_mapgen_base_update(rct_window *w);
|
||||
static void window_mapgen_base_invalidate();
|
||||
static void window_mapgen_base_paint();
|
||||
static void window_mapgen_random_mouseup();
|
||||
static void window_mapgen_random_mousedown(int widgetIndex, rct_window*w, rct_widget* widget);
|
||||
static void window_mapgen_random_update(rct_window *w);
|
||||
static void window_mapgen_random_invalidate();
|
||||
static void window_mapgen_random_paint();
|
||||
|
||||
static void* window_mapgen_base_events[] = {
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_base_mouseup,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_base_mousedown,
|
||||
window_mapgen_base_dropdown,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_base_update,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_base_invalidate,
|
||||
window_mapgen_base_paint,
|
||||
window_mapgen_emptysub
|
||||
};
|
||||
|
||||
static void* window_mapgen_random_events[] = {
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_random_mouseup,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_random_mousedown,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_random_update,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_emptysub,
|
||||
window_mapgen_random_invalidate,
|
||||
window_mapgen_random_paint,
|
||||
window_mapgen_emptysub
|
||||
};
|
||||
|
||||
static void* window_mapgen_page_events[] = {
|
||||
window_mapgen_base_events,
|
||||
window_mapgen_random_events
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Enabled widgets
|
||||
|
||||
static uint32 window_mapgen_page_enabled_widgets[] = {
|
||||
(1 << WIDX_CLOSE) |
|
||||
(1 << WIDX_TAB_1) |
|
||||
(1 << WIDX_TAB_2) |
|
||||
(1 << WIDX_GENERATE) |
|
||||
(1 << WIDX_MAP_SIZE_UP) |
|
||||
(1 << WIDX_MAP_SIZE_DOWN) |
|
||||
(1 << WIDX_BASE_HEIGHT_UP) |
|
||||
(1 << WIDX_BASE_HEIGHT_DOWN) |
|
||||
(1 << WIDX_WATER_LEVEL_UP) |
|
||||
(1 << WIDX_WATER_LEVEL_DOWN) |
|
||||
(1 << WIDX_FLOOR_TEXTURE) |
|
||||
(1 << WIDX_WALL_TEXTURE),
|
||||
|
||||
(1 << WIDX_CLOSE) |
|
||||
(1 << WIDX_TAB_1) |
|
||||
(1 << WIDX_TAB_2) |
|
||||
(1 << WIDX_GENERATE) |
|
||||
(1 << WIDX_RANDOM_TERRAIN) |
|
||||
(1 << WIDX_PLACE_TREES)
|
||||
};
|
||||
|
||||
static uint32 window_mapgen_page_hold_down_widgets[] = {
|
||||
(1 << WIDX_MAP_SIZE_UP) |
|
||||
(1 << WIDX_MAP_SIZE_DOWN) |
|
||||
(1 << WIDX_BASE_HEIGHT_UP) |
|
||||
(1 << WIDX_BASE_HEIGHT_DOWN) |
|
||||
(1 << WIDX_WATER_LEVEL_UP) |
|
||||
(1 << WIDX_WATER_LEVEL_DOWN),
|
||||
|
||||
0
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
const int window_mapgen_tab_animation_loops[] = { 16, 16 };
|
||||
|
||||
static void window_mapgen_set_page(rct_window *w, int page);
|
||||
static void window_mapgen_set_pressed_tab(rct_window *w);
|
||||
static void window_mapgen_anchor_border_widgets(rct_window *w);
|
||||
static void window_mapgen_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
|
||||
|
||||
static char window_land_floor_texture_order[] = {
|
||||
TERRAIN_SAND_DARK, TERRAIN_SAND_LIGHT, TERRAIN_DIRT, TERRAIN_GRASS_CLUMPS, TERRAIN_GRASS,
|
||||
TERRAIN_ROCK, TERRAIN_SAND, TERRAIN_MARTIAN, TERRAIN_CHECKERBOARD, TERRAIN_ICE,
|
||||
TERRAIN_GRID_RED, TERRAIN_GRID_YELLOW, TERRAIN_GRID_BLUE, TERRAIN_GRID_GREEN
|
||||
};
|
||||
|
||||
static char window_land_wall_texture_order[] = {
|
||||
TERRAIN_EDGE_ROCK, TERRAIN_EDGE_WOOD_RED,
|
||||
TERRAIN_EDGE_WOOD_BLACK, TERRAIN_EDGE_ICE,
|
||||
0, 0
|
||||
};
|
||||
|
||||
static int _mapSize = 150;
|
||||
static int _baseHeight = 12;
|
||||
static int _waterLevel = 6;
|
||||
static int _floorTexture = TERRAIN_GRASS;
|
||||
static int _wallTexture = TERRAIN_EDGE_ROCK;
|
||||
static int _randomTerrrain = 1;
|
||||
static int _placeTrees = 1;
|
||||
|
||||
rct_window *window_mapgen_open()
|
||||
{
|
||||
rct_window *w;
|
||||
|
||||
w = window_bring_to_front_by_class(WC_MAPGEN);
|
||||
if (w == NULL) {
|
||||
w = window_create(
|
||||
(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - 300) / 2,
|
||||
(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - 200) / 2,
|
||||
300,
|
||||
200,
|
||||
window_mapgen_page_events[0],
|
||||
WC_MAPGEN,
|
||||
WF_10
|
||||
);
|
||||
w->number = 0;
|
||||
w->frame_no = 0;
|
||||
w->colours[0] = 12;
|
||||
w->colours[1] = 24;
|
||||
w->colours[2] = 24;
|
||||
}
|
||||
|
||||
w->page = WINDOW_MAPGEN_PAGE_BASE;
|
||||
window_invalidate(w);
|
||||
w->widgets = window_mapgen_page_widgets[WINDOW_MAPGEN_PAGE_BASE];
|
||||
w->enabled_widgets = window_mapgen_page_enabled_widgets[WINDOW_MAPGEN_PAGE_BASE];
|
||||
w->var_020 = window_mapgen_page_hold_down_widgets[WINDOW_MAPGEN_PAGE_BASE];
|
||||
w->event_handlers = window_mapgen_page_events[WINDOW_MAPGEN_PAGE_BASE];
|
||||
w->pressed_widgets = 0;
|
||||
w->disabled_widgets = 0;
|
||||
window_init_scroll_widgets(w);
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
#pragma region Base page
|
||||
|
||||
static void window_mapgen_base_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
mapgen_settings mapgenSettings;
|
||||
|
||||
window_widget_get_registers(w, widgetIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_CLOSE:
|
||||
window_close(w);
|
||||
break;
|
||||
case WIDX_TAB_1:
|
||||
case WIDX_TAB_2:
|
||||
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
|
||||
break;
|
||||
case WIDX_GENERATE:
|
||||
mapgenSettings.mapSize = _mapSize;
|
||||
mapgenSettings.height = _baseHeight + 2;
|
||||
mapgenSettings.waterLevel = _waterLevel + 2;
|
||||
mapgenSettings.floor = _floorTexture;
|
||||
mapgenSettings.wall = _wallTexture;
|
||||
|
||||
mapgen_generate_blank(&mapgenSettings);
|
||||
gfx_invalidate_screen();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_mapgen_base_mousedown(int widgetIndex, rct_window *w, rct_widget* widget)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_MAP_SIZE_UP:
|
||||
_mapSize = min(_mapSize + 1, 256);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_MAP_SIZE_DOWN:
|
||||
_mapSize = max(_mapSize - 1, 16);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_BASE_HEIGHT_UP:
|
||||
_baseHeight = min(_baseHeight + 2, 60);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_BASE_HEIGHT_DOWN:
|
||||
_baseHeight = max(_baseHeight - 2, 0);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_WATER_LEVEL_UP:
|
||||
_waterLevel = min(_waterLevel + 2, 54);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_WATER_LEVEL_DOWN:
|
||||
_waterLevel = max(_waterLevel - 2, 0);
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_FLOOR_TEXTURE:
|
||||
for (i = 0; i < 14; i++) {
|
||||
gDropdownItemsFormat[i] = -1;
|
||||
gDropdownItemsArgs[i] = SPR_FLOOR_TEXTURE_GRASS + window_land_floor_texture_order[i];
|
||||
if (window_land_floor_texture_order[i] == _floorTexture)
|
||||
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
|
||||
}
|
||||
window_dropdown_show_image(
|
||||
w->x + widget->left, w->y + widget->top,
|
||||
widget->bottom - widget->top,
|
||||
w->colours[2],
|
||||
0,
|
||||
14,
|
||||
47, 36,
|
||||
gAppropriateImageDropdownItemsPerRow[14]
|
||||
);
|
||||
break;
|
||||
case WIDX_WALL_TEXTURE:
|
||||
for (i = 0; i < 4; i++) {
|
||||
gDropdownItemsFormat[i] = -1;
|
||||
gDropdownItemsArgs[i] = SPR_WALL_TEXTURE_ROCK + window_land_wall_texture_order[i];
|
||||
if (window_land_wall_texture_order[i] == _wallTexture)
|
||||
RCT2_GLOBAL(0x009DEBA2, sint16) = i;
|
||||
}
|
||||
window_dropdown_show_image(
|
||||
w->x + widget->left, w->y + widget->top,
|
||||
widget->bottom - widget->top,
|
||||
w->colours[2],
|
||||
0,
|
||||
4,
|
||||
47, 36,
|
||||
gAppropriateImageDropdownItemsPerRow[4]
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_mapgen_base_dropdown()
|
||||
{
|
||||
int type;
|
||||
short dropdownIndex, widgetIndex;
|
||||
rct_window *w;
|
||||
|
||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FLOOR_TEXTURE:
|
||||
if (dropdownIndex == -1)
|
||||
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
|
||||
|
||||
type = (dropdownIndex == -1) ?
|
||||
_floorTexture :
|
||||
*((uint32*)&gDropdownItemsArgs[dropdownIndex]) - SPR_FLOOR_TEXTURE_GRASS;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) == type) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) = 255;
|
||||
} else {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) = type;
|
||||
_floorTexture = type;
|
||||
}
|
||||
window_invalidate(w);
|
||||
break;
|
||||
case WIDX_WALL_TEXTURE:
|
||||
if (dropdownIndex == -1)
|
||||
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, sint16);
|
||||
|
||||
type = (dropdownIndex == -1) ?
|
||||
_wallTexture :
|
||||
*((uint32*)&gDropdownItemsArgs[dropdownIndex]) - SPR_WALL_TEXTURE_ROCK;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) == type) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) = 255;
|
||||
} else {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) = type;
|
||||
_wallTexture = type;
|
||||
}
|
||||
window_invalidate(w);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_mapgen_base_update(rct_window *w)
|
||||
{
|
||||
// Tab animation
|
||||
if (++w->frame_no >= window_mapgen_tab_animation_loops[w->page])
|
||||
w->frame_no = 0;
|
||||
widget_invalidate(w, WIDX_TAB_1);
|
||||
}
|
||||
|
||||
static void window_mapgen_base_invalidate()
|
||||
{
|
||||
rct_window *w;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
if (w->widgets != window_mapgen_page_widgets[WINDOW_MAPGEN_PAGE_BASE]) {
|
||||
w->widgets = window_mapgen_page_widgets[WINDOW_MAPGEN_PAGE_BASE];
|
||||
window_init_scroll_widgets(w);
|
||||
}
|
||||
|
||||
w->widgets[WIDX_FLOOR_TEXTURE].image = SPR_FLOOR_TEXTURE_GRASS + _floorTexture;
|
||||
w->widgets[WIDX_WALL_TEXTURE].image = SPR_WALL_TEXTURE_ROCK + _wallTexture;
|
||||
|
||||
window_mapgen_set_pressed_tab(w);
|
||||
window_mapgen_anchor_border_widgets(w);
|
||||
}
|
||||
|
||||
static void window_mapgen_base_paint()
|
||||
{
|
||||
uint16 arg;
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
window_paint_get_registers(w, dpi);
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
window_mapgen_draw_tab_images(dpi, w);
|
||||
|
||||
gfx_draw_string_left(dpi, STR_MAP_SIZE, 0, 0, w->x + 4, w->y + w->widgets[WIDX_MAP_SIZE].top + 1);
|
||||
gfx_draw_string_left(dpi, 2691, 0, 0, w->x + 4, w->y + w->widgets[WIDX_BASE_HEIGHT].top + 1);
|
||||
gfx_draw_string_left(dpi, 2692, 0, 0, w->x + 4, w->y + w->widgets[WIDX_WATER_LEVEL].top + 1);
|
||||
gfx_draw_string_left(dpi, 2693, 0, 0, w->x + 4, w->y + w->widgets[WIDX_FLOOR_TEXTURE].top + 1);
|
||||
|
||||
uint16 mapSizeArgs[2] = { _mapSize, _mapSize };
|
||||
gfx_draw_string_left(dpi, 839, mapSizeArgs, w->colours[1], w->x + w->widgets[WIDX_MAP_SIZE].left + 1, w->y + w->widgets[WIDX_MAP_SIZE].top + 1);
|
||||
|
||||
arg = (_baseHeight - 12) / 2;
|
||||
gfx_draw_string_left(dpi, 1737, &arg, w->colours[1], w->x + w->widgets[WIDX_BASE_HEIGHT].left + 1, w->y + w->widgets[WIDX_BASE_HEIGHT].top + 1);
|
||||
|
||||
arg = (_waterLevel - 12) / 2;
|
||||
gfx_draw_string_left(dpi, 1737, &arg, w->colours[1], w->x + w->widgets[WIDX_WATER_LEVEL].left + 1, w->y + w->widgets[WIDX_WATER_LEVEL].top + 1);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Random page
|
||||
|
||||
static void window_mapgen_random_mouseup()
|
||||
{
|
||||
rct_window * w;
|
||||
short widgetIndex;
|
||||
mapgen_settings mapgenSettings;
|
||||
|
||||
window_widget_get_registers(w, widgetIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_CLOSE:
|
||||
window_close(w);
|
||||
break;
|
||||
case WIDX_TAB_1:
|
||||
case WIDX_TAB_2:
|
||||
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
|
||||
break;
|
||||
case WIDX_GENERATE:
|
||||
mapgenSettings.mapSize = _mapSize;
|
||||
mapgenSettings.height = _baseHeight + 2;
|
||||
mapgenSettings.waterLevel = _waterLevel + 2;
|
||||
mapgenSettings.floor = _randomTerrrain ? -1 : _floorTexture;
|
||||
mapgenSettings.wall = _randomTerrrain ? -1 : _wallTexture;
|
||||
mapgenSettings.trees = _placeTrees;
|
||||
|
||||
mapgen_generate(&mapgenSettings);
|
||||
gfx_invalidate_screen();
|
||||
break;
|
||||
case WIDX_RANDOM_TERRAIN:
|
||||
_randomTerrrain ^= 1;
|
||||
break;
|
||||
case WIDX_PLACE_TREES:
|
||||
_placeTrees ^= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void window_mapgen_random_mousedown(int widgetIndex, rct_window *w, rct_widget* widget)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void window_mapgen_random_update(rct_window *w)
|
||||
{
|
||||
// Tab animation
|
||||
if (++w->frame_no >= window_mapgen_tab_animation_loops[w->page])
|
||||
w->frame_no = 0;
|
||||
widget_invalidate(w, WIDX_TAB_2);
|
||||
}
|
||||
|
||||
static void window_mapgen_random_invalidate()
|
||||
{
|
||||
rct_window *w;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
if (w->widgets != window_mapgen_page_widgets[WINDOW_MAPGEN_PAGE_RANDOM]) {
|
||||
w->widgets = window_mapgen_page_widgets[WINDOW_MAPGEN_PAGE_RANDOM];
|
||||
window_init_scroll_widgets(w);
|
||||
}
|
||||
|
||||
w->pressed_widgets = 0;
|
||||
if (_randomTerrrain)
|
||||
w->pressed_widgets |= 1 << WIDX_RANDOM_TERRAIN;
|
||||
if (_placeTrees)
|
||||
w->pressed_widgets |= 1 << WIDX_PLACE_TREES;
|
||||
|
||||
window_mapgen_set_pressed_tab(w);
|
||||
window_mapgen_anchor_border_widgets(w);
|
||||
}
|
||||
|
||||
static void window_mapgen_random_paint()
|
||||
{
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
window_paint_get_registers(w, dpi);
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
window_mapgen_draw_tab_images(dpi, w);
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Common
|
||||
|
||||
static void window_mapgen_set_page(rct_window *w, int page)
|
||||
{
|
||||
w->page = page;
|
||||
w->frame_no = 0;
|
||||
if (w->viewport != NULL) {
|
||||
w->viewport->width = 0;
|
||||
w->viewport = NULL;
|
||||
}
|
||||
|
||||
w->enabled_widgets = window_mapgen_page_enabled_widgets[page];
|
||||
w->var_020 = window_mapgen_page_hold_down_widgets[page];
|
||||
w->event_handlers = window_mapgen_page_events[page];
|
||||
w->widgets = window_mapgen_page_widgets[page];
|
||||
w->disabled_widgets = 0;
|
||||
w->pressed_widgets = 0;
|
||||
|
||||
window_init_scroll_widgets(w);
|
||||
window_invalidate(w);
|
||||
}
|
||||
|
||||
static void window_mapgen_set_pressed_tab(rct_window *w)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < WINDOW_MAPGEN_PAGE_COUNT; i++)
|
||||
w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + i));
|
||||
w->pressed_widgets |= 1LL << (WIDX_TAB_1 + w->page);
|
||||
}
|
||||
|
||||
static void window_mapgen_anchor_border_widgets(rct_window *w)
|
||||
{
|
||||
int width = w->widgets[WIDX_GENERATE].right - w->widgets[WIDX_GENERATE].left;
|
||||
int height = w->widgets[WIDX_GENERATE].bottom - w->widgets[WIDX_GENERATE].top;
|
||||
|
||||
w->widgets[WIDX_GENERATE].left = w->width - 3 - width;
|
||||
w->widgets[WIDX_GENERATE].right = w->width - 3;
|
||||
w->widgets[WIDX_GENERATE].bottom = w->height - 3;
|
||||
w->widgets[WIDX_GENERATE].top = w->height - 3 - height;
|
||||
|
||||
w->widgets[WIDX_BACKGROUND].right = w->width - 1;
|
||||
w->widgets[WIDX_BACKGROUND].bottom = w->height - 1;
|
||||
w->widgets[WIDX_PAGE_BACKGROUND].right = w->width - 1;
|
||||
w->widgets[WIDX_PAGE_BACKGROUND].bottom = w->height - 3 - height - 3;
|
||||
w->widgets[WIDX_TITLE].right = w->width - 2;
|
||||
w->widgets[WIDX_CLOSE].left = w->width - 13;
|
||||
w->widgets[WIDX_CLOSE].right = w->width - 3;
|
||||
}
|
||||
|
||||
static void window_mapgen_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 / 2;
|
||||
if (page == WINDOW_MAPGEN_PAGE_BASE)
|
||||
frame %= 8;
|
||||
spriteIndex += frame;
|
||||
}
|
||||
|
||||
gfx_draw_sprite(dpi, spriteIndex, w->x + w->widgets[widgetIndex].left, w->y + w->widgets[widgetIndex].top, 0);
|
||||
}
|
||||
}
|
||||
|
||||
static void window_mapgen_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#pragma endregion
|
||||
992
src/windows/top_toolbar.c
Normal file
992
src/windows/top_toolbar.c
Normal file
@@ -0,0 +1,992 @@
|
||||
/*****************************************************************************
|
||||
* Copyright (c) 2014 Ted John
|
||||
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
||||
*
|
||||
* This file is part of OpenRCT2.
|
||||
*
|
||||
* OpenRCT2 is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../editor.h"
|
||||
#include "../game.h"
|
||||
#include "../input.h"
|
||||
#include "../sprites.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../interface/widget.h"
|
||||
#include "../interface/window.h"
|
||||
#include "../interface/viewport.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "dropdown.h"
|
||||
#include "scenery.h"
|
||||
|
||||
enum {
|
||||
WIDX_PAUSE,
|
||||
WIDX_FILE_MENU,
|
||||
WIDX_ZOOM_OUT,
|
||||
WIDX_ZOOM_IN,
|
||||
WIDX_ROTATE,
|
||||
WIDX_VIEW_MENU,
|
||||
WIDX_MAP,
|
||||
|
||||
WIDX_LAND,
|
||||
WIDX_WATER,
|
||||
WIDX_SCENERY,
|
||||
WIDX_PATH,
|
||||
WIDX_CONSTRUCT_RIDE,
|
||||
WIDX_RIDES,
|
||||
WIDX_PARK,
|
||||
WIDX_STAFF,
|
||||
WIDX_GUESTS,
|
||||
WIDX_CLEAR_SCENERY,
|
||||
|
||||
//WIDX_FASTFORWARD,
|
||||
WIDX_FINANCES,
|
||||
WIDX_RESEARCH,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
DDIDX_LOAD_GAME = 0,
|
||||
DDIDX_SAVE_GAME = 1,
|
||||
DDIDX_ABOUT = 3,
|
||||
DDIDX_OPTIONS = 4,
|
||||
DDIDX_SCREENSHOT = 5,
|
||||
DDIDX_QUIT_GAME = 7,
|
||||
} FILE_MENU_DDIDX;
|
||||
|
||||
typedef enum {
|
||||
DDIDX_UNDERGROUND_INSIDE = 0,
|
||||
DDIDX_HIDE_BASE = 1,
|
||||
DDIDX_HIDE_VERTICAL = 2,
|
||||
DDIDX_SEETHROUGH_RIDES = 4,
|
||||
DDIDX_SEETHROUGH_SCENARY = 5,
|
||||
DDIDX_INVISIBLE_SUPPORTS = 6,
|
||||
DDIDX_INVISIBLE_PEEPS = 7,
|
||||
DDIDX_LAND_HEIGHTS = 9,
|
||||
DDIDX_TRACK_HEIGHTS = 10,
|
||||
DDIDX_PATH_HEIGHTS = 11,
|
||||
} TOP_TOOLBAR_VIEW_MENU_DDIDX;
|
||||
|
||||
#pragma region Toolbar_widget_ordering
|
||||
|
||||
// from left to right
|
||||
static const int left_aligned_widgets_order[] = {
|
||||
WIDX_PAUSE,
|
||||
//WIDX_FASTFORWARD,
|
||||
WIDX_FILE_MENU,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
|
||||
WIDX_ZOOM_OUT,
|
||||
WIDX_ZOOM_IN,
|
||||
WIDX_ROTATE,
|
||||
WIDX_VIEW_MENU,
|
||||
WIDX_MAP,
|
||||
};
|
||||
|
||||
// from right to left
|
||||
static const int right_aligned_widgets_order[] = {
|
||||
WIDX_GUESTS,
|
||||
WIDX_STAFF,
|
||||
WIDX_PARK,
|
||||
WIDX_RIDES,
|
||||
WIDX_RESEARCH,
|
||||
WIDX_FINANCES,
|
||||
|
||||
WIDX_SEPARATOR,
|
||||
|
||||
WIDX_CONSTRUCT_RIDE,
|
||||
WIDX_PATH,
|
||||
WIDX_SCENERY,
|
||||
WIDX_WATER,
|
||||
WIDX_LAND,
|
||||
WIDX_CLEAR_SCENERY,
|
||||
};
|
||||
|
||||
#pragma endregion
|
||||
|
||||
static rct_widget window_top_toolbar_widgets[] = {
|
||||
{ WWT_TRNBTN, 0, 0x0000, 0x001D, 0, 27, 0x20000000 | SPR_TOOLBAR_PAUSE, STR_PAUSE_GAME_TIP }, // Pause
|
||||
{ WWT_TRNBTN, 0, 0x001E + 30, 0x003B + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_FILE, STR_DISC_AND_GAME_OPTIONS_TIP }, // File menu
|
||||
{ WWT_TRNBTN, 1, 0x0046 + 30, 0x0063 + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_OUT, STR_ZOOM_OUT_TIP }, // Zoom out
|
||||
{ WWT_TRNBTN, 1, 0x0064 + 30, 0x0081 + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ZOOM_IN, STR_ZOOM_IN_TIP }, // Zoom in
|
||||
{ WWT_TRNBTN, 1, 0x0082 + 30, 0x009F + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_ROTATE, STR_ROTATE_TIP }, // Rotate camera
|
||||
{ WWT_TRNBTN, 1, 0x00A0 + 30, 0x00BD + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_VIEW, STR_VIEW_OPTIONS_TIP }, // Transparancy menu
|
||||
{ WWT_TRNBTN, 1, 0x00BE + 30, 0x00DB + 30, 0, 27, 0x20000000 | SPR_TOOLBAR_MAP, STR_SHOW_MAP_TIP }, // Map
|
||||
|
||||
{ WWT_TRNBTN, 2, 0x010B, 0x0128, 0, 27, 0x20000000 | SPR_TOOLBAR_LAND, STR_ADJUST_LAND_TIP }, // Land
|
||||
{ WWT_TRNBTN, 2, 0x0129, 0x0146, 0, 27, 0x20000000 | SPR_TOOLBAR_WATER, STR_ADJUST_WATER_TIP }, // Water
|
||||
{ WWT_TRNBTN, 2, 0x0147, 0x0164, 0, 27, 0x20000000 | SPR_TOOLBAR_SCENERY, STR_PLACE_SCENERY_TIP }, // Scenery
|
||||
{ WWT_TRNBTN, 2, 0x0165, 0x0182, 0, 27, 0x20000000 | SPR_TOOLBAR_FOOTPATH, STR_BUILD_FOOTPATH_TIP }, // Path
|
||||
{ WWT_TRNBTN, 2, 0x0183, 0x01A0, 0, 27, 0x20000000 | SPR_TOOLBAR_CONSTRUCT_RIDE, STR_BUILD_RIDE_TIP }, // Construct ride
|
||||
{ WWT_TRNBTN, 3, 0x01EA, 0x0207, 0, 27, 0x20000000 | SPR_TOOLBAR_RIDES, STR_RIDES_IN_PARK_TIP }, // Rides
|
||||
{ WWT_TRNBTN, 3, 0x0208, 0x0225, 0, 27, 0x20000000 | SPR_TOOLBAR_PARK, STR_PARK_INFORMATION_TIP }, // Park
|
||||
{ WWT_TRNBTN, 3, 0x0226, 0x0243, 0, 27, 0x20000000 | 0x15F9, STR_STAFF_TIP }, // Staff
|
||||
{ WWT_TRNBTN, 3, 0x0230, 0x024D, 0, 27, 0x20000000 | SPR_TOOLBAR_GUESTS, STR_GUESTS_TIP }, // Guests
|
||||
{ WWT_TRNBTN, 2, 0x0230, 0x024D, 0, 27, 0x20000000 | SPR_TOOLBAR_CLEAR_SCENERY, STR_CLEAR_SCENERY_TIP }, // Clear scenery
|
||||
|
||||
//{ WWT_TRNBTN, 0, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, STR_NONE }, // Fast forward
|
||||
{ WWT_TRNBTN, 3, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, 3235 }, // Finances
|
||||
{ WWT_TRNBTN, 3, 0x001E, 0x003B, 0, 27, 0x20000000 | 0x15F9, 2275 }, // Research
|
||||
|
||||
{ WWT_EMPTY, 0, 0, 10-1, 0, 0, 0xFFFFFFFF, STR_NONE }, // Artificial widget separator
|
||||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
static void window_top_toolbar_emptysub() { }
|
||||
static void window_top_toolbar_mouseup();
|
||||
static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget);
|
||||
static void window_top_toolbar_dropdown();
|
||||
static void window_top_toolbar_tool_update();
|
||||
static void window_top_toolbar_tool_down();
|
||||
static void window_top_toolbar_tool_drag();
|
||||
static void window_top_toolbar_invalidate();
|
||||
static void window_top_toolbar_paint();
|
||||
|
||||
static void* window_top_toolbar_events[] = {
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_mouseup,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_mousedown,
|
||||
window_top_toolbar_dropdown,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub, // check if editor versions are significantly different...
|
||||
window_top_toolbar_tool_update, // editor: 0x0066fB0E
|
||||
window_top_toolbar_tool_down, // editor: 0x0066fB5C
|
||||
window_top_toolbar_tool_drag, // editor: 0x0066fB37
|
||||
(void*)0x0066CC5B, // editor: 0x0066fC44
|
||||
(void*)0x0066CA58, // editor: 0x0066fA74
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_emptysub,
|
||||
window_top_toolbar_invalidate,
|
||||
window_top_toolbar_paint,
|
||||
window_top_toolbar_emptysub
|
||||
};
|
||||
|
||||
void top_toolbar_init_view_menu(rct_window *window, rct_widget *widget);
|
||||
void top_toolbar_view_menu_dropdown(short dropdownIndex);
|
||||
|
||||
void toggle_footpath_window();
|
||||
void toggle_land_window(rct_window *topToolbar, int widgetIndex);
|
||||
void toggle_clear_scenery_window(rct_window *topToolbar, int widgetIndex);
|
||||
void toggle_water_window(rct_window *topToolbar, int widgetIndex);
|
||||
|
||||
/**
|
||||
* Creates the main game top toolbar window.
|
||||
* rct2: 0x0066B485 (part of 0x0066B3E8)
|
||||
*/
|
||||
void window_top_toolbar_open()
|
||||
{
|
||||
rct_window* window;
|
||||
|
||||
window = window_create(
|
||||
0, 0,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16), 28,
|
||||
(uint32*)window_top_toolbar_events,
|
||||
WC_TOP_TOOLBAR,
|
||||
WF_STICK_TO_FRONT | WF_TRANSPARENT | WF_5
|
||||
);
|
||||
window->widgets = window_top_toolbar_widgets;
|
||||
|
||||
window_init_scroll_widgets(window);
|
||||
window->colours[0] = 7;
|
||||
window->colours[1] = 12;
|
||||
window->colours[2] = 24;
|
||||
window->colours[3] = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C957
|
||||
*/
|
||||
static void window_top_toolbar_mouseup()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w, *mainWindow;
|
||||
|
||||
window_widget_get_registers(w, widgetIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_PAUSE:
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_TOGGLE_PAUSE, 0, 0);
|
||||
break;
|
||||
// case WIDX_FASTFORWARD:
|
||||
// // This is an excellent place to add in debugging statements and
|
||||
// // print routines, that will be triggered when you press the
|
||||
// // button in the game. Use "git update-index --skip-worktree
|
||||
// // src/window_top_toolbar" to avoid committing these changes to
|
||||
// // version control.
|
||||
// window_cheats_open();
|
||||
// break;
|
||||
|
||||
case WIDX_ZOOM_OUT:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_out(mainWindow);
|
||||
break;
|
||||
case WIDX_ZOOM_IN:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_zoom_in(mainWindow);
|
||||
break;
|
||||
case WIDX_ROTATE:
|
||||
if ((mainWindow = window_get_main()) != NULL)
|
||||
window_rotate_camera(mainWindow);
|
||||
break;
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
toggle_clear_scenery_window(w, WIDX_CLEAR_SCENERY);
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
toggle_land_window(w, WIDX_LAND);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
toggle_water_window(w, WIDX_WATER);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
if (!tool_set(w, WIDX_SCENERY, 0)) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) |= INPUT_FLAG_6;
|
||||
window_scenery_open();
|
||||
}
|
||||
break;
|
||||
case WIDX_PATH:
|
||||
toggle_footpath_window();
|
||||
break;
|
||||
case WIDX_CONSTRUCT_RIDE:
|
||||
window_new_ride_open();
|
||||
break;
|
||||
case WIDX_RIDES:
|
||||
window_ride_list_open();
|
||||
break;
|
||||
case WIDX_PARK:
|
||||
window_park_entrance_open();
|
||||
break;
|
||||
case WIDX_STAFF:
|
||||
window_staff_list_open();
|
||||
break;
|
||||
case WIDX_GUESTS:
|
||||
window_guest_list_open();
|
||||
break;
|
||||
case WIDX_FINANCES:
|
||||
window_finances_open();
|
||||
break;
|
||||
case WIDX_RESEARCH:
|
||||
window_research_open();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CA3B
|
||||
*/
|
||||
static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widget* widget)
|
||||
{
|
||||
int numItems;
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FILE_MENU:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
|
||||
gDropdownItemsFormat[0] = STR_ABOUT;
|
||||
gDropdownItemsFormat[1] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[2] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[3] = 0;
|
||||
gDropdownItemsFormat[4] = STR_QUIT_TRACK_DESIGNS_MANAGER;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER)
|
||||
gDropdownItemsFormat[4] = STR_QUIT_ROLLERCOASTER_DESIGNER;
|
||||
|
||||
numItems = 5;
|
||||
} else if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR) {
|
||||
gDropdownItemsFormat[0] = STR_LOAD_LANDSCAPE;
|
||||
gDropdownItemsFormat[1] = STR_SAVE_LANDSCAPE;
|
||||
gDropdownItemsFormat[2] = 0;
|
||||
gDropdownItemsFormat[3] = STR_ABOUT;
|
||||
gDropdownItemsFormat[4] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[5] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[6] = 0;
|
||||
gDropdownItemsFormat[7] = STR_QUIT_SCENARIO_EDITOR;
|
||||
numItems = 8;
|
||||
} else {
|
||||
gDropdownItemsFormat[0] = STR_LOAD_GAME;
|
||||
gDropdownItemsFormat[1] = STR_SAVE_GAME;
|
||||
gDropdownItemsFormat[2] = 0;
|
||||
gDropdownItemsFormat[3] = STR_ABOUT;
|
||||
gDropdownItemsFormat[4] = STR_OPTIONS;
|
||||
gDropdownItemsFormat[5] = STR_SCREENSHOT;
|
||||
gDropdownItemsFormat[6] = 0;
|
||||
gDropdownItemsFormat[7] = STR_QUIT_GAME;
|
||||
numItems = 8;
|
||||
}
|
||||
window_dropdown_show_text(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[0] | 0x80,
|
||||
0x80,
|
||||
numItems
|
||||
);
|
||||
break;
|
||||
case WIDX_VIEW_MENU:
|
||||
top_toolbar_init_view_menu(w, widget);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
gDropdownItemsFormat[0] = 2523;
|
||||
gDropdownItemsFormat[1] = 2780;
|
||||
numItems = 2;
|
||||
|
||||
if ((RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR) && g_editor_step == EDITOR_STEP_LANDSCAPE_EDITOR) {
|
||||
gDropdownItemsFormat[2] = 2690;
|
||||
numItems++;
|
||||
}
|
||||
|
||||
window_dropdown_show_text(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[1] | 0x80,
|
||||
0,
|
||||
numItems
|
||||
);
|
||||
RCT2_GLOBAL(0x009DEBA2, uint16) = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C9EA
|
||||
*/
|
||||
static void window_top_toolbar_dropdown()
|
||||
{
|
||||
short widgetIndex, dropdownIndex;
|
||||
rct_window* w;
|
||||
|
||||
window_dropdown_get_registers(w, widgetIndex, dropdownIndex);
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FILE_MENU:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER))
|
||||
dropdownIndex += DDIDX_ABOUT;
|
||||
|
||||
switch (dropdownIndex) {
|
||||
case DDIDX_LOAD_GAME:
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 0, 0);
|
||||
break;
|
||||
case DDIDX_SAVE_GAME:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR) {
|
||||
RCT2_CALLPROC_EBPSAFE(0x0066FE2A);
|
||||
} else {
|
||||
tool_cancel();
|
||||
save_game();
|
||||
}
|
||||
break;
|
||||
case DDIDX_ABOUT:
|
||||
window_about_open();
|
||||
break;
|
||||
case DDIDX_OPTIONS:
|
||||
window_options_open();
|
||||
break;
|
||||
case DDIDX_SCREENSHOT:
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SCREENSHOT_COUNTDOWN, sint8) = 10;
|
||||
break;
|
||||
case DDIDX_QUIT_GAME:
|
||||
window_close_by_class(WC_MANAGE_TRACK_DESIGN);
|
||||
window_close_by_class(WC_TRACK_DELETE_PROMPT);
|
||||
game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case WIDX_VIEW_MENU:
|
||||
top_toolbar_view_menu_dropdown(dropdownIndex);
|
||||
break;
|
||||
case WIDX_MAP:
|
||||
if (dropdownIndex == -1)
|
||||
dropdownIndex = RCT2_GLOBAL(0x009DEBA2, uint16);
|
||||
|
||||
switch (dropdownIndex) {
|
||||
case 0:
|
||||
window_map_open();
|
||||
break;
|
||||
case 1:
|
||||
window_viewport_open();
|
||||
break;
|
||||
case 2:
|
||||
window_mapgen_open();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C810
|
||||
*/
|
||||
static void window_top_toolbar_invalidate()
|
||||
{
|
||||
int i, x, enabledWidgets, widgetIndex, widgetWidth, firstAlignment;
|
||||
rct_window *w;
|
||||
rct_widget *widget;
|
||||
|
||||
window_get_register(w);
|
||||
|
||||
// Enable / disable buttons
|
||||
window_top_toolbar_widgets[WIDX_PAUSE].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_FILE_MENU].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_ROTATE].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_MAP].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_LAND].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_WATER].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_SCENERY].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_PATH].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_RIDES].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_PARK].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_STAFF].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_GUESTS].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_FINANCES].type = WWT_TRNBTN;
|
||||
window_top_toolbar_widgets[WIDX_RESEARCH].type = WWT_TRNBTN;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_SCENARIO_EDITOR | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
|
||||
window_top_toolbar_widgets[WIDX_PAUSE].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_RIDES].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_PARK].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_STAFF].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_GUESTS].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_FINANCES].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_RESEARCH].type = WWT_EMPTY;
|
||||
|
||||
if (g_editor_step != EDITOR_STEP_LANDSCAPE_EDITOR) {
|
||||
window_top_toolbar_widgets[WIDX_MAP].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_LAND].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_WATER].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_SCENERY].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_PATH].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_CLEAR_SCENERY].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
if (g_editor_step != EDITOR_STEP_ROLLERCOASTER_DESIGNER) {
|
||||
window_top_toolbar_widgets[WIDX_CONSTRUCT_RIDE].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
if (g_editor_step != EDITOR_STEP_LANDSCAPE_EDITOR && g_editor_step != EDITOR_STEP_ROLLERCOASTER_DESIGNER) {
|
||||
window_top_toolbar_widgets[WIDX_ZOOM_OUT].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_ZOOM_IN].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_ROTATE].type = WWT_EMPTY;
|
||||
window_top_toolbar_widgets[WIDX_VIEW_MENU].type = WWT_EMPTY;
|
||||
}
|
||||
} else {
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
|
||||
window_top_toolbar_widgets[WIDX_FINANCES].type = WWT_EMPTY;
|
||||
}
|
||||
|
||||
enabledWidgets = 0;
|
||||
for (i = WIDX_PAUSE; i <= WIDX_RESEARCH; i++)
|
||||
if (window_top_toolbar_widgets[i].type != WWT_EMPTY)
|
||||
enabledWidgets |= (1 << i);
|
||||
w->enabled_widgets = enabledWidgets;
|
||||
|
||||
// Align left hand side toolbar buttons
|
||||
firstAlignment = 1;
|
||||
x = 0;
|
||||
for (int i = 0; i < countof(left_aligned_widgets_order); ++i) {
|
||||
widgetIndex = left_aligned_widgets_order[i];
|
||||
widget = &window_top_toolbar_widgets[widgetIndex];
|
||||
if (widget->type == WWT_EMPTY && widgetIndex != WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
if (firstAlignment && widgetIndex == WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
widgetWidth = widget->right - widget->left;
|
||||
widget->left = x;
|
||||
x += widgetWidth;
|
||||
widget->right = x;
|
||||
x += 1;
|
||||
firstAlignment = 0;
|
||||
}
|
||||
|
||||
// Align right hand side toolbar buttons
|
||||
firstAlignment = 1;
|
||||
x = max(640, RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16));
|
||||
for (int i = 0; i < countof(right_aligned_widgets_order); ++i) {
|
||||
widgetIndex = right_aligned_widgets_order[i];
|
||||
widget = &window_top_toolbar_widgets[widgetIndex];
|
||||
if (widget->type == WWT_EMPTY && widgetIndex != WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
if (firstAlignment && widgetIndex == WIDX_SEPARATOR)
|
||||
continue;
|
||||
|
||||
widgetWidth = widget->right - widget->left;
|
||||
x -= 1;
|
||||
widget->right = x;
|
||||
x -= widgetWidth;
|
||||
widget->left = x;
|
||||
firstAlignment = 0;
|
||||
}
|
||||
|
||||
// Footpath button pressed down
|
||||
if (window_find_by_class(WC_FOOTPATH) == NULL)
|
||||
w->pressed_widgets &= ~(1 << WIDX_PATH);
|
||||
else
|
||||
w->pressed_widgets |= (1 << WIDX_PATH);
|
||||
|
||||
// Fast forward button pressed down
|
||||
// if (0)
|
||||
// w->pressed_widgets |= (1 << WIDX_FASTFORWARD);
|
||||
// else
|
||||
// w->pressed_widgets &= ~(1 << WIDX_FASTFORWARD);
|
||||
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint32) & 1))
|
||||
w->pressed_widgets &= ~(1 << WIDX_PAUSE);
|
||||
else
|
||||
w->pressed_widgets |= (1 << WIDX_PAUSE);
|
||||
|
||||
// Zoomed out/in disable. Not sure where this code is in the original.
|
||||
if (window_get_main()->viewport->zoom == 0){
|
||||
w->disabled_widgets |= (1 << WIDX_ZOOM_IN);
|
||||
} else if (window_get_main()->viewport->zoom == 3){
|
||||
w->disabled_widgets |= (1 << WIDX_ZOOM_OUT);
|
||||
} else {
|
||||
w->disabled_widgets &= ~((1 << WIDX_ZOOM_IN) | (1 << WIDX_ZOOM_OUT));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066C8EC
|
||||
*/
|
||||
static void window_top_toolbar_paint()
|
||||
{
|
||||
int x, y, imgId;
|
||||
rct_window *w;
|
||||
rct_drawpixelinfo *dpi;
|
||||
|
||||
window_paint_get_registers(w, dpi);
|
||||
|
||||
window_draw_widgets(w, dpi);
|
||||
|
||||
// Draw staff button image (setting masks to the staff colours)
|
||||
if (window_top_toolbar_widgets[WIDX_STAFF].type != WWT_EMPTY) {
|
||||
x = w->x + window_top_toolbar_widgets[WIDX_STAFF].left;
|
||||
y = w->y + window_top_toolbar_widgets[WIDX_STAFF].top;
|
||||
imgId = 5627;
|
||||
if (widget_is_pressed(w, WIDX_STAFF))
|
||||
imgId++;
|
||||
imgId |= (RCT2_GLOBAL(RCT2_ADDRESS_HANDYMAN_COLOUR, uint8) << 19) | 0xA0000000 | (RCT2_GLOBAL(RCT2_ADDRESS_MECHANIC_COLOUR, uint8) << 24);
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
}
|
||||
|
||||
// Draw research button
|
||||
if (window_top_toolbar_widgets[WIDX_RESEARCH].type != WWT_EMPTY) {
|
||||
x = w->x + window_top_toolbar_widgets[WIDX_RESEARCH].left - 1;
|
||||
y = w->y + window_top_toolbar_widgets[WIDX_RESEARCH].top;
|
||||
imgId = SPR_TAB_FINANCES_RESEARCH_0;
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
}
|
||||
|
||||
// Draw finances button
|
||||
if (window_top_toolbar_widgets[WIDX_FINANCES].type != WWT_EMPTY) {
|
||||
x = w->x + window_top_toolbar_widgets[WIDX_FINANCES].left + 3;
|
||||
y = w->y + window_top_toolbar_widgets[WIDX_FINANCES].top + 1;
|
||||
imgId = SPR_FINANCE;
|
||||
gfx_draw_sprite(dpi, imgId, x, y, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x6e2cc6
|
||||
*/
|
||||
static void window_top_toolbar_scenery_tool_down(short x, short y, rct_window* w, short widgetIndex){
|
||||
RCT2_CALLPROC_EBPSAFE(0x006E2712);
|
||||
if (window_scenery_is_repaint_scenery_tool_on & 1){
|
||||
//6e3158
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
|
||||
int selected_tab = window_scenery_selected_scenery_by_tab[window_scenery_active_tab_index];
|
||||
if (selected_tab == -1) return;
|
||||
|
||||
sint16 grid_x, grid_y, grid_z;
|
||||
uint8 item_colour;
|
||||
uint8 model_type;
|
||||
int ebp = selected_tab;
|
||||
|
||||
{
|
||||
int eax = x, ebx = y, ecx = 0, edx = 0, esi = 0, edi = 0;
|
||||
RCT2_CALLFUNC_X(0x6E1F34, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
item_colour = edi;
|
||||
model_type = (ebx & 0xFF00) >> 8;
|
||||
grid_x = eax;
|
||||
grid_y = ecx;
|
||||
grid_z = edx;
|
||||
}
|
||||
|
||||
if (grid_x == 0x8000)return;
|
||||
|
||||
if (ebp >= 1024){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 1161;
|
||||
|
||||
// The return value will be banner id but the input is colour
|
||||
int banner_id = item_colour;
|
||||
|
||||
int ebx = (model_type << 8) | 1;
|
||||
|
||||
{
|
||||
int esi = 0, eax = grid_x, ecx = grid_y, edx = grid_z;
|
||||
game_do_command_p(GAME_COMMAND_50, &eax, &ebx, &ecx, &edx, &esi, &banner_id, &ebp);
|
||||
}
|
||||
|
||||
if (ebx == 0x80000000)return;
|
||||
|
||||
sound_play_panned(SOUND_PLACE_ITEM, 0x8001, RCT2_GLOBAL(0x009DEA5E, uint16), RCT2_GLOBAL(0x009DEA60, uint16), RCT2_GLOBAL(0x009DEA62, uint16));
|
||||
|
||||
window_banner_open(banner_id);
|
||||
}
|
||||
else if (ebp >= 768){
|
||||
//6e301c
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else if (ebp >= 512){
|
||||
//6e2f2e
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else if (ebp >= 256){
|
||||
//6e2eda
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
else{
|
||||
//6e2d2d
|
||||
RCT2_CALLPROC_X(0x6E2CC6, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CB25
|
||||
*/
|
||||
static void window_top_toolbar_tool_update()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
RCT2_CALLPROC_X(0x0068E213, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
RCT2_CALLPROC_X(0x00664280, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
RCT2_CALLPROC_X(0x006E6BDC, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
RCT2_CALLPROC_X(0x006E287B, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x0066CB73
|
||||
*/
|
||||
static void window_top_toolbar_tool_down(){
|
||||
short widgetIndex;
|
||||
rct_window* w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
if (!RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) & (1 << 0))
|
||||
break;
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 3438;
|
||||
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
0,
|
||||
GAME_COMMAND_CLEAR_SCENERY,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 12;
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16)&(1 << 0)){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 1387;
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_SURFACE, uint8) | (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_TERRAIN_EDGE, uint8) << 8),
|
||||
GAME_COMMAND_CHANGE_SURFACE_STYLE,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 3;
|
||||
}
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16)&(1 << 0)){
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 3;
|
||||
}
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
window_top_toolbar_scenery_tool_down(x, y, w, widgetIndex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CB4E
|
||||
*/
|
||||
static void window_top_toolbar_tool_drag()
|
||||
{
|
||||
short widgetIndex;
|
||||
rct_window *w;
|
||||
short x, y;
|
||||
|
||||
window_tool_get_registers(w, widgetIndex, x, y);
|
||||
|
||||
switch (widgetIndex){
|
||||
case WIDX_CLEAR_SCENERY:
|
||||
if (window_find_by_class(WC_ERROR) != NULL)
|
||||
break;
|
||||
|
||||
if (!RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) & (1 << 0))
|
||||
break;
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = 3438;
|
||||
|
||||
game_do_command(
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_X, uint16),
|
||||
1,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_A_Y, uint16),
|
||||
0,
|
||||
GAME_COMMAND_CLEAR_SCENERY,
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_X, uint16),
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_B_Y, uint16)
|
||||
);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TOOL, uint8) = 12;
|
||||
break;
|
||||
case WIDX_LAND:
|
||||
RCT2_CALLPROC_X(0x00664454, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_WATER:
|
||||
RCT2_CALLPROC_X(0x006E6D4B, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
case WIDX_SCENERY:
|
||||
RCT2_CALLPROC_X(0x006E2CBC, x, y, 0, widgetIndex, (int)w, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CDE4
|
||||
*/
|
||||
void top_toolbar_init_view_menu(rct_window* w, rct_widget* widget) {
|
||||
gDropdownItemsFormat[0] = 1156;
|
||||
gDropdownItemsFormat[1] = 1156;
|
||||
gDropdownItemsFormat[2] = 1156;
|
||||
gDropdownItemsFormat[3] = 0;
|
||||
gDropdownItemsFormat[4] = 1156;
|
||||
gDropdownItemsFormat[5] = 1156;
|
||||
gDropdownItemsFormat[6] = 1156;
|
||||
gDropdownItemsFormat[7] = 1156;
|
||||
gDropdownItemsFormat[8] = 0;
|
||||
gDropdownItemsFormat[9] = 1156;
|
||||
gDropdownItemsFormat[10] = 1156;
|
||||
gDropdownItemsFormat[11] = 1156;
|
||||
|
||||
gDropdownItemsArgs[0] = STR_UNDERGROUND_VIEW;
|
||||
gDropdownItemsArgs[1] = STR_REMOVE_BASE_LAND;
|
||||
gDropdownItemsArgs[2] = STR_REMOVE_VERTICAL_FACES;
|
||||
gDropdownItemsArgs[4] = STR_SEE_THROUGH_RIDES;
|
||||
gDropdownItemsArgs[5] = STR_SEE_THROUGH_SCENERY;
|
||||
gDropdownItemsArgs[6] = STR_INVISIBLE_SUPPORTS;
|
||||
gDropdownItemsArgs[7] = STR_INVISIBLE_PEOPLE;
|
||||
gDropdownItemsArgs[9] = STR_HEIGHT_MARKS_ON_LAND;
|
||||
gDropdownItemsArgs[10] = STR_HEIGHT_MARKS_ON_RIDE_TRACKS;
|
||||
gDropdownItemsArgs[11] = STR_HEIGHT_MARKS_ON_PATHS;
|
||||
|
||||
window_dropdown_show_text(
|
||||
w->x + widget->left,
|
||||
w->y + widget->top,
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[1] | 0x80,
|
||||
0,
|
||||
12
|
||||
);
|
||||
|
||||
// Set checkmarks
|
||||
rct_viewport* mainViewport = window_get_main()->viewport;
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE)
|
||||
gDropdownItemsChecked |= (1 << 0);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_HIDE_BASE)
|
||||
gDropdownItemsChecked |= (1 << 1);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_HIDE_VERTICAL)
|
||||
gDropdownItemsChecked |= (1 << 2);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_RIDES)
|
||||
gDropdownItemsChecked |= (1 << 4);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_SEETHROUGH_SCENERY)
|
||||
gDropdownItemsChecked |= (1 << 5);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_SUPPORTS)
|
||||
gDropdownItemsChecked |= (1 << 6);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_INVISIBLE_PEEPS)
|
||||
gDropdownItemsChecked |= (1 << 7);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_LAND_HEIGHTS)
|
||||
gDropdownItemsChecked |= (1 << 9);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_TRACK_HEIGHTS)
|
||||
gDropdownItemsChecked |= (1 << 10);
|
||||
if (mainViewport->flags & VIEWPORT_FLAG_PATH_HEIGHTS)
|
||||
gDropdownItemsChecked |= (1 << 11);
|
||||
|
||||
RCT2_GLOBAL(0x9DEBA2, uint16) = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CF8A
|
||||
*/
|
||||
void top_toolbar_view_menu_dropdown(short dropdownIndex) {
|
||||
if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16);
|
||||
rct_window* w = window_get_main();
|
||||
if (w) {
|
||||
switch (dropdownIndex) {
|
||||
case DDIDX_UNDERGROUND_INSIDE:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
break;
|
||||
case DDIDX_HIDE_BASE:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_HIDE_BASE;
|
||||
break;
|
||||
case DDIDX_HIDE_VERTICAL:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_HIDE_VERTICAL;
|
||||
break;
|
||||
case DDIDX_SEETHROUGH_RIDES:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_RIDES;
|
||||
break;
|
||||
case DDIDX_SEETHROUGH_SCENARY:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_SEETHROUGH_SCENERY;
|
||||
break;
|
||||
case DDIDX_INVISIBLE_SUPPORTS:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_SUPPORTS;
|
||||
break;
|
||||
case DDIDX_INVISIBLE_PEEPS:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_INVISIBLE_PEEPS;
|
||||
break;
|
||||
case DDIDX_LAND_HEIGHTS:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_LAND_HEIGHTS;
|
||||
break;
|
||||
case DDIDX_TRACK_HEIGHTS:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_TRACK_HEIGHTS;
|
||||
break;
|
||||
case DDIDX_PATH_HEIGHTS:
|
||||
w->viewport->flags ^= VIEWPORT_FLAG_PATH_HEIGHTS;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
window_invalidate(w);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CCE7
|
||||
*/
|
||||
void toggle_footpath_window()
|
||||
{
|
||||
if (window_find_by_class(WC_FOOTPATH) == NULL) {
|
||||
window_footpath_open();
|
||||
} else {
|
||||
tool_cancel();
|
||||
window_close_by_class(WC_FOOTPATH);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CD54
|
||||
*/
|
||||
void toggle_land_window(rct_window *topToolbar, int widgetIndex)
|
||||
{
|
||||
if ((RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) & INPUT_FLAG_TOOL_ACTIVE) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 7) {
|
||||
tool_cancel();
|
||||
} else {
|
||||
show_gridlines();
|
||||
tool_set(topToolbar, widgetIndex, 18);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) |= INPUT_FLAG_6;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = 1;
|
||||
window_land_open();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CD0C
|
||||
*/
|
||||
void toggle_clear_scenery_window(rct_window *topToolbar, int widgetIndex)
|
||||
{
|
||||
if ((RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) & INPUT_FLAG_TOOL_ACTIVE) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 16) {
|
||||
tool_cancel();
|
||||
} else {
|
||||
show_gridlines();
|
||||
tool_set(topToolbar, widgetIndex, 12);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) |= INPUT_FLAG_6;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = 2;
|
||||
window_clear_scenery_open();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066CD9C
|
||||
*/
|
||||
void toggle_water_window(rct_window *topToolbar, int widgetIndex)
|
||||
{
|
||||
if ((RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) & INPUT_FLAG_TOOL_ACTIVE) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 8) {
|
||||
tool_cancel();
|
||||
} else {
|
||||
show_gridlines();
|
||||
tool_set(topToolbar, widgetIndex, 19);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_FLAGS, uint32) |= INPUT_FLAG_6;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = 1;
|
||||
window_water_open();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user