diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index 57ea858af1..e422aea07f 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -9,6 +9,7 @@ #include "ScreenManager.h" #include "GameSoundManager.h" #include "ActorUtil.h" +#include "InputEventPlus.h" #define NEXT_SCREEN THEME->GetMetric (m_sName,"NextScreen") #define PREV_SCREEN THEME->GetMetric (m_sName,"PrevScreen") @@ -142,15 +143,15 @@ void Screen::MenuBack( PlayerNumber pn, const InputEventType type ) * pass at input. Return true if the input was handled and should not be passed * to lower screens, or false if not handled. If true is returned, Input() will * not be called, either. Normal screens should not overload this function. */ -bool Screen::OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +bool Screen::OverlayInput( const InputEventPlus &input ) { return false; } -void Screen::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void Screen::Input( const InputEventPlus &input ) { /* Don't send release messages with the default handler. */ - switch( type ) + switch( input.type ) { case IET_FIRST_PRESS: case IET_SLOW_REPEAT: @@ -161,26 +162,26 @@ void Screen::Input( const DeviceInput& DeviceI, const InputEventType type, const } /* Don't make the user hold the back button if they're pressing escape and escape is the back button. */ - if( MenuI.button == MENU_BUTTON_BACK && DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_ESC ) + if( input.MenuI.button == MENU_BUTTON_BACK && input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_ESC ) { - this->MenuBack( MenuI.player ); + this->MenuBack( input.MenuI.player ); return; } // default input handler used by most menus - if( !MenuI.IsValid() ) + if( !input.MenuI.IsValid() ) return; - switch( MenuI.button ) + switch( input.MenuI.button ) { - case MENU_BUTTON_UP: this->MenuUp( MenuI.player, type ); return; - case MENU_BUTTON_DOWN: this->MenuDown( MenuI.player, type ); return; - case MENU_BUTTON_LEFT: this->MenuLeft( MenuI.player, type ); return; - case MENU_BUTTON_RIGHT: this->MenuRight( MenuI.player, type ); return; - case MENU_BUTTON_BACK: this->MenuBack( MenuI.player, type ); return; - case MENU_BUTTON_START: this->MenuStart( MenuI.player, type ); return; - case MENU_BUTTON_SELECT:this->MenuSelect( MenuI.player, type ); return; - case MENU_BUTTON_COIN: this->MenuCoin( MenuI.player, type ); return; + case MENU_BUTTON_UP: this->MenuUp ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_DOWN: this->MenuDown ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_LEFT: this->MenuLeft ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_RIGHT: this->MenuRight ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_BACK: this->MenuBack ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_START: this->MenuStart ( input.MenuI.player, input.type ); return; + case MENU_BUTTON_SELECT:this->MenuSelect( input.MenuI.player, input.type ); return; + case MENU_BUTTON_COIN: this->MenuCoin ( input.MenuI.player, input.type ); return; } } diff --git a/stepmania/src/Screen.h b/stepmania/src/Screen.h index eefc3c7394..d83225ebf8 100644 --- a/stepmania/src/Screen.h +++ b/stepmania/src/Screen.h @@ -6,11 +6,11 @@ #include "ActorFrame.h" #include "ScreenMessage.h" #include "InputFilter.h" -#include "GameInput.h" -#include "MenuInput.h" -#include "StyleInput.h" #include "ThemeMetric.h" +#include "PlayerNumber.h" +class InputEventPlus; +struct MenuInput; class Screen; typedef Screen* (*CreateScreenFn)(const CString& sClassName); void RegisterScreenClass( const CString& sClassName, CreateScreenFn pfn ); @@ -45,8 +45,8 @@ public: virtual void BeginScreen(); virtual void Update( float fDeltaTime ); - virtual bool OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual bool OverlayInput( const InputEventPlus &input ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void PostScreenMessage( const ScreenMessage SM, float fDelay ); diff --git a/stepmania/src/ScreenAttract.cpp b/stepmania/src/ScreenAttract.cpp index 634d28eb87..c325c208c8 100644 --- a/stepmania/src/ScreenAttract.cpp +++ b/stepmania/src/ScreenAttract.cpp @@ -13,6 +13,7 @@ #include "ThemeManager.h" #include "GameSoundManager.h" #include "CommonMetrics.h" +#include "InputEventPlus.h" #define START_SCREEN(sScreenName) THEME->GetMetric (sScreenName,"StartScreen") @@ -28,21 +29,21 @@ ScreenAttract::ScreenAttract( CString sName, bool bResetGameState ) : ScreenWith } -void ScreenAttract::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenAttract::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenAttract::Input()" ); - AttractInput( DeviceI, type, GameI, MenuI, StyleI, this ); + AttractInput( input, this ); } -void ScreenAttract::AttractInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, ScreenWithMenuElements *pScreen ) +void ScreenAttract::AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ) { - if(type != IET_FIRST_PRESS) + if( input.type != IET_FIRST_PRESS ) return; // don't care - if( MenuI.IsValid() ) + if( input.MenuI.IsValid() ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_BACK: if( !(bool)BACK_GOES_TO_START_SCREEN ) @@ -68,7 +69,7 @@ void ScreenAttract::AttractInput( const DeviceInput& DeviceI, const InputEventTy SCREENMAN->SendMessageToTopScreen( SM_StopMusic ); /* HandleGlobalInputs() already played the coin sound. Don't play it again. */ - if( MenuI.button != MENU_BUTTON_COIN ) + if( input.MenuI.button != MENU_BUTTON_COIN ) SCREENMAN->PlayCoinSound(); pScreen->Cancel( SM_GoToStartScreen ); @@ -83,9 +84,9 @@ void ScreenAttract::AttractInput( const DeviceInput& DeviceI, const InputEventTy if( pScreen->IsTransitioning() ) return; - if( MenuI.IsValid() ) + if( input.MenuI.IsValid() ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_LEFT: case MENU_BUTTON_RIGHT: @@ -94,7 +95,7 @@ void ScreenAttract::AttractInput( const DeviceInput& DeviceI, const InputEventTy } } -// Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); +// Screen::Input( input ); } void ScreenAttract::StartPlayingMusic() diff --git a/stepmania/src/ScreenAttract.h b/stepmania/src/ScreenAttract.h index c6a0b6191f..7f5a85fac3 100644 --- a/stepmania/src/ScreenAttract.h +++ b/stepmania/src/ScreenAttract.h @@ -12,10 +12,10 @@ class ScreenAttract : public ScreenWithMenuElements public: ScreenAttract( CString sName, bool bResetGameState=true ); - static void AttractInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, ScreenWithMenuElements *pScreen ); + static void AttractInput( const InputEventPlus &input, ScreenWithMenuElements *pScreen ); static void GoToStartScreen( CString sScreenName ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual ScreenType GetScreenType() const { return attract; } diff --git a/stepmania/src/ScreenBookkeeping.cpp b/stepmania/src/ScreenBookkeeping.cpp index 473614b8cb..2467bffa8f 100644 --- a/stepmania/src/ScreenBookkeeping.cpp +++ b/stepmania/src/ScreenBookkeeping.cpp @@ -5,6 +5,7 @@ #include "ThemeManager.h" #include "Bookkeeper.h" #include "ScreenDimensions.h" +#include "InputEventPlus.h" REGISTER_SCREEN_CLASS( ScreenBookkeeping ); @@ -54,12 +55,12 @@ void ScreenBookkeeping::Update( float fDelta ) ScreenWithMenuElements::Update( fDelta ); } -void ScreenBookkeeping::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenBookkeeping::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS && type != IET_SLOW_REPEAT ) + if( input.type != IET_FIRST_PRESS && input.type != IET_SLOW_REPEAT ) return; // ignore - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default handler + Screen::Input( input ); // default handler } void ScreenBookkeeping::MenuLeft( PlayerNumber pn ) diff --git a/stepmania/src/ScreenBookkeeping.h b/stepmania/src/ScreenBookkeeping.h index 0d4b9d332a..899d85c3ee 100644 --- a/stepmania/src/ScreenBookkeeping.h +++ b/stepmania/src/ScreenBookkeeping.h @@ -16,7 +16,7 @@ public: virtual ~ScreenBookkeeping(); virtual void Update( float fDelta ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void MenuLeft( PlayerNumber pn ); virtual void MenuRight( PlayerNumber pn ); diff --git a/stepmania/src/ScreenCenterImage.cpp b/stepmania/src/ScreenCenterImage.cpp index 3c7e3eabdf..13b19c4cf9 100644 --- a/stepmania/src/ScreenCenterImage.cpp +++ b/stepmania/src/ScreenCenterImage.cpp @@ -9,6 +9,7 @@ #include "RageDisplay.h" #include "HelpDisplay.h" #include "ScreenDimensions.h" +#include "InputEventPlus.h" static ThemeMetric ALLOW_RESIZE("ScreenCenterImage","AllowResize"); @@ -49,14 +50,14 @@ ScreenCenterImage::~ScreenCenterImage() -void ScreenCenterImage::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenCenterImage::Input( const InputEventPlus &input ) { if( IsTransitioning() ) return; - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) { - if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_SPACE ) + if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_SPACE ) { PREFSMAN->m_iCenterImageTranslateX.Set( 0 ); PREFSMAN->m_iCenterImageTranslateY.Set( 0 ); @@ -65,7 +66,7 @@ void ScreenCenterImage::Input( const DeviceInput& DeviceI, const InputEventType return; } - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_START: SCREENMAN->PlayStartSound(); @@ -84,20 +85,20 @@ void ScreenCenterImage::Input( const DeviceInput& DeviceI, const InputEventType bool bIncrease = false; Axis axis = NUM_AXES; - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_UP: axis = AXIS_TRANS_Y; bIncrease = false; break; case MENU_BUTTON_DOWN: axis = AXIS_TRANS_Y; bIncrease = true; break; case MENU_BUTTON_LEFT: axis = AXIS_TRANS_X; bIncrease = false; break; case MENU_BUTTON_RIGHT: axis = AXIS_TRANS_X; bIncrease = true; break; default: - if( !DeviceI.IsJoystick() ) + if( !input.DeviceI.IsJoystick() ) return; /* Secondary axes aren't always mapped correctly; for example, PS2 converters * tend to map the right stick to weird things, and every one is different, * so they usually won't work. */ - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case JOY_UP: axis = AXIS_TRANS_Y; bIncrease = false; break; case JOY_DOWN: axis = AXIS_TRANS_Y; bIncrease = true; break; @@ -121,21 +122,21 @@ void ScreenCenterImage::Input( const DeviceInput& DeviceI, const InputEventType } float fScale = 1.0f; - if( type == IET_RELEASE ) + if( input.type == IET_RELEASE ) fScale = 0; - if( DeviceI.level >= 0 ) + if( input.DeviceI.level >= 0 ) { /* Increase the dead zone. XXX: input drivers should handle dead zones */ - if( DeviceI.level < 0.10f ) + if( input.DeviceI.level < 0.10f ) fScale = 0; else - fScale = SCALE( DeviceI.level, 0.10f, 1.0f, 0.0f, 1.0f ); + fScale = SCALE( input.DeviceI.level, 0.10f, 1.0f, 0.0f, 1.0f ); } - if( DeviceI.level < 0 ) + if( input.DeviceI.level < 0 ) { - switch( type ) + switch( input.type ) { case IET_SLOW_REPEAT: fScale *= 4; break; case IET_FAST_REPEAT: fScale *= 16; break; diff --git a/stepmania/src/ScreenCenterImage.h b/stepmania/src/ScreenCenterImage.h index 1a18052c57..68ee7b6924 100644 --- a/stepmania/src/ScreenCenterImage.h +++ b/stepmania/src/ScreenCenterImage.h @@ -14,7 +14,7 @@ public: void Init(); virtual ~ScreenCenterImage(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void Update( float fDeltaTime ); private: diff --git a/stepmania/src/ScreenDebugOverlay.cpp b/stepmania/src/ScreenDebugOverlay.cpp index a3d24c73a9..160d7a740a 100644 --- a/stepmania/src/ScreenDebugOverlay.cpp +++ b/stepmania/src/ScreenDebugOverlay.cpp @@ -19,6 +19,7 @@ #include "CodeDetector.h" #include "RageInput.h" #include "RageDisplay.h" +#include "InputEventPlus.h" static bool g_bIsDisplayed = false; static bool g_bIsSlow = false; @@ -256,10 +257,10 @@ void ScreenDebugOverlay::UpdateText() } } -bool ScreenDebugOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +bool ScreenDebugOverlay::OverlayInput( const InputEventPlus &input ) { - if( DeviceI == g_Mappings.holdForDebug1 || - DeviceI == g_Mappings.holdForDebug2 ) + if( input.DeviceI == g_Mappings.holdForDebug1 || + input.DeviceI == g_Mappings.holdForDebug2 ) { bool bHoldingBoth = (!g_Mappings.holdForDebug1.IsValid() || INPUTFILTER->IsBeingPressed(g_Mappings.holdForDebug1)) && @@ -275,10 +276,10 @@ bool ScreenDebugOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEv { int i = p-g_pvpSubscribers->begin(); - if( (g_bIsDisplayed && DeviceI == g_Mappings.debugButton[i]) || - (IsGameplay() && DeviceI == g_Mappings.gameplayButton[i]) ) + if( (g_bIsDisplayed && input.DeviceI == g_Mappings.debugButton[i]) || + (IsGameplay() && input.DeviceI == g_Mappings.gameplayButton[i]) ) { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return true; /* eat the input but do nothing */ BitmapText &txt1 = *m_vptextButton[i]; diff --git a/stepmania/src/ScreenDebugOverlay.h b/stepmania/src/ScreenDebugOverlay.h index 1fb8310ee6..b1d488167a 100644 --- a/stepmania/src/ScreenDebugOverlay.h +++ b/stepmania/src/ScreenDebugOverlay.h @@ -14,7 +14,7 @@ public: virtual ~ScreenDebugOverlay(); virtual void Init(); - bool OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + bool OverlayInput( const InputEventPlus &input ); void Update( float fDeltaTime ); diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 87e05a6510..267d0b359a 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -31,6 +31,7 @@ #include "BackgroundUtil.h" #include #include +#include "InputEventPlus.h" static Preference g_iDefaultRecordLength( "DefaultRecordLength", 4 ); @@ -995,41 +996,39 @@ void ScreenEdit::DrawPrimitives() GAMESTATE->m_fSongBeat = fSongBeat; // restore real song beat } -void ScreenEdit::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEdit::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenEdit::Input()" ); if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) return; - const DeviceInput& di = DeviceI; - EditButton EditB; - DeviceToEdit( di, EditB ); + DeviceToEdit( input.DeviceI, EditB ); if( EditB == EDIT_BUTTON_REMOVE_NOTE ) { // Ugly: we need to know when the button was pressed or released, so we // can clamp operations to that time. Should InputFilter keep track of // last release, too? - m_bRemoveNoteButtonDown = (type != IET_RELEASE); + m_bRemoveNoteButtonDown = (input.type != IET_RELEASE); m_RemoveNoteButtonLastChanged.Touch(); } switch( m_EditState ) { case STATE_EDITING: - InputEdit( di, type, GameI, MenuI, StyleI, EditB ); + InputEdit( input, EditB ); m_bTextInfoNeedsUpdate = true; break; case STATE_RECORDING: - InputRecord( di, type, GameI, MenuI, StyleI, EditB ); + InputRecord( input, EditB ); break; case STATE_RECORDING_PAUSED: - InputRecordPaused( di, type, GameI, MenuI, StyleI, EditB ); + InputRecordPaused( input, EditB ); break; case STATE_PLAYING: - InputPlay( di, type, GameI, MenuI, StyleI, EditB ); + InputPlay( input, EditB ); break; default: ASSERT(0); } @@ -1050,14 +1049,14 @@ static void ShiftToRightSide( int &iCol, int iNumTracks ) } } -void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ) +void ScreenEdit::InputEdit( const InputEventPlus &input, EditButton EditB ) { - if( type == IET_LEVEL_CHANGED ) + if( input.type == IET_LEVEL_CHANGED ) return; // don't care - if( type == IET_RELEASE ) + if( input.type == IET_RELEASE ) { - if( EditPressed( EDIT_BUTTON_SCROLL_SELECT, DeviceI ) ) + if( EditPressed( EDIT_BUTTON_SCROLL_SELECT, input.DeviceI ) ) m_iShiftAnchor = -1; return; } @@ -1076,7 +1075,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ case EDIT_BUTTON_COLUMN_8: case EDIT_BUTTON_COLUMN_9: { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) break; // We only care about first presses int iCol = EditB - EDIT_BUTTON_COLUMN_0; @@ -1355,11 +1354,16 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) - fDeltaBPM /= 2; - else switch( type ) { - case IET_SLOW_REPEAT: fDeltaBPM *= 10; break; - case IET_FAST_REPEAT: fDeltaBPM *= 40; break; + fDeltaBPM /= 2; + } + else + { + switch( input.type ) + { + case IET_SLOW_REPEAT: fDeltaBPM *= 10; break; + case IET_FAST_REPEAT: fDeltaBPM *= 40; break; + } } float fNewBPM = fBPM + fDeltaBPM; @@ -1377,13 +1381,17 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) - fStopDelta /= 20; /* 1ms */ - else switch( type ) { - case IET_SLOW_REPEAT: fStopDelta *= 10; break; - case IET_FAST_REPEAT: fStopDelta *= 40; break; + fStopDelta /= 20; /* 1ms */ + } + else + { + switch( input.type ) + { + case IET_SLOW_REPEAT: fStopDelta *= 10; break; + case IET_FAST_REPEAT: fStopDelta *= 40; break; + } } - unsigned i; for( i=0; im_Timing.m_StopSegments.size(); i++ ) { @@ -1417,13 +1425,17 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ default: ASSERT(0); return; } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) - fOffsetDelta /= 20; /* 1ms */ - else switch( type ) { - case IET_SLOW_REPEAT: fOffsetDelta *= 10; break; - case IET_FAST_REPEAT: fOffsetDelta *= 40; break; + fOffsetDelta /= 20; /* 1ms */ + } + else + { + switch( input.type ) + { + case IET_SLOW_REPEAT: fOffsetDelta *= 10; break; + case IET_FAST_REPEAT: fOffsetDelta *= 40; break; + } } - m_pSong->m_Timing.m_fBeat0OffsetInSeconds += fOffsetDelta; } break; @@ -1439,7 +1451,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ case EDIT_BUTTON_SAMPLE_LENGTH_UP: fDelta = +0.02f; break; default: ASSERT(0); return; } - switch( type ) + switch( input.type ) { case IET_SLOW_REPEAT: fDelta *= 10; break; case IET_FAST_REPEAT: fDelta *= 40; break; @@ -1718,7 +1730,7 @@ void ScreenEdit::InputEdit( const DeviceInput& DeviceI, const InputEventType typ } } -void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ) +void ScreenEdit::InputRecord( const InputEventPlus &input, EditButton EditB ) { if( EditB == EDIT_BUTTON_RETURN_TO_EDIT ) { @@ -1726,12 +1738,12 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t return; } - if( StyleI.player != PLAYER_1 ) + if( input.StyleI.player != PLAYER_1 ) return; // ignore - const int iCol = StyleI.col; + const int iCol = input.StyleI.col; - switch( type ) + switch( input.type ) { case IET_FIRST_PRESS: { @@ -1774,9 +1786,9 @@ void ScreenEdit::InputRecord( const DeviceInput& DeviceI, const InputEventType t } } -void ScreenEdit::InputRecordPaused( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ) +void ScreenEdit::InputRecordPaused( const InputEventPlus &input, EditButton EditB ) { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; // don't care switch( EditB ) @@ -1827,9 +1839,9 @@ void ScreenEdit::InputRecordPaused( const DeviceInput& DeviceI, const InputEvent } } -void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ) +void ScreenEdit::InputPlay( const InputEventPlus &input, EditButton EditB ) { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; switch( EditB ) @@ -1861,11 +1873,16 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ } if( EditIsBeingPressed( EDIT_BUTTON_ADJUST_FINE ) ) - fOffsetDelta /= 20; /* 1ms */ - else switch( type ) { - case IET_SLOW_REPEAT: fOffsetDelta *= 10; break; - case IET_FAST_REPEAT: fOffsetDelta *= 40; break; + fOffsetDelta /= 20; /* 1ms */ + } + else + { + switch( input.type ) + { + case IET_SLOW_REPEAT: fOffsetDelta *= 10; break; + case IET_FAST_REPEAT: fOffsetDelta *= 40; break; + } } m_pSong->m_Timing.m_fBeat0OffsetInSeconds += fOffsetDelta; @@ -1873,11 +1890,11 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ break; } - switch( StyleI.player ) + switch( input.StyleI.player ) { case PLAYER_1: if( PREFSMAN->m_AutoPlay == PC_HUMAN ) - m_Player.Step( StyleI.col, DeviceI.ts ); + m_Player.Step( input.StyleI.col, input.DeviceI.ts ); break; } @@ -2236,7 +2253,6 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) { Course *pCourse = GAMESTATE->m_pCurCourse; CourseEntry &ce = pCourse->m_vEntries[GAMESTATE->m_iEditCourseEntryIndex]; - bool bAnyAttackAtThisBeat = false; FOREACH( Attack, ce.attacks, a ) { if( a->fStartSecond == m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) ) @@ -2255,7 +2271,6 @@ void ScreenEdit::HandleScreenMessage( const ScreenMessage SM ) { PlayerOptions poChosen = GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerOptions; CString sMods = poChosen.GetString(); - const int row = BeatToNoteRow( GAMESTATE->m_fSongBeat ); Course *pCourse = GAMESTATE->m_pCurCourse; CourseEntry &ce = pCourse->m_vEntries[GAMESTATE->m_iEditCourseEntryIndex]; diff --git a/stepmania/src/ScreenEdit.h b/stepmania/src/ScreenEdit.h index 061df22375..dc1760e5e6 100644 --- a/stepmania/src/ScreenEdit.h +++ b/stepmania/src/ScreenEdit.h @@ -153,11 +153,11 @@ public: virtual ~ScreenEdit(); virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); - void InputEdit( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ); - void InputRecord( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ); - void InputRecordPaused( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ); - void InputPlay( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI, EditButton EditB ); + virtual void Input( const InputEventPlus &input ); + void InputEdit( const InputEventPlus &input, EditButton EditB ); + void InputRecord( const InputEventPlus &input, EditButton EditB ); + void InputRecordPaused( const InputEventPlus &input, EditButton EditB ); + void InputPlay( const InputEventPlus &input, EditButton EditB ); virtual void HandleScreenMessage( const ScreenMessage SM ); protected: diff --git a/stepmania/src/ScreenEnding.cpp b/stepmania/src/ScreenEnding.cpp index feb40cdfcd..efff24176c 100644 --- a/stepmania/src/ScreenEnding.cpp +++ b/stepmania/src/ScreenEnding.cpp @@ -18,6 +18,7 @@ #include "StatsManager.h" #include "PlayerState.h" #include "CommonMetrics.h" +#include "InputEventPlus.h" CString GetStatsLineTitle( PlayerNumber pn, EndingStatsLine line ) @@ -237,12 +238,12 @@ void ScreenEnding::Init() GAMESTATE->Reset(); } -void ScreenEnding::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEnding::Input( const InputEventPlus &input ) { bool bIsTransitioning = m_In.IsTransitioning() || m_Out.IsTransitioning(); - if( MenuI.IsValid() && !bIsTransitioning ) + if( input.MenuI.IsValid() && !bIsTransitioning ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_START: SCREENMAN->PostMessageToTopScreen( SM_BeginFadingOut, 0 ); @@ -250,7 +251,7 @@ void ScreenEnding::Input( const DeviceInput& DeviceI, const InputEventType type, } } - ScreenAttract::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenAttract::Input( input ); } /* diff --git a/stepmania/src/ScreenEnding.h b/stepmania/src/ScreenEnding.h index af7bbcf12c..560c44a44c 100644 --- a/stepmania/src/ScreenEnding.h +++ b/stepmania/src/ScreenEnding.h @@ -25,7 +25,7 @@ class ScreenEnding : public ScreenAttract public: ScreenEnding( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); private: struct Line diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 028caacf42..3e1c2e839f 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -31,6 +31,7 @@ #include "Command.h" #include "CommonMetrics.h" #include "ScoreKeeperMAX2.h" +#include "InputEventPlus.h" const int NUM_SCORE_DIGITS = 9; @@ -1151,21 +1152,21 @@ void ScreenEvaluation::TweenOursOffScreen() OFF_COMMAND( m_sprTryExtraStage ); } -void ScreenEvaluation::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEvaluation::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenEvaluation::Input()" ); if( IsTransitioning() ) return; - if( GameI.IsValid() ) + if( input.GameI.IsValid() ) { - PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( GameI.controller ); + PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( input.GameI.controller ); HighScore &hs = m_HighScore[pn]; - if( CodeDetector::EnteredCode(GameI.controller, CODE_SAVE_SCREENSHOT1) || - CodeDetector::EnteredCode(GameI.controller, CODE_SAVE_SCREENSHOT2) ) + if( CodeDetector::EnteredCode(input.GameI.controller, CODE_SAVE_SCREENSHOT1) || + CodeDetector::EnteredCode(input.GameI.controller, CODE_SAVE_SCREENSHOT2) ) { if( !m_bSavedScreenshot[pn] && // only allow one screenshot PROFILEMAN->IsPersistentProfile(pn) ) @@ -1197,7 +1198,7 @@ void ScreenEvaluation::Input( const DeviceInput& DeviceI, const InputEventType t } } - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenEvaluation::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenEvaluation.h b/stepmania/src/ScreenEvaluation.h index 44d94f6c06..99f5766a85 100644 --- a/stepmania/src/ScreenEvaluation.h +++ b/stepmania/src/ScreenEvaluation.h @@ -25,7 +25,7 @@ public: enum Type { stage, summary, course }; ScreenEvaluation( CString sClassName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void TweenOursOffScreen(); diff --git a/stepmania/src/ScreenEvaluationMultiplayer.cpp b/stepmania/src/ScreenEvaluationMultiplayer.cpp index a7c5529cf2..d9d0b0d233 100644 --- a/stepmania/src/ScreenEvaluationMultiplayer.cpp +++ b/stepmania/src/ScreenEvaluationMultiplayer.cpp @@ -259,12 +259,12 @@ void ScreenEvaluationMultiplayer::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenEvaluationMultiplayer::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEvaluationMultiplayer::Input( const InputEventPlus &input ) { if( this->IsTransitioning() ) return; - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenEvaluationMultiplayer::Update( float fDeltaTime ) diff --git a/stepmania/src/ScreenEvaluationMultiplayer.h b/stepmania/src/ScreenEvaluationMultiplayer.h index d5a553d16a..80dc6524a3 100644 --- a/stepmania/src/ScreenEvaluationMultiplayer.h +++ b/stepmania/src/ScreenEvaluationMultiplayer.h @@ -27,7 +27,7 @@ public: ~ScreenEvaluationMultiplayer(); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Update(float f); virtual void DrawPrimitives(); diff --git a/stepmania/src/ScreenEz2SelectMusic.cpp b/stepmania/src/ScreenEz2SelectMusic.cpp index 5dbdb57fe1..4f5e3f7373 100644 --- a/stepmania/src/ScreenEz2SelectMusic.cpp +++ b/stepmania/src/ScreenEz2SelectMusic.cpp @@ -21,6 +21,7 @@ #include "Command.h" #include "RageLog.h" #include "song.h" +#include "InputEventPlus.h" #define PREV_SCREEN THEME->GetMetric ("ScreenEz2SelectMusic","PrevScreen") @@ -232,20 +233,20 @@ void ScreenEz2SelectMusic::Init() SOUND->PlayOnceFromDir( ANNOUNCER->GetPathTo("select music intro") ); } -void ScreenEz2SelectMusic::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEz2SelectMusic::Input( const InputEventPlus &input ) { // if( type != IET_FIRST_PRESS ) // return; // ignore if(i_ErrorDetected) return; // don't let the user do anything if theres an error - if( type == IET_RELEASE || type == IET_LEVEL_CHANGED ) return; // don't care + if( input.type == IET_RELEASE || input.type == IET_LEVEL_CHANGED ) return; // don't care if( IsTransitioning() ) return; // ignore - if( !GameI.IsValid() ) return; // don't care + if( !input.GameI.IsValid() ) return; // don't care - if( m_bMadeChoice && !m_bGoToOptions && MenuI.IsValid() && MenuI.button == MENU_BUTTON_START ) + if( m_bMadeChoice && !m_bGoToOptions && input.MenuI.IsValid() && input.MenuI.button == MENU_BUTTON_START ) { SCREENMAN->PlayStartSound(); m_bGoToOptions = true; @@ -255,31 +256,31 @@ void ScreenEz2SelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy if( m_bMadeChoice ) return; - PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( GameI.controller ); + PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( input.GameI.controller ); - if( CodeDetector::EnteredEasierDifficulty(GameI.controller) ) + if( CodeDetector::EnteredEasierDifficulty(input.GameI.controller) ) { EasierDifficulty( pn ); return; } - if( CodeDetector::EnteredHarderDifficulty(GameI.controller) ) + if( CodeDetector::EnteredHarderDifficulty(input.GameI.controller) ) { HarderDifficulty( pn ); return; } - if( CodeDetector::DetectAndAdjustMusicOptions(GameI.controller) ) + if( CodeDetector::DetectAndAdjustMusicOptions(input.GameI.controller) ) { UpdateOptions(pn,1); } - if( CodeDetector::EnteredNextBannerGroup(GameI.controller)) + if( CodeDetector::EnteredNextBannerGroup(input.GameI.controller)) { m_MusicBannerWheel.ScanToNextGroup(); MusicChanged(); return; } - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) { m_bScanning = true; m_soundMusicCycle.Play(); @@ -310,7 +311,7 @@ void ScreenEz2SelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy m_soundButtonPress.Play(); } LastInputTime = RageTimer::GetTimeSinceStartFast(); - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); } void ScreenEz2SelectMusic::UpdateOptions(PlayerNumber pn, int nosound) diff --git a/stepmania/src/ScreenEz2SelectMusic.h b/stepmania/src/ScreenEz2SelectMusic.h index 3e3f5bc92a..583b23a2e0 100644 --- a/stepmania/src/ScreenEz2SelectMusic.h +++ b/stepmania/src/ScreenEz2SelectMusic.h @@ -18,7 +18,7 @@ public: virtual void Init(); virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuStart( PlayerNumber pn ); virtual void MenuLeft( PlayerNumber pn, const InputEventType type ); diff --git a/stepmania/src/ScreenEz2SelectPlayer.cpp b/stepmania/src/ScreenEz2SelectPlayer.cpp index a6f19ea4bf..7e1a14da24 100644 --- a/stepmania/src/ScreenEz2SelectPlayer.cpp +++ b/stepmania/src/ScreenEz2SelectPlayer.cpp @@ -111,14 +111,14 @@ void ScreenEz2SelectPlayer::Update( float fDeltaTime ) Input Desc: Handles player input. ************************************/ -void ScreenEz2SelectPlayer::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenEz2SelectPlayer::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenEz2SelectPlayer::Input()" ); if( IsTransitioning() ) return; - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler + Screen::Input( input ); // default input handler } /************************************ diff --git a/stepmania/src/ScreenEz2SelectPlayer.h b/stepmania/src/ScreenEz2SelectPlayer.h index 4ed6970ca2..23f5972e1f 100644 --- a/stepmania/src/ScreenEz2SelectPlayer.h +++ b/stepmania/src/ScreenEz2SelectPlayer.h @@ -16,7 +16,7 @@ public: /* Public Function Prototypes */ virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuDown( PlayerNumber pn ); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index fdabcb1194..19a27ac754 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -57,6 +57,7 @@ #include "DifficultyIcon.h" #include "DifficultyMeter.h" #include "PlayerScoreList.h" +#include "InputEventPlus.h" // // Defines @@ -2104,27 +2105,27 @@ void ScreenGameplay::AbortGiveUp( bool bShowText ) } -void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenGameplay::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenGameplay::Input()" ); - if( type == IET_LEVEL_CHANGED ) + if( input.type == IET_LEVEL_CHANGED ) return; if( m_bPaused ) { /* If we're paused, only accept MENU_BUTTON_START to unpause. */ - if( MenuI.IsValid() && GAMESTATE->IsHumanPlayer(MenuI.player) && MenuI.button == MENU_BUTTON_START && type == IET_FIRST_PRESS ) + if( input.MenuI.IsValid() && GAMESTATE->IsHumanPlayer(input.MenuI.player) && input.MenuI.button == MENU_BUTTON_START && input.type == IET_FIRST_PRESS ) { - if( m_PauseController == GAME_CONTROLLER_INVALID || m_PauseController == GameI.controller ) + if( m_PauseController == GAME_CONTROLLER_INVALID || m_PauseController == input.GameI.controller ) this->PauseGame( false ); } return; } - if( MenuI.IsValid() && + if( input.MenuI.IsValid() && m_DancingState != STATE_OUTRO && - GAMESTATE->IsHumanPlayer(MenuI.player) && + GAMESTATE->IsHumanPlayer(input.MenuI.player) && !m_Cancel.IsTransitioning() ) { /* Allow bailing out by holding the START button of all active players. This @@ -2133,15 +2134,15 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ * * However, if this is also a style button, don't do this. (pump center = start) */ bool bHoldingGiveUp = false; - bHoldingGiveUp |= ( START_GIVES_UP && MenuI.button == MENU_BUTTON_START && !StyleI.IsValid() ); - bHoldingGiveUp |= ( BACK_GIVES_UP && MenuI.button == MENU_BUTTON_BACK && !StyleI.IsValid() ); + bHoldingGiveUp |= ( START_GIVES_UP && input.MenuI.button == MENU_BUTTON_START && !input.StyleI.IsValid() ); + bHoldingGiveUp |= ( BACK_GIVES_UP && input.MenuI.button == MENU_BUTTON_BACK && !input.StyleI.IsValid() ); if( bHoldingGiveUp ) { /* No PREFSMAN->m_bDelayedEscape; always delayed. */ - if( type==IET_RELEASE ) + if( input.type==IET_RELEASE ) AbortGiveUp( true ); - else if( type==IET_FIRST_PRESS && m_GiveUpTimer.IsZero() ) + else if( input.type==IET_FIRST_PRESS && m_GiveUpTimer.IsZero() ) { m_textDebug.SetText( GIVE_UP_TEXT ); m_textDebug.StopTweening(); @@ -2156,16 +2157,16 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ /* Only handle MENU_BUTTON_BACK as a regular BACK button if BACK_GIVES_UP is * disabled. */ - if( MenuI.button == MENU_BUTTON_BACK && !BACK_GIVES_UP ) + if( input.MenuI.button == MENU_BUTTON_BACK && !BACK_GIVES_UP ) { - if( ((!PREFSMAN->m_bDelayedBack && type==IET_FIRST_PRESS) || - (DeviceI.device==DEVICE_KEYBOARD && (type==IET_SLOW_REPEAT||type==IET_FAST_REPEAT)) || - (DeviceI.device!=DEVICE_KEYBOARD && type==IET_FAST_REPEAT)) ) + if( ((!PREFSMAN->m_bDelayedBack && input.type==IET_FIRST_PRESS) || + (input.DeviceI.device==DEVICE_KEYBOARD && (input.type==IET_SLOW_REPEAT||input.type==IET_FAST_REPEAT)) || + (input.DeviceI.device!=DEVICE_KEYBOARD && input.type==IET_FAST_REPEAT)) ) { - LOG->Trace("Player %i went back", MenuI.player+1); + LOG->Trace("Player %i went back", input.MenuI.player+1); BackOutFromGameplay(); } - else if( PREFSMAN->m_bDelayedBack && type==IET_FIRST_PRESS ) + else if( PREFSMAN->m_bDelayedBack && input.type==IET_FIRST_PRESS ) { m_textDebug.SetText( "Continue holding BACK to quit" ); m_textDebug.StopTweening(); @@ -2173,7 +2174,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ m_textDebug.BeginTweening( 1/8.f ); m_textDebug.SetDiffuse( RageColor(1,1,1,1) ); } - else if( PREFSMAN->m_bDelayedBack && type==IET_RELEASE ) + else if( PREFSMAN->m_bDelayedBack && input.type==IET_RELEASE ) { m_textDebug.StopTweening(); m_textDebug.BeginTweening( 1/8.f ); @@ -2185,7 +2186,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ } /* Nothing below cares about releases. */ - if(type == IET_RELEASE) + if( input.type == IET_RELEASE ) return; @@ -2195,22 +2196,22 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ // Translate input and sent to the appropriate player. Assume that all // joystick devices are mapped the same as the master player. - if( DeviceI.IsJoystick() ) + if( input.DeviceI.IsJoystick() ) { - DeviceInput _DeviceI = DeviceI; + DeviceInput _DeviceI = input.DeviceI; _DeviceI.device = DEVICE_JOY1; GameInput _GameI; INPUTMAPPER->DeviceToGame( _DeviceI, _GameI ); - if( GameI.IsValid() ) + if( input.GameI.IsValid() ) { StyleInput _StyleI; INPUTMAPPER->GameToStyle( _GameI, _StyleI ); - mp = InputMapper::InputDeviceToMultiPlayer( DeviceI.device ); + mp = InputMapper::InputDeviceToMultiPlayer( input.DeviceI.device ); if( mp>=0 && mpStep( _StyleI.col, DeviceI.ts ); + m_vPlayerInfo[mp].m_pPlayer->Step( _StyleI.col, input.DeviceI.ts ); } } } @@ -2219,14 +2220,14 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ // // handle a step or battle item activate // - if( type==IET_FIRST_PRESS && - StyleI.IsValid() && - GAMESTATE->IsHumanPlayer( StyleI.player ) ) + if( input.type==IET_FIRST_PRESS && + input.StyleI.IsValid() && + GAMESTATE->IsHumanPlayer( input.StyleI.player ) ) { AbortGiveUp( true ); if( PREFSMAN->m_AutoPlay == PC_HUMAN ) - m_vPlayerInfo[StyleI.player].m_pPlayer->Step( StyleI.col, DeviceI.ts ); + m_vPlayerInfo[input.StyleI.player].m_pPlayer->Step( input.StyleI.col, input.DeviceI.ts ); } } } diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index 9fd466afc2..5bee35f530 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -19,6 +19,7 @@ #include "ThemeMetric.h" #include "PlayerStageStats.h" #include "PlayerState.h" +#include "GameInput.h" class LyricsLoader; class ActiveAttackList; @@ -101,7 +102,7 @@ public: virtual ~ScreenGameplay(); virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual bool UsesBackground() const { return false; } diff --git a/stepmania/src/ScreenInstructions.cpp b/stepmania/src/ScreenInstructions.cpp index e8e835eb4f..edd39d5f6d 100644 --- a/stepmania/src/ScreenInstructions.cpp +++ b/stepmania/src/ScreenInstructions.cpp @@ -14,13 +14,13 @@ void ScreenInstructions::Init() this->SortByDrawOrder(); } -void ScreenInstructions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenInstructions::Input( const InputEventPlus &input ) { if( IsTransitioning() ) return; // default input handler - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); } void ScreenInstructions::MenuBack( PlayerNumber pn ) diff --git a/stepmania/src/ScreenInstructions.h b/stepmania/src/ScreenInstructions.h index e163c764e6..4ff087130d 100644 --- a/stepmania/src/ScreenInstructions.h +++ b/stepmania/src/ScreenInstructions.h @@ -9,7 +9,7 @@ public: ScreenInstructions( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void MenuBack( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn ); diff --git a/stepmania/src/ScreenJoinMultiplayer.cpp b/stepmania/src/ScreenJoinMultiplayer.cpp index f1d7cc2526..fb9b66df91 100644 --- a/stepmania/src/ScreenJoinMultiplayer.cpp +++ b/stepmania/src/ScreenJoinMultiplayer.cpp @@ -1,7 +1,6 @@ /* * Join players in perparation for ScreenGameplayMultiplayer. */ - #include "global.h" #include "ScreenJoinMultiplayer.h" #include "RageInput.h" @@ -13,6 +12,7 @@ class Style; #include "GameCommand.h" #include "ScreenPrompt.h" #include "ScreenManager.h" +#include "InputEventPlus.h" static const CString MultiPlayerStatusNames[] = { @@ -97,18 +97,18 @@ void ScreenJoinMultiplayer::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenJoinMultiplayer::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenJoinMultiplayer::Input( const InputEventPlus &input ) { if( this->IsTransitioning() ) return; // Translate input and sent to the appropriate player. Assume that all // joystick devices are mapped the same as the master player. - if( type == IET_FIRST_PRESS && - DeviceI.device >= DEVICE_JOY1 && - DeviceI.device < DEVICE_JOY1 + NUM_MultiPlayer ) + if( input.type == IET_FIRST_PRESS && + input.DeviceI.device >= DEVICE_JOY1 && + input.DeviceI.device < DEVICE_JOY1 + NUM_MultiPlayer ) { - DeviceInput di = DeviceI; + DeviceInput di = input.DeviceI; di.device = DEVICE_JOY1; GameInput gi; INPUTMAPPER->DeviceToGame( di, gi ); @@ -118,7 +118,7 @@ void ScreenJoinMultiplayer::Input( const DeviceInput& DeviceI, const InputEventT MenuInput mi; INPUTMAPPER->GameToMenu( gi, mi ); - MultiPlayer p = InputMapper::InputDeviceToMultiPlayer( DeviceI.device ); + MultiPlayer p = InputMapper::InputDeviceToMultiPlayer( input.DeviceI.device ); // testing hack if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD,KEY_LSHIFT) ) ) @@ -160,7 +160,7 @@ void ScreenJoinMultiplayer::Input( const DeviceInput& DeviceI, const InputEventT } } - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenJoinMultiplayer::Update( float fDeltaTime ) diff --git a/stepmania/src/ScreenJoinMultiplayer.h b/stepmania/src/ScreenJoinMultiplayer.h index 0b4391b8ce..e6ffcc1181 100644 --- a/stepmania/src/ScreenJoinMultiplayer.h +++ b/stepmania/src/ScreenJoinMultiplayer.h @@ -21,7 +21,7 @@ public: ScreenJoinMultiplayer( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Update(float f); virtual void DrawPrimitives(); diff --git a/stepmania/src/ScreenJukebox.cpp b/stepmania/src/ScreenJukebox.cpp index c258b5a983..8182a8f4cd 100644 --- a/stepmania/src/ScreenJukebox.cpp +++ b/stepmania/src/ScreenJukebox.cpp @@ -18,6 +18,7 @@ #include "StatsManager.h" #include "CommonMetrics.h" #include "PrefsManager.h" +#include "InputEventPlus.h" #define SHOW_COURSE_MODIFIERS_PROBABILITY THEME->GetMetricF(m_sName,"ShowCourseModifiersProbability") @@ -241,16 +242,16 @@ void ScreenJukebox::Init() m_DancingState = STATE_DANCING; } -void ScreenJukebox::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenJukebox::Input( const InputEventPlus &input ) { //LOG->Trace( "ScreenJukebox::Input()" ); - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; /* ignore */ - if( MenuI.IsValid() ) + if( input.MenuI.IsValid() ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_LEFT: case MENU_BUTTON_RIGHT: @@ -259,7 +260,7 @@ void ScreenJukebox::Input( const DeviceInput& DeviceI, const InputEventType type } } - ScreenAttract::AttractInput( DeviceI, type, GameI, MenuI, StyleI, this ); + ScreenAttract::AttractInput( input, this ); } void ScreenJukebox::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenJukebox.h b/stepmania/src/ScreenJukebox.h index 4d56504f31..6584793655 100644 --- a/stepmania/src/ScreenJukebox.h +++ b/stepmania/src/ScreenJukebox.h @@ -12,7 +12,7 @@ public: ScreenJukebox( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void SetSong(); diff --git a/stepmania/src/ScreenManager.cpp b/stepmania/src/ScreenManager.cpp index 78b7b6edb1..18ed99a285 100644 --- a/stepmania/src/ScreenManager.cpp +++ b/stepmania/src/ScreenManager.cpp @@ -433,7 +433,7 @@ void ScreenManager::Draw() } -void ScreenManager::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenManager::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenManager::Input( %d-%d, %d-%d, %d-%d, %d-%d )", // DeviceI.device, DeviceI.button, GameI.controller, GameI.button, MenuI.player, MenuI.button, StyleI.player, StyleI.col ); @@ -445,7 +445,7 @@ void ScreenManager::Input( const DeviceInput& DeviceI, const InputEventType type for( unsigned i = 0; i < g_OverlayScreens.size(); ++i ) { Screen *pScreen = g_OverlayScreens[i]; - if( pScreen->OverlayInput(DeviceI, type, GameI, MenuI, StyleI) ) + if( pScreen->OverlayInput(input) ) return; } @@ -455,7 +455,7 @@ void ScreenManager::Input( const DeviceInput& DeviceI, const InputEventType type return; if( !g_ScreenStack.empty() ) - g_ScreenStack.back().m_pScreen->Input( DeviceI, type, GameI, MenuI, StyleI ); + g_ScreenStack.back().m_pScreen->Input( input ); } /* Just create a new screen; don't do any associated cleanup. */ diff --git a/stepmania/src/ScreenManager.h b/stepmania/src/ScreenManager.h index d31f0bffe3..2e83ce27ab 100644 --- a/stepmania/src/ScreenManager.h +++ b/stepmania/src/ScreenManager.h @@ -15,6 +15,7 @@ class Actor; class Screen; struct Menu; struct lua_State; +class InputEventPlus; class ScreenManager @@ -26,7 +27,7 @@ public: // pass these messages along to the current state void Update( float fDeltaTime ); void Draw(); - void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + void Input( const InputEventPlus &input ); // Main screen stack management void SetNewScreen( const CString &sName ); diff --git a/stepmania/src/ScreenMapControllers.cpp b/stepmania/src/ScreenMapControllers.cpp index e4535bd8df..f01392c638 100644 --- a/stepmania/src/ScreenMapControllers.cpp +++ b/stepmania/src/ScreenMapControllers.cpp @@ -10,6 +10,7 @@ #include "Game.h" #include "ScreenDimensions.h" #include "Command.h" +#include "InputEventPlus.h" #if defined(XBOX) #include "HelpDisplay.h" //We still need this for Xbox controller mapping. #endif @@ -162,34 +163,34 @@ static bool IsAxis( const DeviceInput& DeviceI ) return false; } -void ScreenMapControllers::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenMapControllers::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS && type != IET_SLOW_REPEAT ) + if( input.type != IET_FIRST_PRESS && input.type != IET_SLOW_REPEAT ) return; // ignore LOG->Trace( "ScreenMapControllers::Input(): device: %d, button: %d", - DeviceI.device, DeviceI.button ); + input.DeviceI.device, input.DeviceI.button ); - int button = DeviceI.button; + int button = input.DeviceI.button; #ifdef _XBOX - if(!m_iWaitingForPress && DeviceI.device == DEVICE_JOY1) + if( !m_iWaitingForPress && input.DeviceI.device == DEVICE_JOY1 ) { // map the xbox controller buttons to the keyboard equivalents - if(DeviceI.button == JOY_HAT_LEFT) + if( input.DeviceI.button == JOY_HAT_LEFT ) button = KEY_LEFT; - else if(DeviceI.button == JOY_HAT_RIGHT) + else if( input.DeviceI.button == JOY_HAT_RIGHT ) button = KEY_RIGHT; - else if(DeviceI.button == JOY_HAT_UP) + else if( input.DeviceI.button == JOY_HAT_UP ) button = KEY_UP; - else if(DeviceI.button == JOY_HAT_DOWN) + else if( input.DeviceI.button == JOY_HAT_DOWN ) button = KEY_DOWN; - else if(DeviceI.button == JOY_AUX_1) + else if( input.DeviceI.button == JOY_AUX_1 ) button = KEY_ENTER; - else if(DeviceI.button == JOY_AUX_2) + else if( input.DeviceI.button == JOY_AUX_2 ) button = KEY_ESC; - else if(DeviceI.button == JOY_1 || DeviceI.button == JOY_2 || - DeviceI.button == JOY_3 || DeviceI.button == JOY_4) + else if( input.DeviceI.button == JOY_1 || input.DeviceI.button == JOY_2 || + input.DeviceI.button == JOY_3 || input.DeviceI.button == JOY_4 ) button = KEY_DEL; } #endif @@ -206,7 +207,7 @@ void ScreenMapControllers::Input( const DeviceInput& DeviceI, const InputEventTy if( m_iWaitingForPress ) { /* Don't allow function keys to be mapped. */ - if ( DeviceI.device == DEVICE_KEYBOARD && (DeviceI.button >= KEY_F1 && DeviceI.button <= KEY_F12) ) + if( input.DeviceI.device == DEVICE_KEYBOARD && (input.DeviceI.button >= KEY_F1 && input.DeviceI.button <= KEY_F12) ) { m_textError.SetText( "That key can not be mapped." ); SCREENMAN->PlayInvalidSound(); @@ -220,19 +221,19 @@ void ScreenMapControllers::Input( const DeviceInput& DeviceI, const InputEventTy { if( m_DeviceIToMap.IsValid() && !IsAxis(m_DeviceIToMap) && - IsAxis(DeviceI) ) + IsAxis(input.DeviceI) ) { LOG->Trace("Ignored input; non-axis event already received"); return; // ignore this press } - m_DeviceIToMap = DeviceI; + m_DeviceIToMap = input.DeviceI; } } #ifdef _XBOX - else if( DeviceI.device == DEVICE_JOY1 ) + else if( input.DeviceI.device == DEVICE_JOY1 ) #else - else if( DeviceI.device == DEVICE_KEYBOARD ) + else if( input.DeviceI.device == DEVICE_KEYBOARD ) #endif { switch( button ) @@ -311,7 +312,7 @@ void ScreenMapControllers::Input( const DeviceInput& DeviceI, const InputEventTy } } -// Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default handler +// Screen::Input( input ); // default handler LOG->Trace( "m_iCurSlot: %d m_iCurController: %d m_iCurButton: %d", m_iCurSlot, m_iCurController, m_iCurButton ); diff --git a/stepmania/src/ScreenMapControllers.h b/stepmania/src/ScreenMapControllers.h index 572502a269..870aa34aff 100644 --- a/stepmania/src/ScreenMapControllers.h +++ b/stepmania/src/ScreenMapControllers.h @@ -17,7 +17,7 @@ public: virtual ~ScreenMapControllers(); virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); private: void KeyLeft(); diff --git a/stepmania/src/ScreenNameEntry.cpp b/stepmania/src/ScreenNameEntry.cpp index 2175cd3ccb..2558a4ae13 100644 --- a/stepmania/src/ScreenNameEntry.cpp +++ b/stepmania/src/ScreenNameEntry.cpp @@ -21,6 +21,7 @@ #include "PlayerState.h" #include "Style.h" #include "NoteSkinManager.h" +#include "InputEventPlus.h" // @@ -343,30 +344,30 @@ void ScreenNameEntry::DrawPrimitives() } } -void ScreenNameEntry::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenNameEntry::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenNameEntry::Input()" ); if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) return; - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; // ignore - if( StyleI.IsValid() && m_bStillEnteringName[StyleI.player]) + if( input.StyleI.IsValid() && m_bStillEnteringName[input.StyleI.player]) { - int StringIndex = m_ColToStringIndex[StyleI.player][StyleI.col]; - if(StringIndex != -1) + int iStringIndex = m_ColToStringIndex[input.StyleI.player][input.StyleI.col]; + if( iStringIndex != -1 ) { - m_ReceptorArrowRow[StyleI.player].Step( StyleI.col, TNS_MARVELOUS ); + m_ReceptorArrowRow[input.StyleI.player].Step( input.StyleI.col, TNS_MARVELOUS ); m_soundStep.Play(); char c = NAME_CHARS[GetClosestCharIndex(m_fFakeBeat)]; - m_textSelectedChars[StyleI.player][StyleI.col].SetText( ssprintf("%c",c) ); - m_sSelectedName[StyleI.player][StringIndex] = c; + m_textSelectedChars[input.StyleI.player][input.StyleI.col].SetText( ssprintf("%c",c) ); + m_sSelectedName[input.StyleI.player][iStringIndex] = c; } } - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); } void ScreenNameEntry::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenNameEntry.h b/stepmania/src/ScreenNameEntry.h index d486268cfe..69433d7230 100644 --- a/stepmania/src/ScreenNameEntry.h +++ b/stepmania/src/ScreenNameEntry.h @@ -18,7 +18,7 @@ public: virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuStart( PlayerNumber pn ); diff --git a/stepmania/src/ScreenNameEntryTraditional.cpp b/stepmania/src/ScreenNameEntryTraditional.cpp index 686a858e4e..cb705928b4 100644 --- a/stepmania/src/ScreenNameEntryTraditional.cpp +++ b/stepmania/src/ScreenNameEntryTraditional.cpp @@ -508,12 +508,12 @@ void ScreenNameEntryTraditional::Update( float fDelta ) ScreenWithMenuElements::Update(fDelta); } -void ScreenNameEntryTraditional::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenNameEntryTraditional::Input( const InputEventPlus &input ) { if( IsTransitioning() ) return; - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenNameEntryTraditional::ChangeDisplayedFeat() diff --git a/stepmania/src/ScreenNameEntryTraditional.h b/stepmania/src/ScreenNameEntryTraditional.h index eaacf8e405..199d37b0ad 100644 --- a/stepmania/src/ScreenNameEntryTraditional.h +++ b/stepmania/src/ScreenNameEntryTraditional.h @@ -47,7 +47,7 @@ public: void Update( float fDeltaTime ); void HandleScreenMessage( const ScreenMessage SM ); - void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + void Input( const InputEventPlus &input ); void MenuStart( PlayerNumber pn, const InputEventType type ); void MenuSelect( PlayerNumber pn, const InputEventType type ); diff --git a/stepmania/src/ScreenNetRoom.cpp b/stepmania/src/ScreenNetRoom.cpp index 0e2b2a96ef..b04c546d0a 100644 --- a/stepmania/src/ScreenNetRoom.cpp +++ b/stepmania/src/ScreenNetRoom.cpp @@ -10,6 +10,7 @@ #include "Command.h" #include "WheelItemBase.h" #include "RageLog.h" +#include "InputEventPlus.h" #define TITLEBG_WIDTH THEME->GetMetricF(m_sName,"TitleBGWidth") #define TITLEBG_HEIGHT THEME->GetMetricF(m_sName,"TitleBGHeight") @@ -66,14 +67,12 @@ void ScreenNetRoom::Init() NSMAN->ReportNSSOnOff(7); } -void ScreenNetRoom::Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ) +void ScreenNetRoom::Input( const InputEventPlus &input ) { - if (((MenuI.button == MENU_BUTTON_LEFT) || (MenuI.button == MENU_BUTTON_RIGHT)) && (type == IET_RELEASE)) + if (((input.MenuI.button == MENU_BUTTON_LEFT) || (input.MenuI.button == MENU_BUTTON_RIGHT)) && (input.type == IET_RELEASE)) m_RoomWheel.Move(0); - ScreenNetSelectBase::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenNetSelectBase::Input( input ); } void ScreenNetRoom::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenNetRoom.h b/stepmania/src/ScreenNetRoom.h index 0629ccaabc..a3ced418fd 100644 --- a/stepmania/src/ScreenNetRoom.h +++ b/stepmania/src/ScreenNetRoom.h @@ -27,9 +27,7 @@ class ScreenNetRoom : public ScreenNetSelectBase public: ScreenNetRoom( const CString& sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); protected: diff --git a/stepmania/src/ScreenNetSelectBase.cpp b/stepmania/src/ScreenNetSelectBase.cpp index fe338c98e1..d7500ac9b5 100644 --- a/stepmania/src/ScreenNetSelectBase.cpp +++ b/stepmania/src/ScreenNetSelectBase.cpp @@ -12,6 +12,7 @@ #include "NetworkSyncManager.h" #include "RageUtil.h" #include "GameState.h" +#include "InputEventPlus.h" #define CHATINPUT_WIDTH THEME->GetMetricF(m_sName,"ChatInputBoxWidth") #define CHATINPUT_HEIGHT THEME->GetMetricF(m_sName,"ChatInputBoxHeight") @@ -88,14 +89,12 @@ void ScreenNetSelectBase::Init() return; } -void ScreenNetSelectBase::Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ) +void ScreenNetSelectBase::Input( const InputEventPlus &input ) { if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) return; - if( (type != IET_FIRST_PRESS) && (type != IET_SLOW_REPEAT) && (type != IET_FAST_REPEAT ) ) + if( (input.type != IET_FIRST_PRESS) && (input.type != IET_SLOW_REPEAT) && (input.type != IET_FAST_REPEAT ) ) return; bool bHoldingShift = @@ -107,7 +106,7 @@ void ScreenNetSelectBase::Input( const DeviceInput& DeviceI, const InputEventTyp INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)) || (!NSMAN->useSMserver); //If we are disconnected, assume no chatting - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case KEY_ENTER: case KEY_KP_ENTER: @@ -127,7 +126,7 @@ void ScreenNetSelectBase::Input( const DeviceInput& DeviceI, const InputEventTyp break; default: char c; - c = DeviceI.ToChar(); + c = input.DeviceI.ToChar(); if( bHoldingShift && !bHoldingCtrl ) { @@ -172,7 +171,7 @@ void ScreenNetSelectBase::Input( const DeviceInput& DeviceI, const InputEventTyp return; break; } - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler + Screen::Input( input ); // default input handler } void ScreenNetSelectBase::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenNetSelectBase.h b/stepmania/src/ScreenNetSelectBase.h index 8650a36a1a..34b3a79759 100644 --- a/stepmania/src/ScreenNetSelectBase.h +++ b/stepmania/src/ScreenNetSelectBase.h @@ -14,9 +14,7 @@ public: ScreenNetSelectBase( const CString& sName ); virtual void Init(); - void Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ); + void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void TweenOffScreen(); diff --git a/stepmania/src/ScreenNetSelectMusic.cpp b/stepmania/src/ScreenNetSelectMusic.cpp index ca27a4e32c..71b50cc31a 100644 --- a/stepmania/src/ScreenNetSelectMusic.cpp +++ b/stepmania/src/ScreenNetSelectMusic.cpp @@ -21,6 +21,7 @@ #include "InputMapper.h" #include "RageLog.h" #include "song.h" +#include "InputEventPlus.h" AutoScreenMessage( SM_NoSongs ) AutoScreenMessage( SM_ChangeSong ) @@ -105,9 +106,7 @@ void ScreenNetSelectMusic::Init() m_bAllowInput = false; } -void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ) +void ScreenNetSelectMusic::Input( const InputEventPlus &input ) { if( !m_bAllowInput ) return; @@ -115,13 +114,13 @@ void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) return; - if ( type == IET_RELEASE ) + if ( input.type == IET_RELEASE ) { m_MusicWheel.Move(0); return; } - if( (type != IET_FIRST_PRESS) && (type != IET_SLOW_REPEAT) && (type != IET_FAST_REPEAT ) ) + if( (input.type != IET_FIRST_PRESS) && (input.type != IET_SLOW_REPEAT) && (input.type != IET_FAST_REPEAT ) ) return; bool bHoldingCtrl = @@ -129,7 +128,7 @@ void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RCTRL)) || (!NSMAN->useSMserver); //If we are disconnected, assume no chatting - char c = (char) toupper(DeviceI.ToChar() ); + char c = (char) toupper(input.DeviceI.ToChar() ); if ( bHoldingCtrl && ( c >= 'A' ) && ( c <= 'Z' ) ) { @@ -146,7 +145,7 @@ void ScreenNetSelectMusic::Input( const DeviceInput& DeviceI, const InputEventTy //m_MusicWheel.Move( -1 ); } - ScreenNetSelectBase::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenNetSelectBase::Input( input ); } void ScreenNetSelectMusic::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenNetSelectMusic.h b/stepmania/src/ScreenNetSelectMusic.h index 782472e68a..0138c554dc 100644 --- a/stepmania/src/ScreenNetSelectMusic.h +++ b/stepmania/src/ScreenNetSelectMusic.h @@ -24,9 +24,7 @@ public: ScreenNetSelectMusic( const CString& sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, - const GameInput& GameI, const MenuInput& MenuI, - const StyleInput& StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void UpdateSongsListPos(); diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index cd08a6cd48..c2143fa033 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -14,6 +14,7 @@ #include "GameCommand.h" #include "OptionRowHandler.h" #include "LuaBinding.h" +#include "InputEventPlus.h" /* @@ -580,32 +581,32 @@ void ScreenOptions::Update( float fDeltaTime ) ScreenWithMenuElements::Update( fDeltaTime ); } -void ScreenOptions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenOptions::Input( const InputEventPlus &input ) { /* Allow input when transitioning in (m_In.IsTransitioning()), but ignore it * when we're transitioning out. */ if( m_Cancel.IsTransitioning() || m_Out.IsTransitioning() || m_fLockInputSecs > 0 ) return; - if( !GAMESTATE->IsHumanPlayer(MenuI.player) ) + if( !GAMESTATE->IsHumanPlayer(input.MenuI.player) ) return; - if( type == IET_RELEASE ) + if( input.type == IET_RELEASE ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_START: case MENU_BUTTON_SELECT: case MENU_BUTTON_RIGHT: case MENU_BUTTON_LEFT: - INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_START) ); - INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_RIGHT) ); - INPUTMAPPER->ResetKeyRepeat( MenuInput(MenuI.player, MENU_BUTTON_LEFT) ); + INPUTMAPPER->ResetKeyRepeat( MenuInput(input.MenuI.player, MENU_BUTTON_START) ); + INPUTMAPPER->ResetKeyRepeat( MenuInput(input.MenuI.player, MENU_BUTTON_RIGHT) ); + INPUTMAPPER->ResetKeyRepeat( MenuInput(input.MenuI.player, MENU_BUTTON_LEFT) ); } } // default input handler - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); } void ScreenOptions::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenOptions.h b/stepmania/src/ScreenOptions.h index 7b7fc650f7..2d8959d902 100644 --- a/stepmania/src/ScreenOptions.h +++ b/stepmania/src/ScreenOptions.h @@ -33,7 +33,7 @@ public: void InitMenu( const vector &vDefs, const vector &vHands ); virtual ~ScreenOptions(); virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); protected: diff --git a/stepmania/src/ScreenPackages.cpp b/stepmania/src/ScreenPackages.cpp index cc27139dcb..fb9e4c0d8d 100644 --- a/stepmania/src/ScreenPackages.cpp +++ b/stepmania/src/ScreenPackages.cpp @@ -136,9 +136,9 @@ void ScreenPackages::HandleScreenMessage( const ScreenMessage SM ) ScreenWithMenuElements::HandleScreenMessage( SM ); } -void ScreenPackages::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenPackages::Input( const InputEventPlus &input ) { - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenPackages::Update( float fDeltaTime ) diff --git a/stepmania/src/ScreenPackages.h b/stepmania/src/ScreenPackages.h index bbf009fe06..dcc83d508d 100644 --- a/stepmania/src/ScreenPackages.h +++ b/stepmania/src/ScreenPackages.h @@ -15,7 +15,7 @@ public: ScreenPackages( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuStart( PlayerNumber pn ); diff --git a/stepmania/src/ScreenPlayerOptions.cpp b/stepmania/src/ScreenPlayerOptions.cpp index 30e0be13fa..581b700999 100644 --- a/stepmania/src/ScreenPlayerOptions.cpp +++ b/stepmania/src/ScreenPlayerOptions.cpp @@ -13,6 +13,7 @@ #include "Style.h" #include "PlayerState.h" #include "Foreach.h" +#include "InputEventPlus.h" REGISTER_SCREEN_CLASS( ScreenPlayerOptions ); ScreenPlayerOptions::ScreenPlayerOptions( CString sClassName ) : @@ -74,13 +75,13 @@ void ScreenPlayerOptions::BeginScreen() } } -void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenPlayerOptions::Input( const InputEventPlus &input ) { if( m_bAskOptionsMessage && - type == IET_FIRST_PRESS && + input.type == IET_FIRST_PRESS && !m_In.IsTransitioning() && - MenuI.IsValid() && - MenuI.button == MENU_BUTTON_START ) + input.MenuI.IsValid() && + input.MenuI.button == MENU_BUTTON_START ) { if( m_bAcceptedChoices && !m_bGoToOptions ) { @@ -90,8 +91,8 @@ void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventTyp } } - PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( GameI.controller ); - if( GAMESTATE->IsHumanPlayer(pn) && CodeDetector::EnteredCode(GameI.controller,CODE_CANCEL_ALL_PLAYER_OPTIONS) ) + PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( input.GameI.controller ); + if( GAMESTATE->IsHumanPlayer(pn) && CodeDetector::EnteredCode(input.GameI.controller,CODE_CANCEL_ALL_PLAYER_OPTIONS) ) { if( m_CancelAll.IsLoaded() ) m_CancelAll.Play(); @@ -112,10 +113,10 @@ void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventTyp } } - ScreenOptionsMaster::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenOptionsMaster::Input( input ); // UGLY: Update m_Disqualified whenever Start is pressed - if( GAMESTATE->IsHumanPlayer(pn) && MenuI.IsValid() && MenuI.button == MENU_BUTTON_START ) + if( GAMESTATE->IsHumanPlayer(pn) && input.MenuI.IsValid() && input.MenuI.button == MENU_BUTTON_START ) { int row = m_iCurrentRow[pn]; UpdateDisqualified( row, pn ); diff --git a/stepmania/src/ScreenPlayerOptions.h b/stepmania/src/ScreenPlayerOptions.h index 571abf5180..464906ec99 100644 --- a/stepmania/src/ScreenPlayerOptions.h +++ b/stepmania/src/ScreenPlayerOptions.h @@ -11,7 +11,7 @@ public: virtual void Init(); virtual void BeginScreen(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); bool GetGoToOptions() const { return m_bGoToOptions; } diff --git a/stepmania/src/ScreenPrompt.cpp b/stepmania/src/ScreenPrompt.cpp index bc4aab655b..7b0d62923e 100644 --- a/stepmania/src/ScreenPrompt.cpp +++ b/stepmania/src/ScreenPrompt.cpp @@ -8,6 +8,7 @@ #include "ThemeManager.h" #include "ScreenDimensions.h" #include "ActorUtil.h" +#include "InputEventPlus.h" PromptAnswer ScreenPrompt::s_LastAnswer = ANSWER_YES; bool ScreenPrompt::s_bCancelledLast = false; @@ -90,19 +91,19 @@ void ScreenPrompt::BeginScreen() m_In.StartTransitioning(); } -void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenPrompt::Input( const InputEventPlus &input ) { if( m_In.IsTransitioning() || m_Out.IsTransitioning() ) return; - if( DeviceI.device==DEVICE_KEYBOARD && type==IET_FIRST_PRESS ) + if( input.DeviceI.device==DEVICE_KEYBOARD && input.type==IET_FIRST_PRESS ) { PlayerNumber pn; if ( GAMESTATE->GetCurrentStyle() == NULL ) - pn = (PlayerNumber)GameI.controller; + pn = (PlayerNumber)input.GameI.controller; else - pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( GameI.controller ); - switch( DeviceI.button ) + pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( input.GameI.controller ); + switch( input.DeviceI.button ) { case KEY_LEFT: this->MenuLeft( pn ); @@ -113,7 +114,7 @@ void ScreenPrompt::Input( const DeviceInput& DeviceI, const InputEventType type, } } - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } bool ScreenPrompt::CanGoRight() diff --git a/stepmania/src/ScreenPrompt.h b/stepmania/src/ScreenPrompt.h index c53994ffb3..bae504fb0c 100644 --- a/stepmania/src/ScreenPrompt.h +++ b/stepmania/src/ScreenPrompt.h @@ -29,7 +29,7 @@ public: ScreenPrompt( const CString &sScreenName ); virtual void Init(); virtual void BeginScreen(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); static PromptAnswer s_LastAnswer; static bool s_bCancelledLast; diff --git a/stepmania/src/ScreenRanking.cpp b/stepmania/src/ScreenRanking.cpp index 162611fe6c..04d00bb8fc 100644 --- a/stepmania/src/ScreenRanking.cpp +++ b/stepmania/src/ScreenRanking.cpp @@ -402,15 +402,15 @@ ScreenRanking::~ScreenRanking() { } -void ScreenRanking::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenRanking::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenRanking::Input()" ); // If manually scrolling, then pass the input to Scree::Input so it will call Menu* if( (bool)MANUAL_SCROLLING ) - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); else - ScreenAttract::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenAttract::Input( input ); } void ScreenRanking::Scroll( int iDir ) diff --git a/stepmania/src/ScreenRanking.h b/stepmania/src/ScreenRanking.h index 1480645cdd..6e120e8e90 100644 --- a/stepmania/src/ScreenRanking.h +++ b/stepmania/src/ScreenRanking.h @@ -37,7 +37,7 @@ public: virtual void Init(); ~ScreenRanking(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void MenuLeft( PlayerNumber pn, const InputEventType type ) { Scroll(-1); } virtual void MenuRight( PlayerNumber pn, const InputEventType type ) { Scroll(+1); } virtual void MenuUp( PlayerNumber pn, const InputEventType type ) { Scroll(-1); } diff --git a/stepmania/src/ScreenSandbox.cpp b/stepmania/src/ScreenSandbox.cpp index 557d8ec1c9..7cc12bedd1 100644 --- a/stepmania/src/ScreenSandbox.cpp +++ b/stepmania/src/ScreenSandbox.cpp @@ -23,9 +23,9 @@ void ScreenSandbox::HandleScreenMessage( const ScreenMessage SM ) Screen::HandleScreenMessage( SM ); } -void ScreenSandbox::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSandbox::Input( const InputEventPlus &input ) { - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); + Screen::Input( input ); } void ScreenSandbox::Update( float fDeltaTime ) diff --git a/stepmania/src/ScreenSandbox.h b/stepmania/src/ScreenSandbox.h index a4af8f6914..8aa4b39ea9 100644 --- a/stepmania/src/ScreenSandbox.h +++ b/stepmania/src/ScreenSandbox.h @@ -8,7 +8,7 @@ class ScreenSandbox : public Screen public: ScreenSandbox( CString sName ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void Update(float f); virtual void DrawPrimitives(); diff --git a/stepmania/src/ScreenSelect.cpp b/stepmania/src/ScreenSelect.cpp index 2b7bcebc41..d5a2816864 100644 --- a/stepmania/src/ScreenSelect.cpp +++ b/stepmania/src/ScreenSelect.cpp @@ -9,6 +9,7 @@ #include "GameCommand.h" #include "LightsManager.h" #include "Command.h" +#include "InputEventPlus.h" #define CHOICE_NAMES THEME->GetMetric (m_sName,"ChoiceNames") #define CHOICE( s ) THEME->GetMetricM(m_sName,ssprintf("Choice%s",s.c_str())) @@ -129,7 +130,7 @@ void ScreenSelect::DrawPrimitives() Screen::DrawPrimitives(); } -void ScreenSelect::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSelect::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenSelect::Input()" ); @@ -143,10 +144,10 @@ void ScreenSelect::Input( const DeviceInput& DeviceI, const InputEventType type, // user will still be on the title menu. bool bAllowJoinInput = !ALLOW_DISABLED_PLAYER_INPUT; - if( MenuI.button == MENU_BUTTON_COIN || - (bAllowJoinInput && Screen::JoinInput(MenuI)) ) + if( input.MenuI.button == MENU_BUTTON_COIN || + (bAllowJoinInput && Screen::JoinInput(input.MenuI)) ) { - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) this->UpdateSelectableChoices(); if( !ALLOW_DISABLED_PLAYER_INPUT ) @@ -154,7 +155,7 @@ void ScreenSelect::Input( const DeviceInput& DeviceI, const InputEventType type, } // block input of disabled players - if( !ALLOW_DISABLED_PLAYER_INPUT && !GAMESTATE->IsPlayerEnabled(MenuI.player) ) + if( !ALLOW_DISABLED_PLAYER_INPUT && !GAMESTATE->IsPlayerEnabled(input.MenuI.player) ) return; if( IsTransitioning() ) @@ -162,13 +163,13 @@ void ScreenSelect::Input( const DeviceInput& DeviceI, const InputEventType type, for( unsigned i = 0; i < m_aCodes.size(); ++i ) { - if( !m_aCodes[i].EnteredCode( GameI.controller ) ) + if( !m_aCodes[i].EnteredCode( input.GameI.controller ) ) continue; LOG->Trace("entered code for index %d", i); - m_aCodeChoices[i].Apply( MenuI.player ); + m_aCodeChoices[i].Apply( input.MenuI.player ); } - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler + Screen::Input( input ); // default input handler } void ScreenSelect::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenSelect.h b/stepmania/src/ScreenSelect.h index 7e2fb92642..c8be4a15fd 100644 --- a/stepmania/src/ScreenSelect.h +++ b/stepmania/src/ScreenSelect.h @@ -20,7 +20,7 @@ public: virtual void Update( float fDelta ); virtual void DrawPrimitives(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleMessage( const CString &sMessage ); diff --git a/stepmania/src/ScreenSelectCharacter.cpp b/stepmania/src/ScreenSelectCharacter.cpp index 8fb7fb0f45..7f7cf646f4 100644 --- a/stepmania/src/ScreenSelectCharacter.cpp +++ b/stepmania/src/ScreenSelectCharacter.cpp @@ -167,14 +167,14 @@ ScreenSelectCharacter::~ScreenSelectCharacter() } -void ScreenSelectCharacter::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSelectCharacter::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenSelectCharacter::Input()" ); if( IsTransitioning() ) return; - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler + Screen::Input( input ); // default input handler } void ScreenSelectCharacter::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenSelectCharacter.h b/stepmania/src/ScreenSelectCharacter.h index 07f2819c0b..6811a8c081 100644 --- a/stepmania/src/ScreenSelectCharacter.h +++ b/stepmania/src/ScreenSelectCharacter.h @@ -20,7 +20,7 @@ public: virtual void Init(); virtual ~ScreenSelectCharacter(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void MenuLeft( PlayerNumber pn ); diff --git a/stepmania/src/ScreenSelectGroup.cpp b/stepmania/src/ScreenSelectGroup.cpp index eaac64935d..b1936a08ac 100644 --- a/stepmania/src/ScreenSelectGroup.cpp +++ b/stepmania/src/ScreenSelectGroup.cpp @@ -137,14 +137,14 @@ void ScreenSelectGroup::Init() } -void ScreenSelectGroup::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSelectGroup::Input( const InputEventPlus &input ) { LOG->Trace( "ScreenSelectGroup::Input()" ); if( IsTransitioning() ) return; - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default input handler + Screen::Input( input ); // default input handler } void ScreenSelectGroup::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenSelectGroup.h b/stepmania/src/ScreenSelectGroup.h index e44f48eb28..550cc39b44 100644 --- a/stepmania/src/ScreenSelectGroup.h +++ b/stepmania/src/ScreenSelectGroup.h @@ -17,7 +17,7 @@ public: ScreenSelectGroup( CString sName ); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); void AfterChange(); diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index cd5a24228e..8e6d5a92c4 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -29,6 +29,7 @@ #include "CommonMetrics.h" #include "BannerCache.h" #include "song.h" +#include "InputEventPlus.h" const int NUM_SCORE_DIGITS = 9; @@ -676,15 +677,16 @@ void ScreenSelectMusic::Update( float fDeltaTime ) CheckBackgroundRequests(); } -void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSelectMusic::Input( const InputEventPlus &input ) { // LOG->Trace( "ScreenSelectMusic::Input()" ); // debugging? // I just like being able to see untransliterated titles occasionally. - if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_F9 ) + if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_F9 ) { - if( type != IET_FIRST_PRESS ) return; + if( input.type != IET_FIRST_PRESS ) + return; PREFSMAN->m_bShowNativeLanguage.Set( !PREFSMAN->m_bShowNativeLanguage ); m_MusicWheel.RebuildAllMusicWheelItems(); if( SHOW_COURSE_CONTENTS ) @@ -692,29 +694,30 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, return; } - if( !GameI.IsValid() ) return; // don't care + if( !input.GameI.IsValid() ) + return; // don't care /* XXX: What's the difference between this and StyleI.player? */ /* StyleI won't be valid if it's a menu button that's pressed. * There's got to be a better way of doing this. -Chris */ - PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( GameI.controller ); + PlayerNumber pn = GAMESTATE->GetCurrentStyle()->ControllerToPlayerNumber( input.GameI.controller ); if( !GAMESTATE->IsHumanPlayer(pn) ) return; // Check for "Press START again for options" button press if( m_bMadeChoice && - MenuI.IsValid() && - MenuI.button == MENU_BUTTON_START && - type != IET_RELEASE && - type != IET_LEVEL_CHANGED && + input.MenuI.IsValid() && + input.MenuI.button == MENU_BUTTON_START && + input.type != IET_RELEASE && + input.type != IET_LEVEL_CHANGED && OPTIONS_MENU_AVAILABLE.GetValue() ) { if(m_bGoToOptions) return; /* got it already */ if(!m_bAllowOptionsMenu) return; /* not allowed */ if( !m_bAllowOptionsMenuRepeat && - (type == IET_SLOW_REPEAT || type == IET_FAST_REPEAT )) + (input.type == IET_SLOW_REPEAT || input.type == IET_FAST_REPEAT )) return; /* not allowed yet */ m_bGoToOptions = true; @@ -744,9 +747,9 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, SELECT_MENU_AVAILABLE && INPUTMAPPER->IsButtonDown( MenuInput(pn, MENU_BUTTON_SELECT) ); if( bSelectIsPressed ) { - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_LEFT: ChangeDifficulty( pn, -1 ); @@ -764,7 +767,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, } } - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_RIGHT: case MENU_BUTTON_LEFT: @@ -791,9 +794,9 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, if( bBothDown || bNeitherDown ) { m_MusicWheel.Move( 0 ); - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) { - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_LEFT: m_MusicWheel.ChangeMusic( -1 ); @@ -806,12 +809,12 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, } else if( bLeftIsDown ) { - if( type != IET_RELEASE ) + if( input.type != IET_RELEASE ) m_MusicWheel.Move( -1 ); } else if( bRightIsDown ) { - if( type != IET_RELEASE ) + if( input.type != IET_RELEASE ) m_MusicWheel.Move( +1 ); } else @@ -823,7 +826,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, // Reset the repeat timer when the button is released. // This fixes jumping when you release Left and Right after entering the sort // code at the same if L & R aren't released at the exact same time. - if( type == IET_RELEASE ) + if( input.type == IET_RELEASE ) { FOREACH_HumanPlayer( p ) { @@ -843,28 +846,28 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, // codes. Do default processing of Start AFTER detecting codes. This gives us a // change to return if Start is part of a code because we don't want to process // Start as "move to the next screen" if it was just part of a code. - switch( MenuI.button ) + switch( input.MenuI.button ) { - case MENU_BUTTON_UP: this->MenuUp( MenuI.player, type ); break; - case MENU_BUTTON_DOWN: this->MenuDown( MenuI.player, type ); break; - case MENU_BUTTON_LEFT: this->MenuLeft( MenuI.player, type ); break; - case MENU_BUTTON_RIGHT: this->MenuRight( MenuI.player, type ); break; + case MENU_BUTTON_UP: this->MenuUp( input.MenuI.player, input.type ); break; + case MENU_BUTTON_DOWN: this->MenuDown( input.MenuI.player, input.type ); break; + case MENU_BUTTON_LEFT: this->MenuLeft( input.MenuI.player, input.type ); break; + case MENU_BUTTON_RIGHT: this->MenuRight( input.MenuI.player, input.type ); break; case MENU_BUTTON_BACK: /* Don't make the user hold the back button if they're pressing escape and escape is the back button. */ - if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_ESC ) - this->MenuBack( MenuI.player ); + if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_ESC ) + this->MenuBack( input.MenuI.player ); else - Screen::MenuBack( MenuI.player, type ); + Screen::MenuBack( input.MenuI.player, input.type ); break; // Do the default handler for Start after detecting codes. // case MENU_BUTTON_START: this->MenuStart( MenuI.player, type ); break; - case MENU_BUTTON_COIN: this->MenuCoin( MenuI.player, type ); break; + case MENU_BUTTON_COIN: this->MenuCoin( input.MenuI.player, input.type ); break; } - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) { - if( CodeDetector::EnteredEasierDifficulty(GameI.controller) ) + if( CodeDetector::EnteredEasierDifficulty(input.GameI.controller) ) { if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) m_soundLocked.Play(); @@ -872,7 +875,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, ChangeDifficulty( pn, -1 ); return; } - if( CodeDetector::EnteredHarderDifficulty(GameI.controller) ) + if( CodeDetector::EnteredHarderDifficulty(input.GameI.controller) ) { if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) m_soundLocked.Play(); @@ -880,7 +883,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, ChangeDifficulty( pn, +1 ); return; } - if( CodeDetector::EnteredModeMenu(GameI.controller) ) + if( CodeDetector::EnteredModeMenu(input.GameI.controller) ) { if( MODE_MENU_AVAILABLE ) m_MusicWheel.ChangeSort( SORT_MODE_MENU ); @@ -888,7 +891,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, m_soundLocked.Play(); return; } - if( CodeDetector::EnteredNextSort(GameI.controller) ) + if( CodeDetector::EnteredNextSort(input.GameI.controller) ) { if( ( GAMESTATE->IsExtraStage() && !PREFSMAN->m_bPickExtraStage ) || GAMESTATE->IsExtraStage2() ) m_soundLocked.Play(); @@ -896,7 +899,7 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, m_MusicWheel.NextSort(); return; } - if( !GAMESTATE->IsExtraStage() && !GAMESTATE->IsExtraStage2() && CodeDetector::DetectAndAdjustMusicOptions(GameI.controller) ) + if( !GAMESTATE->IsExtraStage() && !GAMESTATE->IsExtraStage2() && CodeDetector::DetectAndAdjustMusicOptions(input.GameI.controller) ) { m_soundOptionsChange.Play(); MESSAGEMAN->Broadcast( ssprintf("PlayerOptionsChangedP%i", pn+1) ); @@ -905,9 +908,9 @@ void ScreenSelectMusic::Input( const DeviceInput& DeviceI, InputEventType type, } } - switch( MenuI.button ) + switch( input.MenuI.button ) { - case MENU_BUTTON_START: Screen::MenuStart( MenuI.player, type ); break; + case MENU_BUTTON_START: Screen::MenuStart( input.MenuI.player, input.type ); break; } } diff --git a/stepmania/src/ScreenSelectMusic.h b/stepmania/src/ScreenSelectMusic.h index 4544e76831..4534413cd1 100644 --- a/stepmania/src/ScreenSelectMusic.h +++ b/stepmania/src/ScreenSelectMusic.h @@ -34,7 +34,7 @@ public: virtual void BeginScreen(); virtual void Update( float fDeltaTime ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuStart( PlayerNumber pn ); diff --git a/stepmania/src/ScreenSetTime.cpp b/stepmania/src/ScreenSetTime.cpp index 1776520a2f..20143a1720 100644 --- a/stepmania/src/ScreenSetTime.cpp +++ b/stepmania/src/ScreenSetTime.cpp @@ -9,6 +9,7 @@ #include "DateTime.h" #include "EnumHelper.h" #include "arch/ArchHooks/ArchHooks.h" +#include "InputEventPlus.h" static const CString SetTimeSelectionNames[] = { "Year", @@ -108,15 +109,15 @@ void ScreenSetTime::Update( float fDelta ) m_textValue[day].SetText( ssprintf("%02d",now.tm_mday) ); } -void ScreenSetTime::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenSetTime::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS && type != IET_SLOW_REPEAT ) + if( input.type != IET_FIRST_PRESS && input.type != IET_SLOW_REPEAT ) return; // ignore if( IsTransitioning() ) return; - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default handler + Screen::Input( input ); // default handler } void ScreenSetTime::ChangeValue( int iDirection ) diff --git a/stepmania/src/ScreenSetTime.h b/stepmania/src/ScreenSetTime.h index cda14c0830..99e82716f2 100644 --- a/stepmania/src/ScreenSetTime.h +++ b/stepmania/src/ScreenSetTime.h @@ -22,7 +22,7 @@ public: virtual void Init(); virtual void Update( float fDelta ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void MenuUp( PlayerNumber pn ); virtual void MenuDown( PlayerNumber pn ); diff --git a/stepmania/src/ScreenSyncOverlay.cpp b/stepmania/src/ScreenSyncOverlay.cpp index 14b71e28c6..95f91c524d 100644 --- a/stepmania/src/ScreenSyncOverlay.cpp +++ b/stepmania/src/ScreenSyncOverlay.cpp @@ -5,6 +5,7 @@ #include "GameState.h" #include "song.h" #include "PrefsManager.h" +#include "InputEventPlus.h" static bool IsGameplay() { @@ -154,15 +155,15 @@ void ScreenSyncOverlay::UpdateText() m_textStatus.SetText( s ); } -bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +bool ScreenSyncOverlay::OverlayInput( const InputEventPlus &input ) { if( !IsGameplay() ) return false; - if( DeviceI.device != DEVICE_KEYBOARD ) + if( input.DeviceI.device != DEVICE_KEYBOARD ) return false; - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case KEY_F4: case KEY_F9: @@ -179,7 +180,7 @@ bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEve return false; } - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case KEY_F4: SCREENMAN->SystemMessage( "Sync changes reverted." ); @@ -189,7 +190,7 @@ bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEve case KEY_F10: { float fDelta; - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case KEY_F9: fDelta = -0.02f; break; case KEY_F10: fDelta = +0.02f; break; @@ -197,8 +198,10 @@ bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEve } if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ) + { fDelta /= 20; - switch( type ) + } + switch( input.type ) { case IET_RELEASE: fDelta *= 0; break; case IET_SLOW_REPEAT: fDelta *= 0; break; @@ -215,7 +218,7 @@ bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEve case KEY_F12: { float fDelta; - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case KEY_F11: fDelta = +0.02f; break; // notes earlier case KEY_F12: fDelta = -0.02f; break; // notes earlier @@ -223,8 +226,10 @@ bool ScreenSyncOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEve } if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ) + { fDelta /= 20; /* 1ms */ - switch( type ) + } + switch( input.type ) { case IET_RELEASE: fDelta *= 0; break; case IET_SLOW_REPEAT: fDelta *= 0; break; diff --git a/stepmania/src/ScreenSyncOverlay.h b/stepmania/src/ScreenSyncOverlay.h index c337839c06..975d38288d 100644 --- a/stepmania/src/ScreenSyncOverlay.h +++ b/stepmania/src/ScreenSyncOverlay.h @@ -14,7 +14,7 @@ public: virtual ~ScreenSyncOverlay(); virtual void Init(); - bool OverlayInput( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + bool OverlayInput( const InputEventPlus &input ); void Update( float fDeltaTime ); diff --git a/stepmania/src/ScreenTest.cpp b/stepmania/src/ScreenTest.cpp index 1c322eff0b..7d8d096f4d 100644 --- a/stepmania/src/ScreenTest.cpp +++ b/stepmania/src/ScreenTest.cpp @@ -7,6 +7,7 @@ #include "GameSoundManager.h" #include "ThemeManager.h" #include "CommonMetrics.h" +#include "InputEventPlus.h" ScreenTest::~ScreenTest() @@ -48,25 +49,25 @@ void ScreenTest::Update(float f) { current->Update(f); Screen::Update(f); } void ScreenTest::HandleScreenMessage( const ScreenMessage SM ) { current->HandleScreenMessage(SM); } void ScreenTest::Draw() { current->Draw(); } -void ScreenTest::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTest::Input( const InputEventPlus &input ) { - if(DeviceI.device == DEVICE_KEYBOARD) + if( input.DeviceI.device == DEVICE_KEYBOARD ) { - if( DeviceI.button >= KEY_F9 && DeviceI.button <= KEY_F12 ) + if( input.DeviceI.button >= KEY_F9 && input.DeviceI.button <= KEY_F12 ) { - if( type != IET_FIRST_PRESS ) return; - SetScreen( DeviceI.button - KEY_F9 ); + if( input.type != IET_FIRST_PRESS ) return; + SetScreen( input.DeviceI.button - KEY_F9 ); return; } - if( DeviceI.button == KEY_ESC ) + if( input.DeviceI.button == KEY_ESC ) { - if( type != IET_FIRST_PRESS ) return; + if( input.type != IET_FIRST_PRESS ) return; SCREENMAN->SetNewScreen( INITIAL_SCREEN ); return; } } - current->Input( DeviceI, type, GameI, MenuI, StyleI ); + current->Input( input ); } /* diff --git a/stepmania/src/ScreenTest.h b/stepmania/src/ScreenTest.h index c9a99962f6..c4fe11aefb 100644 --- a/stepmania/src/ScreenTest.h +++ b/stepmania/src/ScreenTest.h @@ -10,7 +10,7 @@ public: ~ScreenTest(); virtual void Init(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); Screen *current; diff --git a/stepmania/src/ScreenTestFonts.cpp b/stepmania/src/ScreenTestFonts.cpp index f6dadb460b..fece2fbbe1 100644 --- a/stepmania/src/ScreenTestFonts.cpp +++ b/stepmania/src/ScreenTestFonts.cpp @@ -5,6 +5,7 @@ #include "ScreenTextEntry.h" #include "GameConstantsAndTypes.h" #include "ScreenDimensions.h" +#include "InputEventPlus.h" static const float LineWidth = 400; @@ -82,11 +83,11 @@ void ScreenTestFonts::DrawPrimitives() } -void ScreenTestFonts::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTestFonts::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case '[': txt.SetVertAlign(align_bottom); break; case '\\': txt.SetVertAlign(align_middle); break; diff --git a/stepmania/src/ScreenTestFonts.h b/stepmania/src/ScreenTestFonts.h index 545dfa537d..1d5bbc42f4 100644 --- a/stepmania/src/ScreenTestFonts.h +++ b/stepmania/src/ScreenTestFonts.h @@ -11,7 +11,7 @@ public: ScreenTestFonts( CString sName ); virtual void Init(); - void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + void Input( const InputEventPlus &input ); void DrawPrimitives(); void HandleScreenMessage( const ScreenMessage SM ); diff --git a/stepmania/src/ScreenTestInput.cpp b/stepmania/src/ScreenTestInput.cpp index 593588adb6..b6c0921579 100644 --- a/stepmania/src/ScreenTestInput.cpp +++ b/stepmania/src/ScreenTestInput.cpp @@ -11,6 +11,7 @@ #include "GameManager.h" #include "PrefsManager.h" #include "RageInput.h" +#include "InputEventPlus.h" REGISTER_SCREEN_CLASS( ScreenTestInput ); @@ -113,15 +114,15 @@ void ScreenTestInput::Update( float fDeltaTime ) } -void ScreenTestInput::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTestInput::Input( const InputEventPlus &input ) { - CString sMessage = DeviceI.toString(); - switch( type ) + CString sMessage = input.DeviceI.toString(); + switch( input.type ) { case IET_FIRST_PRESS: case IET_RELEASE: { - switch( type ) + switch( input.type ) { case IET_FIRST_PRESS: sMessage += "Pressed"; break; case IET_RELEASE: sMessage += "Released"; break; @@ -130,10 +131,10 @@ void ScreenTestInput::Input( const DeviceInput& DeviceI, const InputEventType ty } } - if( type != IET_FIRST_PRESS && type != IET_SLOW_REPEAT ) + if( input.type != IET_FIRST_PRESS && input.type != IET_SLOW_REPEAT ) return; // ignore - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default handler + Screen::Input( input ); // default handler } void ScreenTestInput::MenuStart( PlayerNumber pn ) diff --git a/stepmania/src/ScreenTestInput.h b/stepmania/src/ScreenTestInput.h index 0dd11b7e30..3e9a35fd2a 100644 --- a/stepmania/src/ScreenTestInput.h +++ b/stepmania/src/ScreenTestInput.h @@ -15,7 +15,7 @@ public: virtual ~ScreenTestInput(); virtual void Update( float fDelta ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void MenuStart( PlayerNumber pn ); virtual void MenuBack( PlayerNumber pn ); diff --git a/stepmania/src/ScreenTestLights.cpp b/stepmania/src/ScreenTestLights.cpp index f5f0142026..a5b9db2af4 100644 --- a/stepmania/src/ScreenTestLights.cpp +++ b/stepmania/src/ScreenTestLights.cpp @@ -9,6 +9,7 @@ #include "LightsManager.h" #include "Game.h" #include "ScreenDimensions.h" +#include "InputEventPlus.h" REGISTER_SCREEN_CLASS( ScreenTestLights ); @@ -88,12 +89,12 @@ void ScreenTestLights::Update( float fDeltaTime ) } -void ScreenTestLights::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTestLights::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS && type != IET_SLOW_REPEAT ) + if( input.type != IET_FIRST_PRESS && input.type != IET_SLOW_REPEAT ) return; // ignore - Screen::Input( DeviceI, type, GameI, MenuI, StyleI ); // default handler + Screen::Input( input ); // default handler } void ScreenTestLights::HandleScreenMessage( const ScreenMessage SM ) diff --git a/stepmania/src/ScreenTestLights.h b/stepmania/src/ScreenTestLights.h index 2659c92b73..74d5271a1e 100644 --- a/stepmania/src/ScreenTestLights.h +++ b/stepmania/src/ScreenTestLights.h @@ -13,7 +13,7 @@ public: virtual ~ScreenTestLights(); virtual void Update( float fDelta ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void MenuLeft( PlayerNumber pn ); diff --git a/stepmania/src/ScreenTestSound.cpp b/stepmania/src/ScreenTestSound.cpp index b2f9c26b90..97a152fd65 100644 --- a/stepmania/src/ScreenTestSound.cpp +++ b/stepmania/src/ScreenTestSound.cpp @@ -5,6 +5,7 @@ #include "RageSoundManager.h" #include "ThemeManager.h" #include "RageUtil.h" +#include "InputEventPlus.h" REGISTER_SCREEN_CLASS( ScreenTestSound ); ScreenTestSound::ScreenTestSound( CString sClassName ) : Screen( sClassName ) @@ -126,21 +127,21 @@ void ScreenTestSound::Update(float f) } } -void ScreenTestSound::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTestSound::Input( const InputEventPlus &input ) { - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return; // ignore - switch( DeviceI.device) + switch( input.DeviceI.device ) { case DEVICE_KEYBOARD: - switch( DeviceI.button ) + switch( input.DeviceI.button ) { case '1': case '2': case '3': case '4': - case '5': selected = DeviceI.button - '0'-1; break; + case '5': selected = input.DeviceI.button - '0'-1; break; case 'p': { /* We want to be able to read the position of copied sounds; if we let diff --git a/stepmania/src/ScreenTestSound.h b/stepmania/src/ScreenTestSound.h index 5e81c458cc..e064466b66 100644 --- a/stepmania/src/ScreenTestSound.h +++ b/stepmania/src/ScreenTestSound.h @@ -14,7 +14,7 @@ public: virtual void Init(); ~ScreenTestSound(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); void Update(float f); void UpdateText(int n); diff --git a/stepmania/src/ScreenTextEntry.cpp b/stepmania/src/ScreenTextEntry.cpp index 6177468829..6f74884b94 100644 --- a/stepmania/src/ScreenTextEntry.cpp +++ b/stepmania/src/ScreenTextEntry.cpp @@ -10,6 +10,7 @@ #include "ScreenDimensions.h" #include "ScreenPrompt.h" #include "ActorUtil.h" +#include "InputEventPlus.h" static const char* g_szKeys[NUM_KEYBOARD_ROWS][KEYS_PER_ROW] = @@ -219,19 +220,19 @@ void ScreenTextEntry::Update( float fDelta ) } } -void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTextEntry::Input( const InputEventPlus &input ) { if( m_In.IsTransitioning() || m_Out.IsTransitioning() || m_Cancel.IsTransitioning() ) return; //The user wants to input text traditionally - if ( g_bAllowOldKeyboardInput.Get() && ( type == IET_FIRST_PRESS ) ) + if( g_bAllowOldKeyboardInput.Get() && ( input.type == IET_FIRST_PRESS ) ) { - if ( DeviceI.button == KEY_BACK ) + if( input.DeviceI.button == KEY_BACK ) { BackspaceInAnswer(); } - else if ( DeviceI.ToChar() >= ' ' ) + else if( input.DeviceI.ToChar() >= ' ' ) { bool bIsHoldingShift = INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)) || @@ -239,7 +240,7 @@ void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType ty if ( bIsHoldingShift ) { - char c = (char)toupper( DeviceI.ToChar() ); + char c = (char)toupper( input.DeviceI.ToChar() ); switch( c ) { @@ -269,7 +270,9 @@ void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType ty AppendToAnswer( ssprintf( "%c", c ) ); } else - AppendToAnswer( ssprintf( "%c", DeviceI.ToChar() ) ); + { + AppendToAnswer( ssprintf( "%c", input.DeviceI.ToChar() ) ); + } //If the user wishes to select text in traditional way, start should finish text entry m_iFocusY = KEYBOARD_ROW_SPECIAL; @@ -280,7 +283,7 @@ void ScreenTextEntry::Input( const DeviceInput& DeviceI, const InputEventType ty } } - ScreenWithMenuElements::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenWithMenuElements::Input( input ); } void ScreenTextEntry::MoveX( int iDir ) diff --git a/stepmania/src/ScreenTextEntry.h b/stepmania/src/ScreenTextEntry.h index 6fee355e3e..18be1af366 100644 --- a/stepmania/src/ScreenTextEntry.h +++ b/stepmania/src/ScreenTextEntry.h @@ -46,7 +46,7 @@ public: virtual void BeginScreen(); virtual void Update( float fDelta ); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); static CString s_sLastAnswer; static bool s_bCancelledLast; diff --git a/stepmania/src/ScreenTitleMenu.cpp b/stepmania/src/ScreenTitleMenu.cpp index badaab94cb..c390f80bd9 100644 --- a/stepmania/src/ScreenTitleMenu.cpp +++ b/stepmania/src/ScreenTitleMenu.cpp @@ -17,6 +17,7 @@ #include "InputMapper.h" #include "ProfileManager.h" #include "CharacterManager.h" +#include "InputEventPlus.h" #define COIN_MODE_CHANGE_SCREEN THEME->GetMetric (m_sName,"CoinModeChangeScreen") @@ -58,20 +59,20 @@ ScreenTitleMenu::~ScreenTitleMenu() CHARMAN->UndemandGraphics(); } -void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ) +void ScreenTitleMenu::Input( const InputEventPlus &input ) { - LOG->Trace( "ScreenTitleMenu::Input( %d-%d )", DeviceI.device, DeviceI.button ); // debugging gameport joystick problem + LOG->Trace( "ScreenTitleMenu::Input( %d-%d )", input.DeviceI.device, input.DeviceI.button ); // debugging gameport joystick problem if( m_In.IsTransitioning() || m_Cancel.IsTransitioning() ) /* not m_Out */ return; - if( type == IET_FIRST_PRESS ) + if( input.type == IET_FIRST_PRESS ) { // // detect codes // - if( CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_THEME) || - CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_THEME2) ) + if( CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_THEME) || + CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_THEME2) ) { THEME->NextTheme(); ApplyGraphicOptions(); // update window title and icon @@ -79,8 +80,8 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty SCREENMAN->SetNewScreen( m_sName ); TEXTUREMAN->DoDelayedDelete(); } - if( CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_ANNOUNCER) || - CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_ANNOUNCER2) ) + if( CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_ANNOUNCER) || + CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_ANNOUNCER2) ) { ANNOUNCER->NextAnnouncer(); CString sName = ANNOUNCER->GetCurAnnouncerName(); @@ -88,8 +89,8 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty SCREENMAN->SystemMessage( "Announcer: "+sName ); SCREENMAN->SetNewScreen( m_sName ); } - if( CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_GAME) || - CodeDetector::EnteredCode(GameI.controller,CODE_NEXT_GAME2) ) + if( CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_GAME) || + CodeDetector::EnteredCode(input.GameI.controller,CODE_NEXT_GAME2) ) { vector vGames; GAMEMAN->GetEnabledGames( vGames ); @@ -113,7 +114,7 @@ void ScreenTitleMenu::Input( const DeviceInput& DeviceI, const InputEventType ty } } - ScreenSelectMaster::Input( DeviceI, type, GameI, MenuI, StyleI ); + ScreenSelectMaster::Input( input ); } void ScreenTitleMenu::HandleMessage( const CString& sMessage ) diff --git a/stepmania/src/ScreenTitleMenu.h b/stepmania/src/ScreenTitleMenu.h index bcf42175c9..5ad92a198c 100644 --- a/stepmania/src/ScreenTitleMenu.h +++ b/stepmania/src/ScreenTitleMenu.h @@ -12,7 +12,7 @@ public: virtual void Init(); virtual ~ScreenTitleMenu(); - virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); + virtual void Input( const InputEventPlus &input ); virtual void HandleMessage( const CString& sMessage ); diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 7067e5c687..426b210d10 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -28,6 +28,7 @@ #endif #include "Screen.h" +#include "InputEventPlus.h" #include "ScreenDimensions.h" #include "CodeDetector.h" #include "CommonMetrics.h" @@ -1289,13 +1290,13 @@ void InsertCredit() /* Returns true if the key has been handled and should be discarded, false if * the key should be sent on to screens. */ -bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput GameI, MenuInput MenuI, StyleInput StyleI ) +bool HandleGlobalInputs( const InputEventPlus &input ) { /* None of the globals keys act on types other than FIRST_PRESS */ - if( type != IET_FIRST_PRESS ) + if( input.type != IET_FIRST_PRESS ) return false; - switch( MenuI.button ) + switch( input.MenuI.button ) { case MENU_BUTTON_OPERATOR: @@ -1318,12 +1319,12 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam LOG->Trace( "Ignored coin insertion (editing)" ); break; } - InsertCoin( 1, &DeviceI.ts ); + InsertCoin( 1, &input.DeviceI.ts ); return false; // Attract need to know because they go to TitleMenu on > 1 credit } #ifndef __MACOSX__ - if(DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F4)) + if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F4) ) { if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ) @@ -1334,7 +1335,7 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam } } #else - if(DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_Cq)) + if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_Cq) ) { if(INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RMETA)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LMETA))) @@ -1346,19 +1347,23 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam } #endif + bool bDoScreenshot = +#if defined(__MACOSX__) + /* Pressing F13 on an Apple keyboard sends KEY_PRINT. + * However, notebooks don't have F13. Use cmd-F12 then*/ + input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F12) && + ( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LMETA)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RMETA)) ); +#else /* The default Windows message handler will capture the desktop window upon * pressing PrntScrn, or will capture the foregroud with focus upon pressing * Alt+PrntScrn. Windows will do this whether or not we save a screenshot * ourself by dumping the frame buffer. */ - /* Pressing F13 on an Apple keyboard sends KEY_PRINT. - * However, notebooks don't have F13. Use cmd-F12 then*/ // "if pressing PrintScreen and not pressing Alt" - if( (DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_PRTSC) && - !INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) && - !INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LALT))) || - (DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_F12) && - (INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RMETA)) || - INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LMETA))))) + input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_PRTSC) && + !INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) && + !INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)); +#endif + if( bDoScreenshot ) { // If holding LShift save uncompressed, else save compressed bool bSaveCompressed = !INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT) ); @@ -1366,7 +1371,7 @@ bool HandleGlobalInputs( DeviceInput DeviceI, InputEventType type, GameInput Gam return true; // handled } - if(DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_ENTER)) + if( input.DeviceI == DeviceInput(DEVICE_KEYBOARD, KEY_ENTER) ) { if( INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_RALT)) || INPUTFILTER->IsBeingPressed(DeviceInput(DEVICE_KEYBOARD, KEY_LALT)) ) @@ -1402,20 +1407,52 @@ void HandleInputEvents(float fDeltaTime) for( unsigned i=0; iDeviceToGame( DeviceI, GameI ); + INPUTMAPPER->DeviceToGame( input.DeviceI, input.GameI ); - if( GameI.IsValid() && type == IET_FIRST_PRESS ) - INPUTQUEUE->RememberInput( GameI ); - if( GameI.IsValid() ) + if( input.GameI.IsValid() && input.type == IET_FIRST_PRESS ) + INPUTQUEUE->RememberInput( input.GameI ); + if( input.GameI.IsValid() ) { - INPUTMAPPER->GameToMenu( GameI, MenuI ); - INPUTMAPPER->GameToStyle( GameI, StyleI ); + INPUTMAPPER->GameToMenu( input.GameI, input.MenuI ); + INPUTMAPPER->GameToStyle( input.GameI, input.StyleI ); + } + + if( !GAMESTATE->m_bMultiplayer ) + { + input.mp = MultiPlayer_INVALID; + } + else + { + // Translate input and sent to the appropriate player. Assume that all + // joystick devices are mapped the same as the master player. + if( input.DeviceI.IsJoystick() ) + { + DeviceInput _DeviceI = input.DeviceI; + _DeviceI.device = DEVICE_JOY1; + GameInput _GameI; + INPUTMAPPER->DeviceToGame( _DeviceI, _GameI ); + + if( input.GameI.IsValid() ) + { + StyleInput _StyleI; + INPUTMAPPER->GameToStyle( _GameI, _StyleI ); + input.mp = InputMapper::InputDeviceToMultiPlayer( input.DeviceI.device ); + } + + /* + // hack for testing with only one joytick + if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD,KEY_LSHIFT) ) ) + p = (MultiPlayer)(p + 1); + if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD,KEY_LCTRL) ) ) + p = (MultiPlayer)(p + 2); + if( INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD,KEY_LALT) ) ) + p = (MultiPlayer)(p + 4); + */ + } } // HACK: Numlock is read is being pressed if the NumLock light is on. @@ -1425,18 +1462,18 @@ void HandleInputEvents(float fDeltaTime) // if( DeviceI.device == DEVICE_KEYBOARD && DeviceI.button == KEY_NUMLOCK && type != IET_FIRST_PRESS ) // continue; // skip - if( HandleGlobalInputs(DeviceI, type, GameI, MenuI, StyleI ) ) + if( HandleGlobalInputs(input) ) continue; // skip // check back in event mode if( GAMESTATE->IsEventMode() && - CodeDetector::EnteredCode(GameI.controller,CODE_BACK_IN_EVENT_MODE) ) + CodeDetector::EnteredCode(input.GameI.controller,CODE_BACK_IN_EVENT_MODE) ) { - MenuI.player = PLAYER_1; - MenuI.button = MENU_BUTTON_BACK; + input.MenuI.player = PLAYER_1; + input.MenuI.button = MENU_BUTTON_BACK; } - SCREENMAN->Input( DeviceI, type, GameI, MenuI, StyleI ); + SCREENMAN->Input( input ); } }