Autohold migrated to ButtConfig, DWaitButton and DTestButton, code clean-up
This commit is contained in:
parent
86cde43be2
commit
91756a9593
|
@ -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),
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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[];
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue