From 5109224ba0181ce9ff6d1e9c008103974ddc5f02 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 12:45:47 +0200 Subject: [PATCH 1/6] Add submenu and anti-clockwise rotation --- data/language/english_uk.txt | 2 ++ src/localisation/string_ids.h | 3 +++ src/windows/top_toolbar.c | 47 ++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 7a0c6f46b7..e15b2be23c 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3788,3 +3788,5 @@ STR_5451 :Open cheats window STR_5452 :Toggle visibility of toolbars STR_5453 :Select another ride STR_5454 :Uncap FPS +STR_5455 :Rotate clockwise +STR_5456 :Rotate anti-clockwise diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 768315e2a9..459277cb3b 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -83,6 +83,9 @@ enum { STR_PAUSE_GAME_TIP = 833, STR_DISC_AND_GAME_OPTIONS_TIP = 834, + STR_ROTATE_CLOCKWISE = 5455, + STR_ROTATE_ANTI_CLOCKWISE = 5456, + STR_ABOUT = 847, STR_ROLLERCOASTER_TYCOON_2 = 848, STR_VERSION_X = 849, diff --git a/src/windows/top_toolbar.c b/src/windows/top_toolbar.c index 45dce4a486..2380854f1a 100644 --- a/src/windows/top_toolbar.c +++ b/src/windows/top_toolbar.c @@ -218,6 +218,8 @@ void top_toolbar_init_view_menu(rct_window *window, rct_widget *widget); void top_toolbar_view_menu_dropdown(short dropdownIndex); void top_toolbar_init_fastforward_menu(rct_window *window, rct_widget *widget); void top_toolbar_fastforward_menu_dropdown(short dropdownIndex); +void top_toolbar_init_rotate_menu(rct_window *window, rct_widget *widget); +void top_toolbar_rotate_menu_dropdown(short dropdownIndex); void top_toolbar_init_debug_menu(rct_window *window, rct_widget *widget); void top_toolbar_debug_menu_dropdown(short dropdownIndex); @@ -274,10 +276,10 @@ static void window_top_toolbar_mouseup() if ((mainWindow = window_get_main()) != NULL) window_zoom_in(mainWindow); break; - case WIDX_ROTATE: + /*case WIDX_ROTATE: if ((mainWindow = window_get_main()) != NULL) window_rotate_camera(mainWindow); - break; + break;*/ case WIDX_CLEAR_SCENERY: toggle_clear_scenery_window(w, WIDX_CLEAR_SCENERY); break; @@ -422,6 +424,9 @@ static void window_top_toolbar_mousedown(int widgetIndex, rct_window*w, rct_widg case WIDX_FASTFORWARD: top_toolbar_init_fastforward_menu(w, widget); break; + case WIDX_ROTATE: + top_toolbar_init_rotate_menu(w, widget); + break; case WIDX_DEBUG: top_toolbar_init_debug_menu(w, widget); break; @@ -506,6 +511,9 @@ static void window_top_toolbar_dropdown() case WIDX_FASTFORWARD: top_toolbar_fastforward_menu_dropdown(dropdownIndex); break; + case WIDX_ROTATE: + top_toolbar_rotate_menu_dropdown(dropdownIndex); + break; case WIDX_DEBUG: top_toolbar_debug_menu_dropdown(dropdownIndex); break; @@ -2792,7 +2800,7 @@ void top_toolbar_init_fastforward_menu(rct_window* w, rct_widget* widget) { gDropdownItemsArgs[1] = 5143; gDropdownItemsArgs[2] = 5144; gDropdownItemsArgs[3] = 5145; - + window_dropdown_show_text( w->x + widget->left, @@ -2828,6 +2836,39 @@ void top_toolbar_fastforward_menu_dropdown(short dropdownIndex) { } } +void top_toolbar_init_rotate_menu(rct_window* w, rct_widget* widget) { + gDropdownItemsFormat[0] = STR_ROTATE_CLOCKWISE; + gDropdownItemsFormat[1] = STR_ROTATE_ANTI_CLOCKWISE; + + 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; +} + +void top_toolbar_rotate_menu_dropdown(short dropdownIndex) { + if (dropdownIndex == -1) dropdownIndex = RCT2_GLOBAL(0x9DEBA2, uint16); + rct_window* w = window_get_main(); + if (w) { + if (dropdownIndex == 0) { + window_rotate_camera(w); + window_invalidate(w); + } + else if (dropdownIndex == 1){ + window_rotate_camera(w); + window_rotate_camera(w); + window_rotate_camera(w); + window_invalidate(w); + } + } +} + void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget) { gDropdownItemsFormat[0] = STR_DEBUG_DROPDOWN_CONSOLE; gDropdownItemsFormat[1] = STR_DEBUG_DROPDOWN_TILE_INSPECTOR; From 8ec0024a4d77c10a449dffebcd88d370c1fcd506 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 12:46:43 +0200 Subject: [PATCH 2/6] Changed strings for #1495 --- data/language/english_uk.txt | 4 ++-- src/localisation/string_ids.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index e15b2be23c..7d2341055d 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3788,5 +3788,5 @@ STR_5451 :Open cheats window STR_5452 :Toggle visibility of toolbars STR_5453 :Select another ride STR_5454 :Uncap FPS -STR_5455 :Rotate clockwise -STR_5456 :Rotate anti-clockwise +STR_5458 :Rotate clockwise +STR_5459 :Rotate anti-clockwise diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 459277cb3b..7424d11e93 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -83,8 +83,8 @@ enum { STR_PAUSE_GAME_TIP = 833, STR_DISC_AND_GAME_OPTIONS_TIP = 834, - STR_ROTATE_CLOCKWISE = 5455, - STR_ROTATE_ANTI_CLOCKWISE = 5456, + STR_ROTATE_CLOCKWISE = 5458, + STR_ROTATE_ANTI_CLOCKWISE = 5459, STR_ABOUT = 847, STR_ROLLERCOASTER_TYCOON_2 = 848, From 624a402fa9115c2af5bdae0584ae3e3edf3357a6 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 12:52:18 +0200 Subject: [PATCH 3/6] Removed comment --- src/windows/top_toolbar.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/windows/top_toolbar.c b/src/windows/top_toolbar.c index 2380854f1a..f94a5c3ce9 100644 --- a/src/windows/top_toolbar.c +++ b/src/windows/top_toolbar.c @@ -276,10 +276,6 @@ static void window_top_toolbar_mouseup() 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; From bec1a52bba590f5bc83b4dcb44d0da08373e7ea4 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 13:05:21 +0200 Subject: [PATCH 4/6] Changed function and occurences It doesnt have to rotate three times to get an anti-clockwise return. --- src/interface/window.c | 7 ++++--- src/interface/window.h | 2 +- src/title.c | 2 +- src/windows/top_toolbar.c | 6 ++---- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/interface/window.c b/src/interface/window.c index a80ffa2238..b4d4700765 100644 --- a/src/interface/window.c +++ b/src/interface/window.c @@ -1354,7 +1354,7 @@ void sub_688956() * * rct2: 0x0068881A */ -void window_rotate_camera(rct_window *w) +void window_rotate_camera(rct_window *w, int wise) { rct_viewport *viewport = w->viewport; if (viewport == NULL) @@ -1375,11 +1375,12 @@ void window_rotate_camera(rct_window *w) y = (viewport->view_height >> 1) + viewport->view_y; sub_689174(&x, &y, &z); - } else { + } + else { z = map_element_height(x, y); } - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) + 1) % 4; + RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) + wise) % 4; int new_x, new_y; center_2d_coordinates(x, y, z, &new_x, &new_y, viewport); diff --git a/src/interface/window.h b/src/interface/window.h index 6093d52ee1..8b5aacee16 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -496,7 +496,7 @@ rct_window *window_get_main(); void window_scroll_to_viewport(rct_window *w); void window_scroll_to_location(rct_window *w, int x, int y, int z); -void window_rotate_camera(rct_window *w); +void window_rotate_camera(rct_window *w, int wise); void window_zoom_set(rct_window *w, int zoomLevel); void window_zoom_in(rct_window *w); void window_zoom_out(rct_window *w); diff --git a/src/title.c b/src/title.c index ad472457df..6fe269bd0b 100644 --- a/src/title.c +++ b/src/title.c @@ -300,7 +300,7 @@ static void title_do_next_script_opcode() w = window_get_main(); if (w != NULL) for (i = 0; i < script_operand; i++) - window_rotate_camera(w); + window_rotate_camera(w, 1); break; case TITLE_SCRIPT_ZOOM: script_operand = (*_currentScript++); diff --git a/src/windows/top_toolbar.c b/src/windows/top_toolbar.c index f94a5c3ce9..a880b07206 100644 --- a/src/windows/top_toolbar.c +++ b/src/windows/top_toolbar.c @@ -2853,13 +2853,11 @@ void top_toolbar_rotate_menu_dropdown(short dropdownIndex) { rct_window* w = window_get_main(); if (w) { if (dropdownIndex == 0) { - window_rotate_camera(w); + window_rotate_camera(w, 1); window_invalidate(w); } else if (dropdownIndex == 1){ - window_rotate_camera(w); - window_rotate_camera(w); - window_rotate_camera(w); + window_rotate_camera(w, -1); window_invalidate(w); } } From dd24011b5d8a6f627d46b78ecd06bef0a5dc9de4 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 13:13:37 +0200 Subject: [PATCH 5/6] Fixed ' to rotate' Now uses less double code --- src/interface/keyboard_shortcut.c | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/interface/keyboard_shortcut.c b/src/interface/keyboard_shortcut.c index d0382709c7..3c2e5d4ad3 100644 --- a/src/interface/keyboard_shortcut.c +++ b/src/interface/keyboard_shortcut.c @@ -157,17 +157,8 @@ static void shortcut_zoom_view_in() static void shortcut_rotate_view() { - rct_window *window; - - if (!(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR) || RCT2_GLOBAL(0x0141F570, uint8) == 1) { - if (!(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER)) { - window = window_find_by_class(WC_TOP_TOOLBAR); - if (window != NULL) { - window_invalidate(window); - window_event_mouse_up_call(window, 4); - } - } - } + rct_window* w = window_get_main(); + window_rotate_camera(w, 1); } static void shortcut_rotate_construction_object() From 15a4c958eb74405d809c8bf491de5bffa0a8bde0 Mon Sep 17 00:00:00 2001 From: Runelaenen Date: Thu, 9 Jul 2015 13:46:02 +0200 Subject: [PATCH 6/6] Changed 'wise' to 'direction' --- src/interface/window.c | 7 +++++-- src/interface/window.h | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/interface/window.c b/src/interface/window.c index b4d4700765..06ee517216 100644 --- a/src/interface/window.c +++ b/src/interface/window.c @@ -1353,8 +1353,11 @@ void sub_688956() /** * * rct2: 0x0068881A + * direction can be used to alter the camera rotation: + * 1: clockwise + * -1: anti-clockwise */ -void window_rotate_camera(rct_window *w, int wise) +void window_rotate_camera(rct_window *w, int direction) { rct_viewport *viewport = w->viewport; if (viewport == NULL) @@ -1380,7 +1383,7 @@ void window_rotate_camera(rct_window *w, int wise) z = map_element_height(x, y); } - RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) + wise) % 4; + RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) = (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32) + direction) % 4; int new_x, new_y; center_2d_coordinates(x, y, z, &new_x, &new_y, viewport); diff --git a/src/interface/window.h b/src/interface/window.h index 8b5aacee16..6de725f398 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -496,7 +496,7 @@ rct_window *window_get_main(); void window_scroll_to_viewport(rct_window *w); void window_scroll_to_location(rct_window *w, int x, int y, int z); -void window_rotate_camera(rct_window *w, int wise); +void window_rotate_camera(rct_window *w, int direction); void window_zoom_set(rct_window *w, int zoomLevel); void window_zoom_in(rct_window *w); void window_zoom_out(rct_window *w);