Input code refactoring, phase 1
Simplified the gameinp routines; "CurrentInputState" and "PulsedInputState" allow for keyrepeat information to be available or ignored for every input action in the game. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1313 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
+48
-105
@@ -55,30 +55,12 @@ volatile CONTROLLER_INPUT_STATE ImmediateInputState;
|
|||||||
static void
|
static void
|
||||||
_clear_menu_state (void)
|
_clear_menu_state (void)
|
||||||
{
|
{
|
||||||
PulsedInputState.key[KEY_MENU_UP] = 0;
|
int i;
|
||||||
PulsedInputState.key[KEY_MENU_DOWN] = 0;
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
PulsedInputState.key[KEY_MENU_LEFT] = 0;
|
{
|
||||||
PulsedInputState.key[KEY_MENU_RIGHT] = 0;
|
PulsedInputState.key[i] = 0;
|
||||||
PulsedInputState.key[KEY_MENU_SELECT] = 0;
|
CachedInputState.key[i] = 0;
|
||||||
PulsedInputState.key[KEY_MENU_CANCEL] = 0;
|
}
|
||||||
PulsedInputState.key[KEY_MENU_SPECIAL] = 0;
|
|
||||||
PulsedInputState.key[KEY_MENU_PAGE_UP] = 0;
|
|
||||||
PulsedInputState.key[KEY_MENU_PAGE_DOWN] = 0;
|
|
||||||
PulsedInputState.key[KEY_MENU_ZOOM_IN] = 0;
|
|
||||||
PulsedInputState.key[KEY_MENU_ZOOM_OUT] = 0;
|
|
||||||
PulsedInputState.key[KEY_MENU_DELETE] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_UP] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_DOWN] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_LEFT] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_RIGHT] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_SELECT] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_CANCEL] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_SPECIAL] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_PAGE_UP] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_PAGE_DOWN] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_ZOOM_IN] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_ZOOM_OUT] = 0;
|
|
||||||
CachedInputState.key[KEY_MENU_DELETE] = 0;
|
|
||||||
CachedGestalt = FALSE;
|
CachedGestalt = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,32 +68,14 @@ void
|
|||||||
ResetKeyRepeat (void)
|
ResetKeyRepeat (void)
|
||||||
{
|
{
|
||||||
DWORD initTime = GetTimeCounter ();
|
DWORD initTime = GetTimeCounter ();
|
||||||
RepeatDelays.key[KEY_MENU_UP] = _max_accel;
|
int i;
|
||||||
RepeatDelays.key[KEY_MENU_DOWN] = _max_accel;
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
RepeatDelays.key[KEY_MENU_LEFT] = _max_accel;
|
{
|
||||||
RepeatDelays.key[KEY_MENU_RIGHT] = _max_accel;
|
RepeatDelays.key[i] = _max_accel;
|
||||||
RepeatDelays.key[KEY_MENU_SELECT] = _max_accel;
|
Times.key[i] = initTime;
|
||||||
RepeatDelays.key[KEY_MENU_CANCEL] = _max_accel;
|
}
|
||||||
RepeatDelays.key[KEY_MENU_SPECIAL] = _max_accel;
|
GestaltRepeatDelay = _max_accel;
|
||||||
RepeatDelays.key[KEY_MENU_PAGE_UP] = _max_accel;
|
GestaltTime = initTime;
|
||||||
RepeatDelays.key[KEY_MENU_PAGE_DOWN] = _max_accel;
|
|
||||||
RepeatDelays.key[KEY_MENU_ZOOM_IN] = _max_accel;
|
|
||||||
RepeatDelays.key[KEY_MENU_ZOOM_OUT] = _max_accel;
|
|
||||||
RepeatDelays.key[KEY_MENU_DELETE] = _max_accel;
|
|
||||||
GestaltRepeatDelay = _max_accel;
|
|
||||||
Times.key[KEY_MENU_UP] = initTime;
|
|
||||||
Times.key[KEY_MENU_DOWN] = initTime;
|
|
||||||
Times.key[KEY_MENU_LEFT] = initTime;
|
|
||||||
Times.key[KEY_MENU_RIGHT] = initTime;
|
|
||||||
Times.key[KEY_MENU_SELECT] = initTime;
|
|
||||||
Times.key[KEY_MENU_CANCEL] = initTime;
|
|
||||||
Times.key[KEY_MENU_SPECIAL] = initTime;
|
|
||||||
Times.key[KEY_MENU_PAGE_UP] = initTime;
|
|
||||||
Times.key[KEY_MENU_PAGE_DOWN] = initTime;
|
|
||||||
Times.key[KEY_MENU_ZOOM_IN] = initTime;
|
|
||||||
Times.key[KEY_MENU_ZOOM_OUT] = initTime;
|
|
||||||
Times.key[KEY_MENU_DELETE] = initTime;
|
|
||||||
GestaltTime = initTime;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -145,24 +109,32 @@ static void
|
|||||||
_check_gestalt (DWORD NewTime)
|
_check_gestalt (DWORD NewTime)
|
||||||
{
|
{
|
||||||
BOOLEAN CurrentGestalt;
|
BOOLEAN CurrentGestalt;
|
||||||
|
int i;
|
||||||
OldGestalt = CachedGestalt;
|
OldGestalt = CachedGestalt;
|
||||||
CachedGestalt = ImmediateInputState.key[KEY_MENU_UP] || ImmediateInputState.key[KEY_MENU_DOWN] || ImmediateInputState.key[KEY_MENU_LEFT] || ImmediateInputState.key[KEY_MENU_RIGHT];
|
|
||||||
CurrentGestalt = PulsedInputState.key[KEY_MENU_UP] || PulsedInputState.key[KEY_MENU_DOWN] || PulsedInputState.key[KEY_MENU_LEFT] || PulsedInputState.key[KEY_MENU_RIGHT];
|
CachedGestalt = 0;
|
||||||
|
CurrentGestalt = 0;
|
||||||
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
|
{
|
||||||
|
CachedGestalt |= ImmediateInputState.key[i];
|
||||||
|
CurrentGestalt |= PulsedInputState.key[i];
|
||||||
|
}
|
||||||
|
|
||||||
if (OldGestalt && CachedGestalt)
|
if (OldGestalt && CachedGestalt)
|
||||||
{
|
{
|
||||||
if (NewTime - GestaltTime < GestaltRepeatDelay)
|
if (NewTime - GestaltTime < GestaltRepeatDelay)
|
||||||
{
|
{
|
||||||
PulsedInputState.key[KEY_MENU_UP] = 0;
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
PulsedInputState.key[KEY_MENU_DOWN] = 0;
|
{
|
||||||
PulsedInputState.key[KEY_MENU_LEFT] = 0;
|
PulsedInputState.key[i] = 0;
|
||||||
PulsedInputState.key[KEY_MENU_RIGHT] = 0;
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PulsedInputState.key[KEY_MENU_UP] = CachedInputState.key[KEY_MENU_UP];
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
PulsedInputState.key[KEY_MENU_DOWN] = CachedInputState.key[KEY_MENU_DOWN];
|
{
|
||||||
PulsedInputState.key[KEY_MENU_LEFT] = CachedInputState.key[KEY_MENU_LEFT];
|
PulsedInputState.key[i] = CachedInputState.key[i];
|
||||||
PulsedInputState.key[KEY_MENU_RIGHT] = CachedInputState.key[KEY_MENU_RIGHT];
|
}
|
||||||
if (GestaltRepeatDelay > _min_accel)
|
if (GestaltRepeatDelay > _min_accel)
|
||||||
GestaltRepeatDelay -= _step_accel;
|
GestaltRepeatDelay -= _step_accel;
|
||||||
if (GestaltRepeatDelay < _min_accel)
|
if (GestaltRepeatDelay < _min_accel)
|
||||||
@@ -172,10 +144,10 @@ _check_gestalt (DWORD NewTime)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PulsedInputState.key[KEY_MENU_UP] = CachedInputState.key[KEY_MENU_UP];
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
PulsedInputState.key[KEY_MENU_DOWN] = CachedInputState.key[KEY_MENU_DOWN];
|
{
|
||||||
PulsedInputState.key[KEY_MENU_LEFT] = CachedInputState.key[KEY_MENU_LEFT];
|
PulsedInputState.key[i] = CachedInputState.key[i];
|
||||||
PulsedInputState.key[KEY_MENU_RIGHT] = CachedInputState.key[KEY_MENU_RIGHT];
|
}
|
||||||
GestaltTime = NewTime;
|
GestaltTime = NewTime;
|
||||||
GestaltRepeatDelay = _max_accel;
|
GestaltRepeatDelay = _max_accel;
|
||||||
}
|
}
|
||||||
@@ -208,19 +180,12 @@ UpdateInputState (void)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_UP], &CachedInputState.key[KEY_MENU_UP], &OldInputState.key[KEY_MENU_UP], &RepeatDelays.key[KEY_MENU_UP], &NewTime, &Times.key[KEY_MENU_UP]);
|
int i;
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_DOWN], &CachedInputState.key[KEY_MENU_DOWN], &OldInputState.key[KEY_MENU_DOWN], &RepeatDelays.key[KEY_MENU_DOWN], &NewTime, &Times.key[KEY_MENU_DOWN]);
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_LEFT], &CachedInputState.key[KEY_MENU_LEFT], &OldInputState.key[KEY_MENU_LEFT], &RepeatDelays.key[KEY_MENU_LEFT], &NewTime, &Times.key[KEY_MENU_LEFT]);
|
{
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_RIGHT], &CachedInputState.key[KEY_MENU_RIGHT], &OldInputState.key[KEY_MENU_RIGHT], &RepeatDelays.key[KEY_MENU_RIGHT], &NewTime, &Times.key[KEY_MENU_RIGHT]);
|
_check_for_pulse(&PulsedInputState.key[i], &CachedInputState.key[i], &OldInputState.key[i], &RepeatDelays.key[i], &NewTime, &Times.key[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_SELECT], &CachedInputState.key[KEY_MENU_SELECT], &OldInputState.key[KEY_MENU_SELECT], &RepeatDelays.key[KEY_MENU_SELECT], &NewTime, &Times.key[KEY_MENU_SELECT]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_CANCEL], &CachedInputState.key[KEY_MENU_CANCEL], &OldInputState.key[KEY_MENU_CANCEL], &RepeatDelays.key[KEY_MENU_CANCEL], &NewTime, &Times.key[KEY_MENU_CANCEL]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_SPECIAL], &CachedInputState.key[KEY_MENU_SPECIAL], &OldInputState.key[KEY_MENU_SPECIAL], &RepeatDelays.key[KEY_MENU_SPECIAL], &NewTime, &Times.key[KEY_MENU_SPECIAL]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_PAGE_UP], &CachedInputState.key[KEY_MENU_PAGE_UP], &OldInputState.key[KEY_MENU_PAGE_UP], &RepeatDelays.key[KEY_MENU_PAGE_UP], &NewTime, &Times.key[KEY_MENU_PAGE_UP]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_PAGE_DOWN], &CachedInputState.key[KEY_MENU_PAGE_DOWN], &OldInputState.key[KEY_MENU_PAGE_DOWN], &RepeatDelays.key[KEY_MENU_PAGE_DOWN], &NewTime, &Times.key[KEY_MENU_PAGE_DOWN]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_ZOOM_IN], &CachedInputState.key[KEY_MENU_ZOOM_IN], &OldInputState.key[KEY_MENU_ZOOM_IN], &RepeatDelays.key[KEY_MENU_ZOOM_IN], &NewTime, &Times.key[KEY_MENU_ZOOM_IN]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_ZOOM_OUT], &CachedInputState.key[KEY_MENU_ZOOM_OUT], &OldInputState.key[KEY_MENU_ZOOM_OUT], &RepeatDelays.key[KEY_MENU_ZOOM_OUT], &NewTime, &Times.key[KEY_MENU_ZOOM_OUT]);
|
|
||||||
_check_for_pulse(&PulsedInputState.key[KEY_MENU_DELETE], &CachedInputState.key[KEY_MENU_DELETE], &OldInputState.key[KEY_MENU_DELETE], &RepeatDelays.key[KEY_MENU_DELETE], &NewTime, &Times.key[KEY_MENU_DELETE]);
|
|
||||||
|
|
||||||
if (CurrentInputState.key[KEY_PAUSE])
|
if (CurrentInputState.key[KEY_PAUSE])
|
||||||
GamePaused = TRUE;
|
GamePaused = TRUE;
|
||||||
@@ -383,37 +348,15 @@ p2_combat_summary (void)
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
AnyButtonPress (BOOLEAN CheckSpecial)
|
AnyButtonPress (BOOLEAN CheckSpecial)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
(void) CheckSpecial; // Ignored
|
(void) CheckSpecial; // Ignored
|
||||||
UpdateInputState ();
|
UpdateInputState ();
|
||||||
return CurrentInputState.key[KEY_P1_THRUST]
|
for (i = 0; i < NUM_KEYS; i++)
|
||||||
||CurrentInputState.key[KEY_P1_LEFT]
|
{
|
||||||
||CurrentInputState.key[KEY_P1_RIGHT]
|
if (CurrentInputState.key[i])
|
||||||
||CurrentInputState.key[KEY_P1_DOWN]
|
return TRUE;
|
||||||
||CurrentInputState.key[KEY_P1_WEAPON]
|
}
|
||||||
||CurrentInputState.key[KEY_P1_SPECIAL]
|
return FALSE;
|
||||||
||CurrentInputState.key[KEY_P1_ESCAPE]
|
|
||||||
||CurrentInputState.key[KEY_P2_THRUST]
|
|
||||||
||CurrentInputState.key[KEY_P2_LEFT]
|
|
||||||
||CurrentInputState.key[KEY_P2_RIGHT]
|
|
||||||
||CurrentInputState.key[KEY_P2_DOWN]
|
|
||||||
||CurrentInputState.key[KEY_P2_WEAPON]
|
|
||||||
||CurrentInputState.key[KEY_P2_SPECIAL]
|
|
||||||
||CurrentInputState.key[KEY_LANDER_THRUST]
|
|
||||||
||CurrentInputState.key[KEY_LANDER_LEFT]
|
|
||||||
||CurrentInputState.key[KEY_LANDER_RIGHT]
|
|
||||||
||CurrentInputState.key[KEY_LANDER_WEAPON]
|
|
||||||
||CurrentInputState.key[KEY_LANDER_ESCAPE]
|
|
||||||
||PulsedInputState.key[KEY_MENU_UP]
|
|
||||||
||PulsedInputState.key[KEY_MENU_DOWN]
|
|
||||||
||PulsedInputState.key[KEY_MENU_LEFT]
|
|
||||||
||PulsedInputState.key[KEY_MENU_RIGHT]
|
|
||||||
||PulsedInputState.key[KEY_MENU_PAGE_UP]
|
|
||||||
||PulsedInputState.key[KEY_MENU_PAGE_DOWN]
|
|
||||||
||PulsedInputState.key[KEY_MENU_ZOOM_IN]
|
|
||||||
||PulsedInputState.key[KEY_MENU_ZOOM_OUT]
|
|
||||||
||PulsedInputState.key[KEY_MENU_SELECT]
|
|
||||||
||PulsedInputState.key[KEY_MENU_CANCEL]
|
|
||||||
||PulsedInputState.key[KEY_MENU_SPECIAL];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
|
|||||||
Reference in New Issue
Block a user