fix radar values don't get recalculated after changing steps in editor

fix radar values shown for edits if copied from official steps
This commit is contained in:
Chris Danford
2005-04-03 21:43:29 +00:00
parent 3c5a892b27
commit 9d16a66f77
4 changed files with 35 additions and 18 deletions
+2
View File
@@ -1812,10 +1812,12 @@ void ScreenEdit::HandleMainMenuChoice( MainMenuChoice c, const vector<int> &iAns
m_CurrentAction = c; m_CurrentAction = c;
// copy edit into current Steps // copy edit into current Steps
Song* pSong = GAMESTATE->m_pCurSong;
Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1]; Steps* pSteps = GAMESTATE->m_pCurSteps[PLAYER_1];
ASSERT( pSteps ); ASSERT( pSteps );
pSteps->SetNoteData( m_NoteDataEdit ); pSteps->SetNoteData( m_NoteDataEdit );
pSteps->CalculateRadarValues( pSong->m_fMusicLengthSeconds );
if( HOME_EDIT_MODE ) if( HOME_EDIT_MODE )
{ {
+11 -14
View File
@@ -786,7 +786,13 @@ void Song::ReCalculateRadarValuesAndLastBeat()
{ {
Steps* pSteps = m_vpSteps[i]; Steps* pSteps = m_vpSteps[i];
/* If it's autogen, radar vals and first/last beat will come from the parent. */ pSteps->CalculateRadarValues( m_fMusicLengthSeconds );
//
// calculate lastBeat
//
/* If it's autogen, then first/last beat will come from the parent. */
if( pSteps->IsAutogen() ) if( pSteps->IsAutogen() )
continue; continue;
@@ -795,28 +801,19 @@ void Song::ReCalculateRadarValuesAndLastBeat()
if( pSteps->IsAnEdit() ) if( pSteps->IsAnEdit() )
continue; continue;
// Don't set first/last beat based on lights. They often start very
// early and end very late.
if( pSteps->m_StepsType == STEPS_TYPE_LIGHTS_CABINET )
continue;
//
// calculate radar values
//
NoteData tempNoteData; NoteData tempNoteData;
pSteps->GetNoteData( tempNoteData ); pSteps->GetNoteData( tempNoteData );
RadarValues v;
NoteDataUtil::GetRadarValues( tempNoteData, m_fMusicLengthSeconds, v );
pSteps->SetRadarValues( v );
/* Many songs have stray, empty song patterns. Ignore them, so /* Many songs have stray, empty song patterns. Ignore them, so
* they don't force the first beat of the whole song to 0. */ * they don't force the first beat of the whole song to 0. */
if( tempNoteData.GetLastRow() == 0 ) if( tempNoteData.GetLastRow() == 0 )
continue; continue;
// Don't set first/last beat based on lights. They often start very
// early and end very late.
if( pSteps->m_StepsType == STEPS_TYPE_LIGHTS_CABINET )
continue;
fFirstBeat = min( fFirstBeat, tempNoteData.GetFirstBeat() ); fFirstBeat = min( fFirstBeat, tempNoteData.GetFirstBeat() );
fLastBeat = max( fLastBeat, tempNoteData.GetLastBeat() ); fLastBeat = max( fLastBeat, tempNoteData.GetLastBeat() );
} }
+19 -2
View File
@@ -151,6 +151,23 @@ void Steps::TidyUpData()
SetMeter( int(PredictMeter()) ); SetMeter( int(PredictMeter()) );
} }
void Steps::CalculateRadarValues( float fMusicLengthSeconds )
{
m_RadarValues = RadarValues();
// If we're autogen, don't calculate values. GetRadarValues will take from our parent.
if( parent != NULL )
return;
// If we're an edit, leave the RadarValues invalid.
if( IsAnEdit() )
return;
NoteData tempNoteData;
this->GetNoteData( tempNoteData );
NoteDataUtil::GetRadarValues( tempNoteData, fMusicLengthSeconds, m_RadarValues );
}
void Steps::Decompress() const void Steps::Decompress() const
{ {
if( m_bNoteDataIsFilled ) if( m_bNoteDataIsFilled )
@@ -266,7 +283,7 @@ void Steps::AutogenFrom( const Steps *parent_, StepsType ntTo )
m_StepsType = ntTo; m_StepsType = ntTo;
} }
void Steps::CopyFrom( Steps* pSource, StepsType ntTo ) // pSource does not have to be of the same StepsType! void Steps::CopyFrom( Steps* pSource, StepsType ntTo, float fMusicLengthSeconds ) // pSource does not have to be of the same StepsType
{ {
m_StepsType = ntTo; m_StepsType = ntTo;
NoteData noteData; NoteData noteData;
@@ -276,7 +293,7 @@ void Steps::CopyFrom( Steps* pSource, StepsType ntTo ) // pSource does not have
this->SetDescription( pSource->GetDescription() ); this->SetDescription( pSource->GetDescription() );
this->SetDifficulty( pSource->GetDifficulty() ); this->SetDifficulty( pSource->GetDifficulty() );
this->SetMeter( pSource->GetMeter() ); this->SetMeter( pSource->GetMeter() );
this->SetRadarValues( pSource->GetRadarValues() ); this->CalculateRadarValues( fMusicLengthSeconds );
} }
void Steps::CreateBlank( StepsType ntTo ) void Steps::CreateBlank( StepsType ntTo )
+2 -1
View File
@@ -22,7 +22,7 @@ public:
// initializers // initializers
void AutogenFrom( const Steps *parent, StepsType ntTo ); void AutogenFrom( const Steps *parent, StepsType ntTo );
void CopyFrom( Steps* pSource, StepsType ntTo ); void CopyFrom( Steps* pSource, StepsType ntTo, float fMusicLengthSeconds );
void CreateBlank( StepsType ntTo ); void CreateBlank( StepsType ntTo );
void Compress() const; void Compress() const;
@@ -61,6 +61,7 @@ public:
void GetSMNoteData( CString &notes_comp_out ) const; void GetSMNoteData( CString &notes_comp_out ) const;
void TidyUpData(); void TidyUpData();
void CalculateRadarValues( float fMusicLengthSeconds );
// Lua // Lua
void PushSelf( lua_State *L ); void PushSelf( lua_State *L );