diff --git a/src/sys/nact.cpp b/src/sys/nact.cpp index fb11295..8ff84f5 100644 --- a/src/sys/nact.cpp +++ b/src/sys/nact.cpp @@ -423,14 +423,8 @@ void NACT::cmd_a() sys_sleep(16); } sys_sleep(30); - while (!msgskip->skipping()) { - if(terminate) { - return; - } - if(!(get_key() & 0x18)) { - break; - } - sys_sleep(16); + if (!msgskip->skipping()) { + wait_key_release(0x18); } // ウィンドウ更新 @@ -653,15 +647,7 @@ int NACT::menu_select(int num_items) sys_sleep(16); } if(val) { - for(;;) { - if(terminate) { - return -1; - } - if(!get_key()) { - break; - } - sys_sleep(16); - } + wait_key_release(); } if(val == 0) { @@ -729,16 +715,7 @@ void NACT::wait_after_open_menu() } } - // クリック中の間は待機 - for(;;) { - if(terminate) { - return; - } - if(!get_key()) { - break; - } - sys_sleep(10); - } + wait_key_release(); } void NACT::sys_sleep(int ms) { diff --git a/src/sys/nact.h b/src/sys/nact.h index d73fd0d..cc159bb 100644 --- a/src/sys/nact.h +++ b/src/sys/nact.h @@ -147,6 +147,8 @@ protected: void wait_after_open_menu(); uint8 get_key(); + void wait_key_release(uint8_t mask = 0xff); + void get_cursor(int* x, int* y); void set_cursor(int x, int y); int get_wheel(); diff --git a/src/sys/nact_input.cpp b/src/sys/nact_input.cpp index 8c95d7c..154e74a 100644 --- a/src/sys/nact_input.cpp +++ b/src/sys/nact_input.cpp @@ -143,6 +143,11 @@ uint8 NACT::get_key() return val; } +void NACT::wait_key_release(uint8_t mask) { + while (!terminate && (get_key() & mask)) + sys_sleep(16); +} + void NACT::get_cursor(int* x, int* y) { pump_events(); diff --git a/src/sys/nact_sys1.cpp b/src/sys/nact_sys1.cpp index ff905ae..6bf9768 100644 --- a/src/sys/nact_sys1.cpp +++ b/src/sys/nact_sys1.cpp @@ -744,15 +744,7 @@ public: sys_sleep(16); } sys_sleep(100); - for (;;) { - if (terminate) { - return; - } - if (!(get_key() & 0x18)) { - break; - } - sys_sleep(16); - } + wait_key_release(0x18); ags->clear_text_window(text_window, true); break; case 2: diff --git a/src/sys/nact_sys2.cpp b/src/sys/nact_sys2.cpp index c5407dc..c3b656a 100644 --- a/src/sys/nact_sys2.cpp +++ b/src/sys/nact_sys2.cpp @@ -805,15 +805,7 @@ void NACT_Sys2::cmd_y() sys_sleep(16); } sys_sleep(100); - for(;;) { - if(terminate) { - return; - } - if(!(get_key() & 0x18)) { - break; - } - sys_sleep(16); - } + wait_key_release(0x18); break; case 254: RND = 0; diff --git a/src/sys/nact_sys3.cpp b/src/sys/nact_sys3.cpp index d160f69..e727e8a 100644 --- a/src/sys/nact_sys3.cpp +++ b/src/sys/nact_sys3.cpp @@ -452,15 +452,7 @@ void NACT_Sys3::cmd_k() // キーが離されるまで待機 if(cmd != 1) { sys_sleep(100); - for(;;) { - if(terminate) { - return; - } - if(!(val = get_key())) { - break; - } - sys_sleep(16); - } + wait_key_release(); } // K0の場合は改行 @@ -884,16 +876,7 @@ void NACT_Sys3::exec_y(int cmd, int param) M_X = (x < 0) ? x : (x > 639) ? 639 : x; M_Y = (y < 0) ? 0 : (y > 479) ? 479 : y; if((RND = get_key())) { - // キー入力があった場合は、離すまで待機 - for(;;) { - if(terminate) { - return; - } - if(!get_key()) { - break; - } - sys_sleep(16); - } + wait_key_release(); } } else if(param == 3) { set_cursor(M_X, M_Y); @@ -1310,9 +1293,7 @@ bool NACT_Sys3::k3_hack(const K3HackInfo* info_table) } int key = get_key(); if (key) { - // Wait for key release - while (!terminate && get_key()) - sys_sleep(16); + wait_key_release(); RND = key; break; } @@ -1442,11 +1423,6 @@ private: uint16_t grid_select_data[63] = {}; uint16_t grid_prev_selection = 0; - void wait_key_release() { - while (!terminate && get_key()) - sys_sleep(16); - } - // I command uint16_t grid_select(int left_x, int top_y, int xsize, int ysize, int nr_cols, int nr_rows, int initial_index) { int x = initial_index % nr_cols;