From cda1888ebc5dd1d408d66a1ab4ceeddced7b104c Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sat, 23 May 2020 10:22:15 +0900 Subject: [PATCH] Merge upstream changes: Prevent menu selection when cursor is out of window This was introduced in System3-sdl2 71728db only for nact_sys3. TOTO took this change and expanded for nact_sys1 and nact_sys2 as well. --- src/sys/nact_sys1.cpp | 24 ++++++++++++++++++------ src/sys/nact_sys2.cpp | 24 ++++++++++++++++++------ src/sys/nact_sys3.cpp | 4 +--- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index 8ea6f2a..523401d 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -352,7 +352,7 @@ void NACT_Sys1::cmd_open_menu() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -388,6 +388,9 @@ void NACT_Sys1::cmd_open_menu() if(sx <= mx && mx <= ex && 0 <= index && index < menu_index) { current_index = index; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -400,7 +403,8 @@ void NACT_Sys1::cmd_open_menu() current_index = menu_index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -544,7 +548,7 @@ top2: set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -580,6 +584,9 @@ top2: if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -592,7 +599,8 @@ top2: current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -732,7 +740,7 @@ top2: set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -768,6 +776,9 @@ top2: if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -780,7 +791,8 @@ top2: current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index 3739e7d..30bd3e8 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -359,7 +359,7 @@ void NACT_Sys2::cmd_open_menu() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -395,6 +395,9 @@ void NACT_Sys2::cmd_open_menu() if(sx <= mx && mx <= ex && 0 <= index && index < menu_index) { current_index = index; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -407,7 +410,8 @@ void NACT_Sys2::cmd_open_menu() current_index = menu_index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -516,7 +520,7 @@ void NACT_Sys2::cmd_open_verb() set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -552,6 +556,9 @@ void NACT_Sys2::cmd_open_verb() if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -564,7 +571,8 @@ void NACT_Sys2::cmd_open_verb() current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; @@ -660,7 +668,7 @@ void NACT_Sys2::cmd_open_obj(int verb) set_cursor(mx, my); // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) { @@ -696,6 +704,9 @@ void NACT_Sys2::cmd_open_obj(int verb) if(sx <= mx && mx <= ex && 0 <= mindex && mindex < index) { current_index = mindex; ags->redraw_menu_window(menu_window, current_index); + selectable = true; + } else { + selectable = false; } } else if(val == 1 || val == 2 || val == 4 || val == 8) { if(val == 1) { @@ -708,7 +719,8 @@ void NACT_Sys2::cmd_open_obj(int verb) current_index = index - 1; } ags->redraw_menu_window(menu_window, current_index); - } else if(val == 16) { + selectable = true; + } else if(val == 16 && selectable) { break; } else if(val == 32) { current_index = -1; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index 4013d46..c67c621 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -153,10 +153,8 @@ int NACT_Sys3::menu_select(int num_items) int height = ags->menu_font_size + 4; set_cursor(mx, my); - bool selectable = true; - // メニュー選択 - for(;;) { + for(bool selectable = true;;) { // 入力待機 int val = 0, current_mx = mx, current_my = my; for(;;) {