1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Refactored mapgen window file

- Removed duplicated code
- Moved shared widgets to define
- Moved shared widget handling code to function
This commit is contained in:
Broxzier
2017-02-14 22:09:01 +01:00
committed by Michał Janiszewski
parent c6e3ecd5ed
commit 6edea503b2

View File

@@ -45,11 +45,11 @@ enum {
WIDX_TAB_3,
WIDX_TAB_4,
WIDX_GENERATE,
TAB_BEGIN,
WIDX_MAP_SIZE = TAB_BEGIN,
WIDX_MAP_GENERATE = TAB_BEGIN,
WIDX_MAP_SIZE,
WIDX_MAP_SIZE_UP,
WIDX_MAP_SIZE_DOWN,
WIDX_BASE_HEIGHT,
@@ -61,10 +61,12 @@ enum {
WIDX_FLOOR_TEXTURE,
WIDX_WALL_TEXTURE,
WIDX_RANDOM_TERRAIN = TAB_BEGIN,
WIDX_PLACE_TREES,
WIDX_RANDOM_GENERATE = TAB_BEGIN,
WIDX_RANDOM_TERRAIN,
WIDX_RANDOM_PLACE_TREES,
WIDX_SIMPLEX_LABEL = TAB_BEGIN,
WIDX_SIMPLEX_GENERATE = TAB_BEGIN,
WIDX_SIMPLEX_LABEL,
WIDX_SIMPLEX_LOW,
WIDX_SIMPLEX_LOW_UP,
WIDX_SIMPLEX_LOW_DOWN,
@@ -86,7 +88,8 @@ enum {
WIDX_SIMPLEX_FLOOR_TEXTURE,
WIDX_SIMPLEX_WALL_TEXTURE,
WIDX_HEIGHTMAP_SMOOTH_HEIGHTMAP = TAB_BEGIN,
WIDX_HEIGHTMAP_SELECT = TAB_BEGIN,
WIDX_HEIGHTMAP_SMOOTH_HEIGHTMAP,
WIDX_HEIGHTMAP_STRENGTH,
WIDX_HEIGHTMAP_STRENGTH_UP,
WIDX_HEIGHTMAP_STRENGTH_DOWN,
@@ -105,17 +108,23 @@ enum {
#pragma region Widgets
static rct_widget BaseWidgets[] = {
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 298, 1, 14, STR_MAPGEN_WINDOW_TITLE, 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, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 96, 126, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
#define WW 300
#define WH 200
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, STR_MAPGEN_ACTION_GENERATE, STR_NONE },
#define SHARED_WIDGETS \
{ WWT_FRAME, 0, 0, WW - 1, 0, WH - 1, 0xFFFFFFFF, STR_NONE }, /* WIDX_BACKGROUND */ \
{ WWT_CAPTION, 0, 1, WW - 2, 1, 14, STR_MAPGEN_WINDOW_TITLE, STR_WINDOW_TITLE_TIP }, /* WIDX_TITLE */ \
{ WWT_CLOSEBOX, 0, WW - 13, WW - 3, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, /* WIDX_CLOSE */ \
{ WWT_RESIZE, 1, 0, 299, 43, WH - 2, 0xFFFFFFFF, STR_NONE }, /* WIDX_PAGE_BACKGROUND */ \
{ WWT_TAB, 1, 3, 33, 17, 43, 0x20000000 | SPR_TAB, STR_NONE }, /* WIDX_TAB_1 */ \
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_NONE }, /* WIDX_TAB_2 */ \
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_NONE }, /* WIDX_TAB_3 */ \
{ WWT_TAB, 1, 96, 126, 17, 43, 0x20000000 | SPR_TAB, STR_NONE } /* WIDX_TAB_4 */
static rct_widget MapWidgets[] = {
SHARED_WIDGETS,
{ WWT_DROPDOWN_BUTTON, 1, WW - 95, WW - 6, WH - 17, WH - 6, STR_MAPGEN_ACTION_GENERATE, 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 },
@@ -132,16 +141,9 @@ static rct_widget BaseWidgets[] = {
};
static rct_widget RandomWidgets[] = {
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 298, 1, 14, STR_MAPGEN_WINDOW_TITLE, 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, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 96, 126, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
SHARED_WIDGETS,
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, STR_MAPGEN_ACTION_GENERATE, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, WW - 95, WW - 6, WH - 17, WH - 6, STR_MAPGEN_ACTION_GENERATE, STR_NONE },
{ WWT_CHECKBOX, 1, 4, 198, 52, 63, STR_MAPGEN_OPTION_RANDOM_TERRAIN, STR_NONE },
{ WWT_CHECKBOX, 1, 4, 198, 70, 81, STR_MAPGEN_OPTION_PLACE_TREES, STR_NONE },
@@ -149,16 +151,9 @@ static rct_widget RandomWidgets[] = {
};
static rct_widget SimplexWidgets[] = {
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 298, 1, 14, STR_MAPGEN_WINDOW_TITLE, 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, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 96, 126, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
SHARED_WIDGETS,
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, STR_MAPGEN_ACTION_GENERATE, STR_NONE },
{ WWT_DROPDOWN_BUTTON, 1, WW - 95, WW - 6, WH - 17, WH - 6, STR_MAPGEN_ACTION_GENERATE, STR_NONE },
{ WWT_12, 1, 4, 198, 52, 63, STR_MAPGEN_SIMPLEX_NOISE, STR_NONE },
@@ -193,16 +188,9 @@ static rct_widget SimplexWidgets[] = {
};
static rct_widget HeightmapWidgets[] = {
{ WWT_FRAME, 0, 0, 299, 0, 195, 0xFFFFFFFF, STR_NONE },
{ WWT_CAPTION, 0, 1, 298, 1, 14, STR_MAPGEN_WINDOW_TITLE, 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, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 34, 64, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 65, 95, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
{ WWT_TAB, 1, 96, 126, 17, 43, 0x20000000 | SPR_TAB, STR_NONE },
SHARED_WIDGETS,
{ WWT_DROPDOWN_BUTTON, 1, 104, 198, 52, 63, STR_MAPGEN_ACTION_GENERATE, STR_NONE }, // WIDX_GENERATE
{ WWT_DROPDOWN_BUTTON, 1, WW - 95, WW - 6, WH - 17, WH - 6, STR_MAPGEN_ACTION_GENERATE, STR_NONE }, // WIDX_HEIGHTMAP_SELECT
{ WWT_CHECKBOX, 1, 4, 103, 52, 63, STR_MAPGEN_SMOOTH_HEIGHTMAP,STR_NONE }, // WIDX_HEIGHTMAP_SMOOTH_HEIGHTMAP
{ WWT_SPINNER, 1, 104, 198, 70, 81, STR_NONE, STR_NONE }, // WIDX_HEIGHTMAP_STRENGTH
@@ -229,7 +217,7 @@ static rct_widget HeightmapWidgets[] = {
};
static rct_widget *PageWidgets[WINDOW_MAPGEN_PAGE_COUNT] = {
BaseWidgets,
MapWidgets,
RandomWidgets,
SimplexWidgets,
HeightmapWidgets
@@ -239,6 +227,8 @@ static rct_widget *PageWidgets[WINDOW_MAPGEN_PAGE_COUNT] = {
#pragma region Events
static void window_mapgen_shared_mouseup(rct_window *w, sint32 widgetIndex);
static void window_mapgen_base_mouseup(rct_window *w, sint32 widgetIndex);
static void window_mapgen_base_mousedown(sint32 widgetIndex, rct_window *w, rct_widget* widget);
static void window_mapgen_base_dropdown(rct_window *w, sint32 widgetIndex, sint32 dropdownIndex);
@@ -406,7 +396,7 @@ static uint64 PageEnabledWidgets[WINDOW_MAPGEN_PAGE_COUNT] = {
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_GENERATE) |
(1ULL << WIDX_MAP_GENERATE) |
(1ULL << WIDX_MAP_SIZE) |
(1ULL << WIDX_MAP_SIZE_UP) |
(1ULL << WIDX_MAP_SIZE_DOWN) |
@@ -424,16 +414,16 @@ static uint64 PageEnabledWidgets[WINDOW_MAPGEN_PAGE_COUNT] = {
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_GENERATE) |
(1ULL << WIDX_RANDOM_GENERATE) |
(1ULL << WIDX_RANDOM_TERRAIN) |
(1ULL << WIDX_PLACE_TREES),
(1ULL << WIDX_RANDOM_PLACE_TREES),
(1ULL << WIDX_CLOSE) |
(1ULL << WIDX_TAB_1) |
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_GENERATE) |
(1ULL << WIDX_SIMPLEX_GENERATE) |
(1ULL << WIDX_SIMPLEX_LABEL) |
(1ULL << WIDX_SIMPLEX_LOW) |
(1ULL << WIDX_SIMPLEX_LOW_UP) |
@@ -461,7 +451,7 @@ static uint64 PageEnabledWidgets[WINDOW_MAPGEN_PAGE_COUNT] = {
(1ULL << WIDX_TAB_2) |
(1ULL << WIDX_TAB_3) |
(1ULL << WIDX_TAB_4) |
(1ULL << WIDX_GENERATE) |
(1ULL << WIDX_HEIGHTMAP_SELECT) |
(1ULL << WIDX_HEIGHTMAP_SMOOTH_HEIGHTMAP) |
(1ULL << WIDX_HEIGHTMAP_STRENGTH) |
(1ULL << WIDX_HEIGHTMAP_STRENGTH_UP) |
@@ -527,7 +517,6 @@ static const sint32 TabAnimationDivisor[WINDOW_MAPGEN_PAGE_COUNT] = {
static const sint32 TabAnimationFrames[WINDOW_MAPGEN_PAGE_COUNT] = {
1, 1, 1, 1
};
static const sint32 TabAnimationLoops[WINDOW_MAPGEN_PAGE_COUNT] = {
16, 16, 16, 0
};
@@ -585,9 +574,9 @@ rct_window *window_mapgen_open()
w = window_bring_to_front_by_class(WC_MAPGEN);
if (w == NULL) {
w = window_create_centred(
300,
200,
PageEvents[0],
WW,
WH,
PageEvents[WINDOW_MAPGEN_PAGE_BASE],
WC_MAPGEN,
WF_10
);
@@ -601,20 +590,17 @@ rct_window *window_mapgen_open()
w->enabled_widgets = PageEnabledWidgets[WINDOW_MAPGEN_PAGE_BASE];
w->hold_down_widgets = HoldDownWidgets[WINDOW_MAPGEN_PAGE_BASE];
w->event_handlers = PageEvents[WINDOW_MAPGEN_PAGE_BASE];
w->pressed_widgets = 0;
w->pressed_widgets = PressedWidgets[WINDOW_MAPGEN_PAGE_BASE];
w->disabled_widgets = 0;
window_init_scroll_widgets(w);
return w;
}
#pragma region Base page
static void window_mapgen_base_mouseup(rct_window *w, sint32 widgetIndex)
static void window_mapgen_shared_mouseup(rct_window *w, sint32 widgetIndex)
{
mapgen_settings mapgenSettings;
switch (widgetIndex) {
switch (widgetIndex)
{
case WIDX_CLOSE:
window_close(w);
break;
@@ -624,7 +610,19 @@ static void window_mapgen_base_mouseup(rct_window *w, sint32 widgetIndex)
case WIDX_TAB_4:
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_GENERATE:
}
}
#pragma region Base page
static void window_mapgen_base_mouseup(rct_window *w, sint32 widgetIndex)
{
window_mapgen_shared_mouseup(w, widgetIndex);
mapgen_settings mapgenSettings;
switch (widgetIndex) {
case WIDX_MAP_GENERATE:
mapgenSettings.mapSize = _mapSize;
mapgenSettings.height = _baseHeight + 2;
mapgenSettings.water_level = _waterLevel + 2;
@@ -815,7 +813,6 @@ static void window_mapgen_base_invalidate(rct_window *w)
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(rct_window *w, rct_drawpixelinfo *dpi)
@@ -847,19 +844,12 @@ static void window_mapgen_base_paint(rct_window *w, rct_drawpixelinfo *dpi)
static void window_mapgen_random_mouseup(rct_window *w, sint32 widgetIndex)
{
window_mapgen_shared_mouseup(w, widgetIndex);
mapgen_settings mapgenSettings;
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_GENERATE:
case WIDX_RANDOM_GENERATE:
mapgenSettings.mapSize = _mapSize;
mapgenSettings.height = _baseHeight + 2;
mapgenSettings.water_level = _waterLevel + 2;
@@ -878,7 +868,7 @@ static void window_mapgen_random_mouseup(rct_window *w, sint32 widgetIndex)
case WIDX_RANDOM_TERRAIN:
_randomTerrrain ^= 1;
break;
case WIDX_PLACE_TREES:
case WIDX_RANDOM_PLACE_TREES:
_placeTrees ^= 1;
break;
}
@@ -910,10 +900,9 @@ static void window_mapgen_random_invalidate(rct_window *w)
if (_randomTerrrain)
w->pressed_widgets |= 1 << WIDX_RANDOM_TERRAIN;
if (_placeTrees)
w->pressed_widgets |= 1 << WIDX_PLACE_TREES;
w->pressed_widgets |= 1 << WIDX_RANDOM_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)
@@ -928,25 +917,18 @@ static void window_mapgen_random_paint(rct_window *w, rct_drawpixelinfo *dpi)
static void window_mapgen_simplex_mouseup(rct_window *w, sint32 widgetIndex)
{
window_mapgen_shared_mouseup(w, widgetIndex);
mapgen_settings mapgenSettings;
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_SIMPLEX_MAP_SIZE:
TextInputDescriptionArgs[0] = MINIMUM_MAP_SIZE_PRACTICAL;
TextInputDescriptionArgs[1] = MAXIMUM_MAP_SIZE_PRACTICAL;
// Practical map size is 2 lower than the technical map size
window_text_input_open(w, WIDX_SIMPLEX_MAP_SIZE, STR_MAP_SIZE_2, STR_ENTER_MAP_SIZE, STR_FORMAT_INTEGER, _mapSize - 2, 4);
break;
case WIDX_GENERATE:
case WIDX_SIMPLEX_GENERATE:
mapgenSettings.mapSize = _mapSize;
mapgenSettings.height = _baseHeight;
@@ -1121,7 +1103,6 @@ static void window_mapgen_simplex_invalidate(rct_window *w)
w->widgets[WIDX_SIMPLEX_WALL_TEXTURE].image = SPR_WALL_TEXTURE_ROCK + _wallTexture;
window_mapgen_set_pressed_tab(w);
window_mapgen_anchor_border_widgets(w);
}
static void window_mapgen_simplex_paint(rct_window *w, rct_drawpixelinfo *dpi)
@@ -1198,22 +1179,20 @@ static void window_mapgen_heightmap_mousedown(sint32 widgetIndex, rct_window *w,
static void window_mapgen_heightmap_mouseup(rct_window *w, sint32 widgetIndex)
{
window_mapgen_shared_mouseup(w, widgetIndex);
switch (widgetIndex)
{
// The close and tabs return, so that the map doesn't get regenerated
case WIDX_CLOSE:
window_close(w);
return;
case WIDX_TAB_1:
case WIDX_TAB_2:
case WIDX_TAB_3:
case WIDX_TAB_4:
window_mapgen_set_page(w, widgetIndex - WIDX_TAB_1);
return;
return; // Don't generate map
// Page widgets
case WIDX_GENERATE:
// Handled at the end of this function
case WIDX_HEIGHTMAP_SELECT:
// TODO: Open image select window
break;
case WIDX_HEIGHTMAP_SMOOTH_HEIGHTMAP:
_heightmapSmoothMap = !_heightmapSmoothMap;
@@ -1263,7 +1242,6 @@ static void window_mapgen_heightmap_invalidate(rct_window *w)
widget_set_checkbox_value(w, WIDX_HEIGHTMAP_NORMALIZE, _heightmapNormalize);
window_mapgen_set_pressed_tab(w);
window_mapgen_anchor_border_widgets(w);
}
static void window_mapgen_heightmap_paint(rct_window *w, rct_drawpixelinfo *dpi)
@@ -1324,25 +1302,6 @@ static void window_mapgen_set_pressed_tab(rct_window *w)
w->pressed_widgets |= 1LL << (WIDX_TAB_1 + w->page);
}
static void window_mapgen_anchor_border_widgets(rct_window *w)
{
sint32 width = w->widgets[WIDX_GENERATE].right - w->widgets[WIDX_GENERATE].left;
sint32 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 - 1;
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, sint32 page, sint32 spriteIndex)
{
sint32 widgetIndex = WIDX_TAB_1 + page;
@@ -1362,7 +1321,7 @@ static void window_mapgen_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
window_mapgen_draw_tab_image(dpi, w, WINDOW_MAPGEN_PAGE_BASE, SPR_G2_TAB_LAND);
window_mapgen_draw_tab_image(dpi, w, WINDOW_MAPGEN_PAGE_RANDOM, SPR_G2_TAB_TREE);
window_mapgen_draw_tab_image(dpi, w, WINDOW_MAPGEN_PAGE_SIMPLEX, SPR_G2_TAB_PENCIL);
window_mapgen_draw_tab_image(dpi, w, WINDOW_MAPGEN_PAGE_SIMPLEX, SPR_G2_TAB_NEWS);
window_mapgen_draw_tab_image(dpi, w, WINDOW_MAPGEN_PAGE_HEIGHTMAP, SPR_TAB_GRAPH_0);
}
#pragma endregion