From d8212e8d082c095532d12eebfb9d7398b78ef559 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Mon, 26 Jan 2004 20:39:14 +0000 Subject: [PATCH] simplify attack handling --- stepmania/src/Attack.h | 3 ++- stepmania/src/GameState.cpp | 43 +++++++++++-------------------------- 2 files changed, 15 insertions(+), 31 deletions(-) diff --git a/stepmania/src/Attack.h b/stepmania/src/Attack.h index 47fa055d7b..29c45a18df 100644 --- a/stepmania/src/Attack.h +++ b/stepmania/src/Attack.h @@ -11,11 +11,12 @@ struct Attack float fStartSecond; // -1 = now float fSecsRemaining; CString sModifier; + bool bOn; // for GAMESTATE void GetAttackBeats( const Song *song, PlayerNumber pn, float &fStartBeat, float &fEndBeat ) const; bool IsBlank() { return sModifier.empty(); } void MakeBlank() { sModifier=""; } - Attack() { fStartSecond = -1; } + Attack() { fStartSecond = -1; bOn = false; } }; typedef vector AttackArray; diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 19cdcd8e0b..1a7202bd14 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -264,45 +264,28 @@ void GameState::Update( float fDelta ) { for( int p=0; p this->m_fMusicSeconds ) - continue; /* not yet */ - - m_ActiveAttacks[p][s].fStartSecond = -1; - - bRebuildPlayerOptions = true; - } - - /* See if any attacks are ending. */ m_bAttackEndedThisUpdate[p] = false; - for( s=0; s= 0 ) - continue; /* hasn't started yet */ + Attack &attack = m_ActiveAttacks[p][s]; + const bool bCurrentlyEnabled = + (attack.fStartSecond < this->m_fMusicSeconds && + m_fMusicSeconds < attack.fStartSecond+attack.fSecsRemaining); - if( m_ActiveAttacks[p][s].fSecsRemaining <= 0 ) - continue; /* ended already */ + if( m_ActiveAttacks[p][s].bOn == bCurrentlyEnabled ) + continue; /* OK */ - m_ActiveAttacks[p][s].fSecsRemaining -= fDelta; + if( !m_ActiveAttacks[p][s].bOn && bCurrentlyEnabled ) + m_bAttackEndedThisUpdate[p] = true; - if( m_ActiveAttacks[p][s].fSecsRemaining > 0 ) - continue; /* continuing */ - - /* ending */ - m_ActiveAttacks[p].erase( m_ActiveAttacks[p].begin()+s, m_ActiveAttacks[p].begin()+s+1 ); - m_bAttackEndedThisUpdate[p] = true; bRebuildPlayerOptions = true; + + m_ActiveAttacks[p][s].bOn = bCurrentlyEnabled; } if( bRebuildPlayerOptions ) @@ -937,7 +920,7 @@ void GameState::RebuildPlayerOptionsFromActiveAttacks( PlayerNumber pn ) PlayerOptions po = m_StoredPlayerOptions[pn]; for( unsigned s=0; s= 0 ) + if( !m_ActiveAttacks[pn][s].bOn ) continue; /* hasn't started yet */ po.FromString( m_ActiveAttacks[pn][s].sModifier ); }