Autohold migrated to ButtConfig, DWaitButton and DTestButton, code clean-up

This commit is contained in:
Alexey 'Cluster' Avdyukhin 2021-06-08 09:48:54 +03:00 committed by zeromus
parent 86cde43be2
commit 91756a9593
4 changed files with 38 additions and 146 deletions

View File

@ -37,7 +37,6 @@
extern CFGSTRUCT NetplayConfig[]; extern CFGSTRUCT NetplayConfig[];
extern CFGSTRUCT InputConfig[]; extern CFGSTRUCT InputConfig[];
extern CFGSTRUCT HotkeyConfig[]; extern CFGSTRUCT HotkeyConfig[];
extern int autoHoldKey, autoHoldClearKey;
extern int frameAdvance_Delay; extern int frameAdvance_Delay;
extern int EnableAutosave, AutosaveQty, AutosaveFrequency; extern int EnableAutosave, AutosaveQty, AutosaveFrequency;
extern int AFon, AFoff, AutoFireOffset; extern int AFon, AFoff, AutoFireOffset;
@ -272,8 +271,6 @@ static CFGSTRUCT fceuconfig[] =
ADDCFGSTRUCT(InputConfig), ADDCFGSTRUCT(InputConfig),
ADDCFGSTRUCT(HotkeyConfig), ADDCFGSTRUCT(HotkeyConfig),
AC(autoHoldKey),
AC(autoHoldClearKey),
AC(frame_display), AC(frame_display),
AC(rerecord_display), AC(rerecord_display),
AC(input_display), AC(input_display),

View File

