cache Trail RadarValues. There needs to be more coordination with Course's Trail cache though.

This commit is contained in:
Chris Danford
2004-07-23 05:28:41 +00:00
parent 27ece3ecbf
commit 6564a39a9e
2 changed files with 36 additions and 25 deletions
+14 -6
View File
@@ -51,7 +51,14 @@ bool TrailEntry::ContainsTransformOrTurn() const
RadarValues Trail::GetRadarValues() const RadarValues Trail::GetRadarValues() const
{ {
RadarValues rv; if( m_bRadarValuesCached )
{
return m_CachedRadarValues;
}
else
{
m_bRadarValuesCached = true;
m_CachedRadarValues.Init();
FOREACH_CONST( TrailEntry, m_vEntries, e ) FOREACH_CONST( TrailEntry, m_vEntries, e )
{ {
@@ -68,17 +75,18 @@ RadarValues Trail::GetRadarValues() const
if( po.ContainsTransformOrTurn() ) if( po.ContainsTransformOrTurn() )
NoteDataUtil::TransformNoteData( nd, po, pSteps->m_StepsType ); NoteDataUtil::TransformNoteData( nd, po, pSteps->m_StepsType );
NoteDataUtil::TransformNoteData( nd, e->Attacks, pSteps->m_StepsType, e->pSong ); NoteDataUtil::TransformNoteData( nd, e->Attacks, pSteps->m_StepsType, e->pSong );
RadarValues rv2; RadarValues rv;
NoteDataUtil::GetRadarValues( nd, e->pSong->m_fMusicLengthSeconds, rv2 ); NoteDataUtil::GetRadarValues( nd, e->pSong->m_fMusicLengthSeconds, rv );
rv += rv2; m_CachedRadarValues += rv;
} }
else else
{ {
rv += pSteps->GetRadarValues(); m_CachedRadarValues += pSteps->GetRadarValues();
} }
} }
return rv; return m_CachedRadarValues;
}
} }
int Trail::GetMeter() const int Trail::GetMeter() const
+3
View File
@@ -45,6 +45,8 @@ public:
CourseDifficulty m_CourseDifficulty; CourseDifficulty m_CourseDifficulty;
vector<TrailEntry> m_vEntries; vector<TrailEntry> m_vEntries;
int m_iSpecifiedMeter; // == -1 if no meter specified int m_iSpecifiedMeter; // == -1 if no meter specified
mutable bool m_bRadarValuesCached;
mutable RadarValues m_CachedRadarValues;
Trail() Trail()
{ {
@@ -56,6 +58,7 @@ public:
m_CourseDifficulty = DIFFICULTY_INVALID; m_CourseDifficulty = DIFFICULTY_INVALID;
m_iSpecifiedMeter = -1; m_iSpecifiedMeter = -1;
m_vEntries.clear(); m_vEntries.clear();
m_bRadarValuesCached = false;
} }
RadarValues GetRadarValues() const; RadarValues GetRadarValues() const;