options cleanup

This commit is contained in:
Chris Danford
2003-04-21 23:43:51 +00:00
parent e0e5f18ca9
commit 15a54aee79
9 changed files with 61 additions and 22 deletions
+47 -9
View File
@@ -36,13 +36,14 @@ GameState::GameState()
/* Don't reset yet; let the first screen do it, so we can
* use PREFSMAN. */
// Reset();
m_pPosition = NULL;
ResetLastRanking();
}
GameState::~GameState()
{
delete m_Position;
SAFE_DELETE( m_pPosition );
}
void GameState::Reset()
@@ -85,14 +86,12 @@ void GameState::Reset()
}
m_SongOptions.Init();
for( p=0; p<NUM_PLAYERS; p++ )
{
m_PlayerOptions[p].FromString( PREFSMAN->m_sDefaultModifiers );
}
m_SongOptions.FromString( PREFSMAN->m_sDefaultModifiers );
for( p=0; p<NUM_PLAYERS; p++ )
NOTESKIN->SwitchNoteSkin( PlayerNumber(p), PREFSMAN->m_sDefaultNoteSkin );
m_Position = new NoteFieldPositioning("Positioning.ini");
m_sPositioning[p] = "";
SAFE_DELETE( m_pPosition );
m_pPosition = new NoteFieldPositioning("Positioning.ini");
// apply defaults
this->ApplyModifiers( PREFSMAN->m_sDefaultModifiers );
for( p=0; p<NUM_PLAYERS; p++ )
{
@@ -417,6 +416,45 @@ void GameState::GetFinalEvalStatsAndSongs( StageStats& statsOut, vector<Song*>&
}
void GameState::ApplyModifiers( CString sModifiers )
{
for( int p=0; p<NUM_PLAYERS; p++ )
m_PlayerOptions[p].FromString( sModifiers );
m_SongOptions.FromString( sModifiers );
sModifiers.MakeLower();
CStringArray asBits;
split( sModifiers, ",", asBits, true );
for( unsigned i=0; i<asBits.size(); i++ )
{
CString& sBit = asBits[i];
TrimLeft(sBit);
TrimRight(sBit);
// change NoteSkin
if( NOTESKIN->DoesNoteSkinExist(sBit) )
for( int p=0; p<NUM_PLAYERS; p++ )
NOTESKIN->SwitchNoteSkin( (PlayerNumber)p, sBit );
if( m_pPosition->IsValidModeForCurrentGame(sBit) )
for( int p=0; p<NUM_PLAYERS; p++ )
m_sPositioning[p] = sBit;
}
}
CString GameState::GetModifiers()
{
// This is really PLAYER_1's modifiers string!
CStringArray as;
#define PUSH_IF_NOT_EMPTY( s ) if( !s.empty() ) as.push_back( s );
PUSH_IF_NOT_EMPTY( m_PlayerOptions[PLAYER_1].GetString() );
PUSH_IF_NOT_EMPTY( m_SongOptions.GetString() );
PUSH_IF_NOT_EMPTY( m_sPositioning[PLAYER_1] );
return join( ",", as );
}
/* Store the player's preferred options. This is called at the very beginning
* of gameplay. */
void GameState::StoreSelectedOptions()
+4 -1
View File
@@ -150,6 +150,8 @@ public:
SongOptions m_SongOptions;
SongOptions m_StoredSongOptions;
void ApplyModifiers( CString sModifiers );
CString GetModifiers();
void StoreSelectedOptions();
void RestoreSelectedOptions();
@@ -200,7 +202,8 @@ public:
//
// Arrow positioning
//
NoteFieldPositioning *m_Position;
CString m_sPositioning[NUM_PLAYERS]; /* The current positioning mode, or empty to use the normal positions. */
NoteFieldPositioning *m_pPosition;
};
+1 -1
View File
@@ -183,7 +183,7 @@ void NoteFieldPositioning::Load(PlayerNumber pn)
}
/* Is there a custom mode with the current name that fits the current game? */
const int ModeNum = GetID(GAMESTATE->m_PlayerOptions[pn].m_sPositioning);
const int ModeNum = GetID(GAMESTATE->m_sPositioning[pn]);
if(ModeNum == -1)
return; /* No, only use the style table settings. */
+2 -2
View File
@@ -89,7 +89,7 @@ void Player::Load( PlayerNumber pn, NoteData* pNoteData, LifeMeter* pLM, ScoreDi
m_pScoreKeeper = pScoreKeeper;
/* Ensure that this is up-to-date. */
GAMESTATE->m_Position->Load(pn);
GAMESTATE->m_pPosition->Load(pn);
const StyleDef* pStyleDef = GAMESTATE->GetCurrentStyleDef();
@@ -416,7 +416,7 @@ void Player::Step( int col )
break;
default:
ASSERT(0);
score==TNS_NONE;
score=TNS_NONE;
}
if( score==TNS_MARVELOUS && !PREFSMAN->m_bMarvelousTiming )
-4
View File
@@ -33,7 +33,6 @@ void PlayerOptions::Init()
m_bTimingAssist = false;
m_fPerspectiveTilt = 0;
m_bTimeSpacing = false;
m_sPositioning = "";
}
void PlayerOptions::Approach( const PlayerOptions& other, float fDeltaSeconds )
@@ -127,7 +126,6 @@ CString PlayerOptions::GetString()
if( !m_bHoldNotes ) sReturn += "NoHolds, ";
if( m_bTimingAssist ) sReturn += "TimingAssist, ";
if( m_sPositioning != "" ) sReturn += m_sPositioning + ", ";
switch( (int)m_fPerspectiveTilt )
{
case -1: sReturn += "Incoming, "; break;
@@ -198,8 +196,6 @@ void PlayerOptions::FromString( CString sOptions )
else if( sBit == "timingassist")m_bTimingAssist = true;
else if( sBit == "incoming" ) m_fPerspectiveTilt = -1;
else if( sBit == "space" ) m_fPerspectiveTilt = +1;
else if( GAMESTATE->m_Position->IsValidModeForCurrentGame(sBit) )
m_sPositioning = sBit;
}
}
-2
View File
@@ -78,8 +78,6 @@ struct PlayerOptions
float m_fPerspectiveTilt; // -1 = near, 0 = overhead, +1 = space
bool m_bTimeSpacing; // instead of Beat spacing
/* The current positioning mode, or empty to use the normal positions. */
CString m_sPositioning;
void NextAccel();
void NextEffect();
+3 -3
View File
@@ -108,7 +108,7 @@ void ScreenPlayerOptions::ImportOptions()
m_OptionRow[PO_PERSPECTIVE].choices.push_back( "SPACE" );
CStringArray arrayPosNames;
GAMESTATE->m_Position->GetNamesForCurrentGame(arrayPosNames);
GAMESTATE->m_pPosition->GetNamesForCurrentGame(arrayPosNames);
for( i=0; i<arrayPosNames.size(); i++ )
{
arrayPosNames[i].MakeUpper();
@@ -177,7 +177,7 @@ void ScreenPlayerOptions::ImportOptions()
{
vector<CString> &choices = m_OptionRow[PO_PERSPECTIVE].choices;
for(unsigned n = 3; n < choices.size(); ++n)
if(!choices[n].CompareNoCase(po.m_sPositioning))
if(!choices[n].CompareNoCase(GAMESTATE->m_sPositioning[p]))
m_iSelectedOption[p][PO_PERSPECTIVE] = n;
}
@@ -241,7 +241,7 @@ void ScreenPlayerOptions::ExportOptions()
if(m_iSelectedOption[p][PO_PERSPECTIVE] > 2)
{
const int choice = m_iSelectedOption[p][PO_PERSPECTIVE];
po.m_sPositioning = m_OptionRow[PO_PERSPECTIVE].choices[choice];
GAMESTATE->m_sPositioning[p] = m_OptionRow[PO_PERSPECTIVE].choices[choice];
}
}
}
+1
View File
@@ -234,6 +234,7 @@ void ScreenSelectMusic::TweenOffScreen()
OFF_COMMAND( m_MusicSortDisplay );
m_MusicWheel.TweenOffScreen();
OFF_COMMAND( m_MusicWheel );
OFF_COMMAND( m_sprBalloon );
for( int p=0; p<NUM_PLAYERS; p++ )
{
+3
View File
@@ -116,6 +116,8 @@ void ResetGame()
PREFSMAN->ReadGamePrefsFromDisk();
INPUTMAPPER->ReadMappingsFromDisk();
/*
GameState::Reset() will switch the NoteSkin
for( int p=0; p<NUM_PLAYERS; p++ )
{
PlayerNumber pn = (PlayerNumber)p;
@@ -126,6 +128,7 @@ void ResetGame()
NOTESKIN->SwitchNoteSkin( pn, asNoteSkinNames[0] );
}
}
*/
if( !THEME->DoesThemeExist( THEME->GetCurThemeName() ) )
{
CString sGameName = GAMESTATE->GetCurrentGameDef()->m_szName;