Refactor key release handling in NACT commands

This commit is contained in:
kichikuou
2025-11-27 08:49:51 +09:00
parent fe17265cfb
commit ad73ed9271
6 changed files with 16 additions and 72 deletions
+4 -27
View File
@@ -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) {
+2
View File
@@ -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();
+5
View File
@@ -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();
+1 -9
View File
@@ -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:
+1 -9
View File
@@ -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;
+3 -27
View File
@@ -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;