From dd98a6bc7e57de5314ceda1ae36a96e9ca4870d7 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Wed, 18 May 2005 07:15:56 +0000 Subject: [PATCH] move more of autoplay into debugOverlay --- stepmania/src/GameConstantsAndTypes.cpp | 8 ++++ stepmania/src/GameConstantsAndTypes.h | 3 +- stepmania/src/Preference.cpp | 1 + stepmania/src/PrefsManager.cpp | 2 +- stepmania/src/PrefsManager.h | 2 +- stepmania/src/ScreenDebugOverlay.cpp | 29 +++++++++-- stepmania/src/ScreenDebugOverlay.h | 2 + stepmania/src/ScreenEdit.cpp | 8 ++-- stepmania/src/ScreenGameplay.cpp | 56 +++++++++------------- stepmania/src/ScreenGameplay.h | 1 + stepmania/src/ScreenOptionsMasterPrefs.cpp | 4 +- 11 files changed, 68 insertions(+), 48 deletions(-) diff --git a/stepmania/src/GameConstantsAndTypes.cpp b/stepmania/src/GameConstantsAndTypes.cpp index c8adf17930..c3608cab06 100644 --- a/stepmania/src/GameConstantsAndTypes.cpp +++ b/stepmania/src/GameConstantsAndTypes.cpp @@ -84,6 +84,14 @@ XToString( RankingCategory, NUM_RANKING_CATEGORIES ); StringToX( RankingCategory ); +static const CString PlayerControllerNames[] = { + "Human", + "Autoplay", + "Cpu", +}; +XToString( PlayerController, NUM_PLAYER_CONTROLLERS ); + + static const CString CoinModeNames[] = { "home", "pay", diff --git a/stepmania/src/GameConstantsAndTypes.h b/stepmania/src/GameConstantsAndTypes.h index 12a225e7d3..f8c59f7037 100644 --- a/stepmania/src/GameConstantsAndTypes.h +++ b/stepmania/src/GameConstantsAndTypes.h @@ -224,10 +224,11 @@ const int NUM_RANKING_LINES = 5; enum PlayerController { PC_HUMAN, - PC_CPU, PC_AUTOPLAY, + PC_CPU, NUM_PLAYER_CONTROLLERS }; +const CString& PlayerControllerToString( PlayerController pc ); const int MIN_SKILL = 0; const int MAX_SKILL = 10; diff --git a/stepmania/src/Preference.cpp b/stepmania/src/Preference.cpp index e00b2875de..5b231090dd 100644 --- a/stepmania/src/Preference.cpp +++ b/stepmania/src/Preference.cpp @@ -76,6 +76,7 @@ READFROM_AND_WRITETO( PrefsManager::CourseSortOrders, int& ) READFROM_AND_WRITETO( PrefsManager::GetRankingName, int& ) READFROM_AND_WRITETO( PrefsManager::ScoringTypes, int& ) READFROM_AND_WRITETO( PrefsManager::BoostAppPriority, int& ) +READFROM_AND_WRITETO( PlayerController, int& ) READFROM_AND_WRITETO( RageSoundReader_Resample::ResampleQuality, int& ) void IPreference::ReadFrom( const IniFile &ini ) diff --git a/stepmania/src/PrefsManager.cpp b/stepmania/src/PrefsManager.cpp index f27d3fc129..9065e32d16 100644 --- a/stepmania/src/PrefsManager.cpp +++ b/stepmania/src/PrefsManager.cpp @@ -175,7 +175,7 @@ PrefsManager::PrefsManager() : m_fTimeMeterSecondsChangeOK ( Options, "TimeMeterSecondsChangeOK", -0.0f ), m_fTimeMeterSecondsChangeNG ( Options, "TimeMeterSecondsChangeNG", -4.0f ), - m_bAutoPlay ( Options, "AutoPlay", false ), + m_AutoPlay ( Options, "AutoPlay", PC_HUMAN ), m_bDelayedBack ( Options, "DelayedBack", true ), m_bShowInstructions ( Options, "ShowInstructions", true ), m_bShowSelectGroup ( Options, "ShowSelectGroup", true ), diff --git a/stepmania/src/PrefsManager.h b/stepmania/src/PrefsManager.h index 874342ccc1..2ad9ceb350 100644 --- a/stepmania/src/PrefsManager.h +++ b/stepmania/src/PrefsManager.h @@ -150,7 +150,7 @@ public: Preference m_fTimeMeterSecondsChangeOK; Preference m_fTimeMeterSecondsChangeNG; - Preference m_bAutoPlay; + Preference m_AutoPlay; Preference m_bDelayedBack; Preference m_bShowInstructions; Preference m_bShowSelectGroup; diff --git a/stepmania/src/ScreenDebugOverlay.cpp b/stepmania/src/ScreenDebugOverlay.cpp index 3f2735f635..4427a8c37a 100644 --- a/stepmania/src/ScreenDebugOverlay.cpp +++ b/stepmania/src/ScreenDebugOverlay.cpp @@ -122,6 +122,11 @@ void ScreenDebugOverlay::Update( float fDeltaTime ) if( !g_bIsDisplayed ) return; + UpdateText(); +} + +void ScreenDebugOverlay::UpdateText() +{ /* Highlight options that aren't the default. */ const RageColor off(0.6f, 0.6f, 0.6f, 1.0f); const RageColor on(1, 1, 1, 1); @@ -157,7 +162,7 @@ void ScreenDebugOverlay::Update( float fDeltaTime ) bool bOn = false; switch( i ) { - case DebugLine_Autoplay: bOn=PREFSMAN->m_bAutoPlay.Get(); break; + case DebugLine_Autoplay: bOn=PREFSMAN->m_AutoPlay.Get() != PC_HUMAN; break; case DebugLine_CoinMode: bOn=true; break; case DebugLine_Slow: bOn=g_bIsSlow; break; case DebugLine_Halt: bOn=g_bIsHalt; break; @@ -178,7 +183,15 @@ void ScreenDebugOverlay::Update( float fDeltaTime ) CString s2; switch( i ) { - case DebugLine_Autoplay: s2=bOn ? "on":"off"; break; + case DebugLine_Autoplay: + switch( PREFSMAN->m_AutoPlay ) + { + case PC_HUMAN: s2="off"; break; + case PC_AUTOPLAY: s2="on"; break; + case PC_CPU: s2="CPU"; break; + default: ASSERT(0); + } + break; case DebugLine_CoinMode: s2=CoinModeToString(PREFSMAN->m_CoinMode); break; case DebugLine_Slow: s2=bOn ? "on":"off"; break; case DebugLine_Halt: s2=bOn ? "on":"off"; break; @@ -249,9 +262,13 @@ bool ScreenDebugOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEv switch( i ) { case DebugLine_Autoplay: - PREFSMAN->m_bAutoPlay.Set( !PREFSMAN->m_bAutoPlay ); - FOREACH_HumanPlayer(pn) - GAMESTATE->m_pPlayerState[pn]->m_PlayerController = PREFSMAN->m_bAutoPlay ? PC_AUTOPLAY : PC_HUMAN; + { + PlayerController pc = (PlayerController)(PREFSMAN->m_AutoPlay+1); + wrap( (int&)pc, NUM_PLAYER_CONTROLLERS ); + PREFSMAN->m_AutoPlay.Set( pc ); + FOREACH_HumanPlayer(pn) + GAMESTATE->m_pPlayerState[pn]->m_PlayerController = PREFSMAN->m_AutoPlay; + } break; case DebugLine_CoinMode: { @@ -314,6 +331,8 @@ bool ScreenDebugOverlay::OverlayInput( const DeviceInput& DeviceI, const InputEv default: ASSERT(0); } + UpdateText(); + SCREENMAN->SystemMessage( txt.GetText() ); } } diff --git a/stepmania/src/ScreenDebugOverlay.h b/stepmania/src/ScreenDebugOverlay.h index 8a60218d7a..ab2bda1ef0 100644 --- a/stepmania/src/ScreenDebugOverlay.h +++ b/stepmania/src/ScreenDebugOverlay.h @@ -40,6 +40,8 @@ public: void Update( float fDeltaTime ); private: + void UpdateText(); + Quad m_Quad; BitmapText m_Header; BitmapText m_Text[NUM_DEBUG_LINES]; diff --git a/stepmania/src/ScreenEdit.cpp b/stepmania/src/ScreenEdit.cpp index 95ccbe12b6..6abad3d325 100644 --- a/stepmania/src/ScreenEdit.cpp +++ b/stepmania/src/ScreenEdit.cpp @@ -1439,9 +1439,9 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ break; case EDIT_BUTTON_TOGGLE_AUTOPLAY: { - PREFSMAN->m_bAutoPlay.Set( !PREFSMAN->m_bAutoPlay ); + PREFSMAN->m_AutoPlay.Set( PREFSMAN->m_AutoPlay!=PC_HUMAN ? PC_HUMAN:PC_AUTOPLAY ); FOREACH_HumanPlayer( p ) - GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_bAutoPlay?PC_AUTOPLAY:PC_HUMAN; + GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_AutoPlay; } break; case EDIT_BUTTON_OFFSET_UP: @@ -1471,7 +1471,7 @@ void ScreenEdit::InputPlay( const DeviceInput& DeviceI, const InputEventType typ switch( StyleI.player ) { case PLAYER_1: - if( !PREFSMAN->m_bAutoPlay ) + if( PREFSMAN->m_AutoPlay == PC_HUMAN ) m_Player.Step( StyleI.col, DeviceI.ts ); break; } @@ -2402,7 +2402,7 @@ void ScreenEdit::HandleAreaMenuChoice( AreaMenuChoice c, const vector &iAns SetupCourseAttacks(); m_Player.Load( m_NoteDataEdit ); - GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PREFSMAN->m_bAutoPlay?PC_AUTOPLAY:PC_HUMAN; + GAMESTATE->m_pPlayerState[PLAYER_1]->m_PlayerController = PREFSMAN->m_AutoPlay; const float fStartSeconds = m_pSong->GetElapsedTimeFromBeat(GAMESTATE->m_fSongBeat) ; LOG->Trace( "Starting playback at %f", fStartSeconds ); diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index ff7ea9406f..93310237b3 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -102,6 +102,8 @@ ScreenGameplay::ScreenGameplay( CString sName ) : ScreenWithMenuElements(sName) FAIL_AFTER_30_MISSES.Load( sName, "FailAfter30Misses" ); USE_FORCED_MODIFIERS_IN_BEGINNER.Load( sName, "UseForcedModifiersInBeginner" ); FORCED_MODIFIERS_IN_BEGINNER.Load( sName, "ForcedModifiersInBeginner" ); + + this->SubscribeToMessage( PREFSMAN->m_AutoPlay.GetName()+"Changed" ); } void ScreenGameplay::Init() @@ -963,13 +965,9 @@ void ScreenGameplay::LoadNextSong() iNewSkill = clamp( iNewSkill, 0, NUM_SKILL_LEVELS-1 ); GAMESTATE->m_pPlayerState[p]->m_iCpuSkill = iNewSkill; } - else if( PREFSMAN->m_bAutoPlay ) - { - GAMESTATE->m_pPlayerState[p]->m_PlayerController = PC_AUTOPLAY; - } else { - GAMESTATE->m_pPlayerState[p]->m_PlayerController = PC_HUMAN; + GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_AutoPlay; } } @@ -1943,9 +1941,6 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ { switch( DeviceI.button ) { - case KEY_F5: - this->HandleScreenMessage( SM_NotesEnded ); - break; case KEY_F6: { bool bHoldingShift = @@ -1975,22 +1970,6 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ m_textDebug.BeginTweening( 0.5f ); // fade out m_textDebug.SetDiffuse( RageColor(1,1,1,0) ); break; - case KEY_F8: - { - PREFSMAN->m_bAutoPlay.Set( !PREFSMAN->m_bAutoPlay ); - UpdateAutoPlayText(); - bool bIsHoldingShift = - INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_RSHIFT)) || - INPUTFILTER->IsBeingPressed( DeviceInput(DEVICE_KEYBOARD, KEY_LSHIFT)); - FOREACH_HumanPlayer(p) - { - if( bIsHoldingShift ) - GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_bAutoPlay ? PC_CPU : PC_HUMAN; - else - GAMESTATE->m_pPlayerState[p]->m_PlayerController = PREFSMAN->m_bAutoPlay ? PC_AUTOPLAY : PC_HUMAN; - } - } - break; case KEY_F9: case KEY_F10: { @@ -2063,7 +2042,7 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ { AbortGiveUp( true ); - if( !PREFSMAN->m_bAutoPlay ) + if( PREFSMAN->m_AutoPlay == PC_HUMAN ) m_Player[StyleI.player].Step( StyleI.col, DeviceI.ts ); } // else if( type==IET_FIRST_PRESS && @@ -2088,21 +2067,24 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ void ScreenGameplay::UpdateAutoPlayText() { - CString sText; + vector vsText; - if( PREFSMAN->m_bAutoPlay ) - sText += "AutoPlay "; + switch( PREFSMAN->m_AutoPlay ) + { + case PC_HUMAN: break; + case PC_AUTOPLAY: vsText.push_back("AutoPlay"); break; + case PC_CPU: vsText.push_back("AutoPlay CPU"); break; + default: ASSERT(0); + } switch( GAMESTATE->m_SongOptions.m_AutosyncType ) { - case SongOptions::AUTOSYNC_OFF: break; - case SongOptions::AUTOSYNC_SONG: sText += "AutosyncSong "; break; - case SongOptions::AUTOSYNC_MACHINE: sText += "AutosyncMachine "; break; + case SongOptions::AUTOSYNC_OFF: break; + case SongOptions::AUTOSYNC_SONG: vsText.push_back("AutosyncSong"); break; + case SongOptions::AUTOSYNC_MACHINE: vsText.push_back("AutosyncMachine"); break; default: ASSERT(0); } - if( sText.length() > 0 ) - sText.resize( sText.length()-5 ); - + CString sText = join( " ", vsText ); m_textAutoPlay.SetText( sText ); } @@ -2644,6 +2626,12 @@ void ScreenGameplay::ShowOniGameOver( PlayerNumber pn ) m_sprOniGameOver[pn].PlayCommand( "Die" ); } +void ScreenGameplay::HandleMessage( const CString& sMessage ) +{ + if( sMessage == PREFSMAN->m_AutoPlay.GetName()+"Changed" ) + UpdateAutoPlayText(); +} + /* * (c) 2001-2004 Chris Danford, Glenn Maynard * All rights reserved. diff --git a/stepmania/src/ScreenGameplay.h b/stepmania/src/ScreenGameplay.h index 5fcd9a4493..bc45d14d00 100644 --- a/stepmania/src/ScreenGameplay.h +++ b/stepmania/src/ScreenGameplay.h @@ -40,6 +40,7 @@ public: 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 HandleScreenMessage( const ScreenMessage SM ); + virtual void HandleMessage( const CString& sMessage ); virtual bool UsesBackground() const { return false; } diff --git a/stepmania/src/ScreenOptionsMasterPrefs.cpp b/stepmania/src/ScreenOptionsMasterPrefs.cpp index 22263b7ef2..5549d4cf3c 100644 --- a/stepmania/src/ScreenOptionsMasterPrefs.cpp +++ b/stepmania/src/ScreenOptionsMasterPrefs.cpp @@ -298,7 +298,7 @@ static void NumBackgrounds( int &sel, bool ToSel, const ConfOption *pConfOption /* Input options */ MOVE( AutoMapOnJoyChange, PREFSMAN->m_bAutoMapOnJoyChange ); -MOVE( AutoPlay, PREFSMAN->m_bAutoPlay ); +MOVE( AutoPlay, (int&)PREFSMAN->m_AutoPlay ); MOVE( BackDelayed, PREFSMAN->m_bDelayedBack ); MOVE( OptionsNavigation, PREFSMAN->m_bArcadeOptionsNavigation ); @@ -558,7 +558,7 @@ static void InitializeConfOptions() /* Input options */ ADD( ConfOption( "AutoMapOnJoyChange", AutoMapOnJoyChange, "OFF","ON (recommended)" ) ); ADD( ConfOption( "OnlyDedicatedMenuButtons", MovePref, "USE GAMEPLAY BUTTONS","ONLY DEDICATED BUTTONS" ) ); - ADD( ConfOption( "AutoPlay", AutoPlay, "OFF","ON" ) ); + ADD( ConfOption( "AutoPlay", AutoPlay, "OFF","ON","CPU-Controlled" ) ); ADD( ConfOption( "BackDelayed", BackDelayed, "INSTANT","HOLD" ) ); ADD( ConfOption( "OptionsNavigation", OptionsNavigation, "SM STYLE","ARCADE STYLE" ) ); ADD( ConfOption( "WheelSpeed", WheelSpeed, "SLOW","NORMAL","FAST","REALLY FAST" ) );