fix next screen logic

This commit is contained in:
Chris Danford
2005-02-26 23:50:24 +00:00
parent 8e38849953
commit 3c049c100d
4 changed files with 13 additions and 21 deletions
+5 -2
View File
@@ -34,12 +34,14 @@ CString ICONS_X_NAME( size_t p ) { return ssprintf("IconsP%dX",p+1); }
OptionRow::OptionRow() OptionRow::OptionRow()
{ {
m_pHand = NULL;
Clear();
FOREACH_PlayerNumber( p ) FOREACH_PlayerNumber( p )
this->AddChild( &m_OptionIcons[p] ); this->AddChild( &m_OptionIcons[p] );
this->AddChild( &m_sprBullet ); this->AddChild( &m_sprBullet );
this->AddChild( &m_textTitle ); this->AddChild( &m_textTitle );
m_pHand = NULL;
} }
OptionRow::~OptionRow() OptionRow::~OptionRow()
@@ -68,6 +70,7 @@ void OptionRow::Clear()
m_bFirstItemGoesDown = false; m_bFirstItemGoesDown = false;
ZERO( m_bRowHasFocus ); ZERO( m_bRowHasFocus );
ZERO( m_iChoiceInRowWithFocus );
} }
void OptionRow::DetachHandler() void OptionRow::DetachHandler()
+2 -2
View File
@@ -106,14 +106,14 @@ public:
if( m_RowDef.bOneChoiceForAllPlayers ) if( m_RowDef.bOneChoiceForAllPlayers )
pn = PLAYER_1; pn = PLAYER_1;
int iChoice = m_iChoiceInRowWithFocus[pn]; int iChoice = m_iChoiceInRowWithFocus[pn];
ASSERT(iChoice<(int)m_RowDef.choices.size()); ASSERT(iChoice >= 0 && iChoice < (int)m_RowDef.choices.size());
return iChoice; return iChoice;
} }
void SetChoiceInRowWithFocus( PlayerNumber pn, int iChoice ) void SetChoiceInRowWithFocus( PlayerNumber pn, int iChoice )
{ {
if( m_RowDef.bOneChoiceForAllPlayers ) if( m_RowDef.bOneChoiceForAllPlayers )
pn = PLAYER_1; pn = PLAYER_1;
ASSERT(iChoice<(int)m_RowDef.choices.size()); ASSERT(iChoice >= 0 && iChoice < (int)m_RowDef.choices.size());
m_iChoiceInRowWithFocus[pn] = iChoice; m_iChoiceInRowWithFocus[pn] = iChoice;
} }
bool GetSelected( PlayerNumber pn, int iChoice ) const bool GetSelected( PlayerNumber pn, int iChoice ) const
+1 -4
View File
@@ -1013,6 +1013,7 @@ void ScreenOptions::MoveRow( PlayerNumber pn, int dir, bool Repeat )
const unsigned iOldSelection = row.GetChoiceInRowWithFocus(p); const unsigned iOldSelection = row.GetChoiceInRowWithFocus(p);
m_iCurrentRow[p] = r; m_iCurrentRow[p] = r;
ASSERT( r >= 0 && r < (int)m_Rows.size() );
OptionRow &row = *m_Rows[r]; OptionRow &row = *m_Rows[r];
@@ -1088,10 +1089,6 @@ void ScreenOptions::MenuDown( PlayerNumber pn, const InputEventType type )
int ScreenOptions::GetCurrentRow( PlayerNumber pn ) const int ScreenOptions::GetCurrentRow( PlayerNumber pn ) const
{ {
const int r = m_iCurrentRow[pn]; const int r = m_iCurrentRow[pn];
OptionRow &row = *m_Rows[r];
if( row.GetRowType() != OptionRow::ROW_NORMAL )
return -1;
return r; return r;
} }
+5 -13
View File
@@ -154,26 +154,18 @@ void ScreenOptionsMaster::BeginFadingOut()
* honor it. */ * honor it. */
m_sNextScreen = ""; m_sNextScreen = "";
const unsigned uFocusRow = this->GetCurrentRow(); int iCurRow = this->GetCurrentRow();
ASSERT( iCurRow >= 0 && iCurRow < (int)m_Rows.size() );
OptionRow &row = *m_Rows[iCurRow];
for( unsigned r = 0; r < OptionRowHandlers.size(); ++r ) if( iCurRow < (int)OptionRowHandlers.size() )
{ {
OptionRow &row = *m_Rows[r];
CHECKPOINT_M( ssprintf("%i/%i", r, int(OptionRowHandlers.size())) );
/* If SELECT_NONE, only apply it if it's the selected option. */
if( row.GetRowDef().selectType == SELECT_NONE && r != uFocusRow )
continue;
OptionRowHandler *pHand = OptionRowHandlers[r];
const int iChoice = row.GetChoiceInRowWithFocus(GAMESTATE->m_MasterPlayerNumber); const int iChoice = row.GetChoiceInRowWithFocus(GAMESTATE->m_MasterPlayerNumber);
OptionRowHandler *pHand = OptionRowHandlers[iCurRow];
CString sScreen = pHand->GetAndEraseScreen( iChoice ); CString sScreen = pHand->GetAndEraseScreen( iChoice );
if( !sScreen.empty() ) if( !sScreen.empty() )
m_sNextScreen = sScreen; m_sNextScreen = sScreen;
} }
CHECKPOINT;
// NEXT_SCREEN; // NEXT_SCREEN;
if( m_sNextScreen == "" ) if( m_sNextScreen == "" )