@ -98,7 +98,7 @@ void ParseGIInput(FCEUGI *gi)
} }
} }
ButtConfig autoHoldKeys, autoHoldClearKeys;
static uint8 QuizKingData=0; static uint8 QuizKingData=0;
static uint8 HyperShotData=0; static uint8 HyperShotData=0;
static uint32 MahjongData=0; static uint32 MahjongData=0;
@ -183,28 +183,6 @@ int GetAutoFireDesynch()
return DesynchAutoFire; return DesynchAutoFire;
} }
// Test button state using current keyboard data.
// Clone of DTestButton, but uses local variables.
int DTestButtonImmediate(ButtConfig *bc)
{
uint32 x;//mbg merge 7/17/06 changed to uint
static unsigned int *keys_im=GetKeyboard_nr();
for(x=0;x<bc->NumC;x++)
{
if(bc->ButtType[x]==BUTTC_KEYBOARD)
{
if(keys_im[bc->ButtonNum[x]])
{
return(1);
}
}
}
if(DTestButtonJoy(bc)) return(1); // Needs joystick.h. Tested with PPJoy mapped with Print Screen
return(0);
}
uint32 GetGamepadPressedImmediate() uint32 GetGamepadPressedImmediate()
{ {
// Get selected joypad buttons, ignoring NES polling // Get selected joypad buttons, ignoring NES polling
@ -220,7 +198,7 @@ uint32 GetGamepadPressedImmediate()
{ {
for(x=0;x<8;x++) for(x=0;x<8;x++)
if(DTestButtonImmediate(&GamePadConfig[wg][x])) if(DTestButton(&GamePadConfig[wg][x]))
JSButtons|=(1<<x)<<(wg<<3); JSButtons|=(1<<x)<<(wg<<3);
// Check if U+D/L+R is disabled // Check if U+D/L+R is disabled
@ -236,9 +214,9 @@ uint32 GetGamepadPressedImmediate()
return JSButtons; return JSButtons;
} }
int DTestButton(ButtConfig *bc) int DTestButton(ButtConfig *bc, uint8_t just_down)
{ {
static unsigned int *keys_data = GetKeyboard_nr(); static unsigned int *keys_data = !just_down ? GetKeyboard_nr() : GetKeyboard_jd();
for(int x=0; x < bc->NumC; x++) for(int x=0; x < bc->NumC; x++)
{ {
@ -896,9 +874,6 @@ static void UpdateFTrainer(void)
} }
} }
int DWaitButton(HWND hParent, const uint8 *text, ButtConfig *bc);
int DWaitSimpleButton(HWND hParent, const uint8 *text);
CFGSTRUCT InputConfig[]={ CFGSTRUCT InputConfig[]={
VAC(powerpadsc, 2), VAC(powerpadsc, 2),
VAC(QuizKingButtons, 2), VAC(QuizKingButtons, 2),
@ -913,6 +888,8 @@ CFGSTRUCT InputConfig[]={
VAC(suborkbmap, 2), VAC(suborkbmap, 2),
VAC(virtualboysc, 2), VAC(virtualboysc, 2),
VAC(lcdcompzappersc, 2), VAC(lcdcompzappersc, 2),
AC(autoHoldKeys),
AC(autoHoldClearKeys),
ENDCFGSTRUCT ENDCFGSTRUCT
}; };
@ -1330,52 +1307,6 @@ int DWaitButton(HWND hParent, const uint8 *text, ButtConfig *bc)
return 0; //mbg merge TODO 7/17/06 - had to add this return value--is it right? return 0; //mbg merge TODO 7/17/06 - had to add this return value--is it right?
} }
int DWaitSimpleButton(HWND hParent, const uint8 *text)
{
DWBStarted = 1;
int ret = 0;
die = CreateDialog(fceu_hInstance, "DWBDIALOGSIMPLE", hParent, NULL);
SetWindowText(die, (char*)text); //mbg merge 7/17/06 added cast
EnableWindow(hParent, 0);
ShowWindow(die, 1);
while(die)
{
MSG msg;
while(PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE))
{
if(GetMessage(&msg, 0, 0, 0) > 0)
{
if(msg.message == WM_KEYDOWN || msg.message == WM_SYSKEYDOWN)
{
LPARAM tmpo;
tmpo=((msg.lParam>>16)&0x7F)|((msg.lParam>>17)&0x80);
ret = tmpo;
goto done;
}
if(msg.message == WM_SYSCOMMAND) continue;
if(!IsDialogMessage(die, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
}
Sleep(10);
}
done:
EndDialog(die,0);
EnableWindow(hParent, 1);
if(ret == 1) // convert Esc to nothing (why is it 1 and not VK_ESCAPE?)
ret = 0;
return ret;
}
static ButtConfig *DoTBButtons=0; static ButtConfig *DoTBButtons=0;
static const char *DoTBTitle=0; static const char *DoTBTitle=0;
static int DoTBMax=0; static int DoTBMax=0;
@ -1622,27 +1553,25 @@ INT_PTR CALLBACK InputConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
); );
// Initialize the auto key controls // Initialize the auto key controls
extern int autoHoldKey, autoHoldClearKey; if (autoHoldKeys.NumC)
char btext[128];
if (autoHoldKey)
{ {
if (!GetKeyNameText((autoHoldKey & 0x7F) << 16 | (autoHoldKey & 0x80) << 17, btext, 128)) char *nstr = MakeButtString(&autoHoldKeys);
sprintf(btext, "KB: %d", autoHoldKey); SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, nstr);
free(nstr);
} else } else
{ {
sprintf(btext, "not assigned"); SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, "not assigned");
} }
SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, btext);
if (autoHoldClearKey) if (autoHoldClearKeys.NumC)
{ {
if (!GetKeyNameText(autoHoldClearKey << 16, btext, 128)) char *nstr = MakeButtString(&autoHoldClearKeys);
sprintf(btext, "KB: %d", autoHoldClearKey); SetDlgItemText(hwndDlg, LBL_CLEAR_AH, nstr);
free(nstr);
} else } else
{ {
sprintf(btext, "not assigned"); SetDlgItemText(hwndDlg, LBL_CLEAR_AH, "not assigned");
} }
SetDlgItemText(hwndDlg, LBL_CLEAR_AH, btext);
CenterWindowOnScreen(hwndDlg); CenterWindowOnScreen(hwndDlg);
UpdateFourscoreState(hwndDlg); UpdateFourscoreState(hwndDlg);
@ -1807,53 +1736,36 @@ INT_PTR CALLBACK InputConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
case BTN_AUTO_HOLD: // auto-hold button case BTN_AUTO_HOLD: // auto-hold button
{ {
char btext[128] = { 0 }; char btext[128] = { 0 };
GetDlgItemText(hwndDlg, BTN_AUTO_HOLD, btext, sizeof(btext) ); GetDlgItemText(hwndDlg, BTN_AUTO_HOLD, btext, sizeof(btext) );
DWaitButton(hwndDlg, (uint8*)btext, &autoHoldKeys);
int button = DWaitSimpleButton(hwndDlg, (uint8*)btext); //mbg merge 7/17/06 if (autoHoldKeys.NumC)
if(button)
{ {
if(!GetKeyNameText((button & 0x7F) << 16 | (button & 0x80) << 17, btext, 128)) char *nstr = MakeButtString(&autoHoldKeys);
{ SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, nstr);
sprintf(btext, "KB: %d", button); free(nstr);
}
} }
else else
{ {
sprintf(btext, "not assigned"); SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, "not assigned");
} }
extern int autoHoldKey;
autoHoldKey = button;
SetDlgItemText(hwndDlg, LBL_AUTO_HOLD, btext);
} }
break; break;
case BTN_CLEAR_AH: // auto-hold clear button case BTN_CLEAR_AH: // auto-hold clear button
{ {
char btext[128] = { 0 }; char btext[128] = { 0 };
GetDlgItemText(hwndDlg, BTN_CLEAR_AH, btext, 128); GetDlgItemText(hwndDlg, BTN_CLEAR_AH, btext, 128);
DWaitButton(hwndDlg, (uint8*)btext, &autoHoldClearKeys);
int button = DWaitSimpleButton(hwndDlg, (uint8*)btext); //mbg merge 7/17/06 added cast if (autoHoldClearKeys.NumC)
if(button)
{ {
if( !GetKeyNameText((button & 0x7F) << 16 | (button & 0x80 << 17), btext, sizeof(btext))) char *nstr = MakeButtString(&autoHoldClearKeys);
{ SetDlgItemText(hwndDlg, LBL_CLEAR_AH, nstr);
sprintf(btext, "KB: %d", button); free(nstr);
}
} }
else else
{ {
sprintf(btext, "not assigned"); SetDlgItemText(hwndDlg, LBL_CLEAR_AH, "not assigned");
} }
extern int autoHoldClearKey;
autoHoldClearKey = button;
SetDlgItemText(hwndDlg, LBL_CLEAR_AH, btext);
} }
break; break;
@ -1902,33 +1814,15 @@ int FCEUD_TestCommandState(int c)
int cmdmask=cmd&CMD_KEY_MASK; int cmdmask=cmd&CMD_KEY_MASK;
// allow certain commands be affected by key repeat // allow certain commands be affected by key repeat
if(c == EMUCMD_FRAME_ADVANCE/* if(c == EMUCMD_FRAME_ADVANCE || c == EMUCMD_SPEED_TURBO || c == EMUCMD_TASEDITOR_REWIND) // TODO: this should be made more general by detecting if the command has an "off" function
|| c == EMUCMD_SOUND_VOLUME_UP
|| c == EMUCMD_SOUND_VOLUME_DOWN
|| c == EMUCMD_SPEED_SLOWER
|| c == EMUCMD_SPEED_FASTER*/)
{ {
keys=GetKeyboard_nr(); keys = GetKeyboard_nr();
/* if((cmdmask & CMD_KEY_LALT) == CMD_KEY_LALT keys_nr = GetKeyboard_nr();
|| (cmdmask & CMD_KEY_RALT) == CMD_KEY_RALT
|| (cmdmask & CMD_KEY_LALT) == CMD_KEY_LALT
|| (cmdmask & CMD_KEY_LCTRL) == CMD_KEY_LCTRL
|| (cmdmask & CMD_KEY_RCTRL) == CMD_KEY_RCTRL
|| (cmdmask & CMD_KEY_LSHIFT) == CMD_KEY_LSHIFT
|| (cmdmask & CMD_KEY_RSHIFT) == CMD_KEY_RSHIFT)*/
keys_nr=GetKeyboard_nr();
// else
// keys_nr=GetKeyboard_nr();
}
else if(c != EMUCMD_SPEED_TURBO && c != EMUCMD_TASEDITOR_REWIND) // TODO: this should be made more general by detecting if the command has an "off" function
{
keys=GetKeyboard_jd();
keys_nr=GetKeyboard_nr();
} }
else else
{ {
keys=GetKeyboard_nr(); keys = GetKeyboard_jd();
keys_nr=GetKeyboard_nr(); keys_nr = GetKeyboard_nr();
} }
/* test CTRL, SHIFT, ALT */ /* test CTRL, SHIFT, ALT */

View File

@ -68,6 +68,7 @@ void ParseGIInput(FCEUGI *GameInfo);
void SetEmulationSpeed(int type); void SetEmulationSpeed(int type);
int FCEUD_TestCommandState(int c); int FCEUD_TestCommandState(int c);
void FCEUD_UpdateInput(); void FCEUD_UpdateInput();
int DTestButton(ButtConfig *bc, uint8_t just_down = 0);
extern CFGSTRUCT HotkeyConfig[]; extern CFGSTRUCT HotkeyConfig[];

View File

@ -38,7 +38,7 @@ static unsigned int keys[256] = {0,}; // with repeat
static unsigned int keys_nr[256] = {0,}; // non-repeating static unsigned int keys_nr[256] = {0,}; // non-repeating
static unsigned int keys_jd[256] = {0,}; // just-down static unsigned int keys_jd[256] = {0,}; // just-down
static unsigned int keys_jd_lock[256] = {0,}; // just-down released lock static unsigned int keys_jd_lock[256] = {0,}; // just-down released lock
int autoHoldKey = 0, autoHoldClearKey = 0; extern ButtConfig autoHoldKeys, autoHoldClearKeys;
int ctr=0; int ctr=0;
void KeyboardUpdateState(void) void KeyboardUpdateState(void)
{ {
@ -115,8 +115,8 @@ void KeyboardUpdateState(void)
keys[i] = 0; keys[i] = 0;
extern uint8 autoHoldOn, autoHoldReset; extern uint8 autoHoldOn, autoHoldReset;
autoHoldOn = autoHoldKey && keys[autoHoldKey] != 0; autoHoldOn = DTestButton(&autoHoldKeys); // autoHoldKey && keys[autoHoldKey] != 0;
autoHoldReset = autoHoldClearKey && keys[autoHoldClearKey] != 0; autoHoldReset = DTestButton(&autoHoldClearKeys); //autoHoldClearKey && keys[autoHoldClearKey] != 0;
} }
unsigned int *GetKeyboard(void) unsigned int *GetKeyboard(void)