From 2926d41a60088a7e0af34f4b6ac303b2de658c3d Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 4 Mar 2004 04:37:44 +0000 Subject: [PATCH] add course speed range to options screen --- stepmania/src/ScreenOptions.cpp | 61 +++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/stepmania/src/ScreenOptions.cpp b/stepmania/src/ScreenOptions.cpp index 00e4951277..2c2170dd42 100644 --- a/stepmania/src/ScreenOptions.cpp +++ b/stepmania/src/ScreenOptions.cpp @@ -23,6 +23,8 @@ #include "ActorUtil.h" #include "ProfileManager.h" #include "song.h" +#include "Course.h" +#include "StyleDef.h" const float ITEM_X[NUM_PLAYERS] = { 260, 420 }; @@ -520,14 +522,59 @@ CString ScreenOptions::GetExplanationTitle( int iRow ) const // HACK: tack the BPM onto the name of the speed line if( sLineName.CompareNoCase("speed")==0 ) { - if( SHOW_BPM_IN_SPEED_TITLE && GAMESTATE->m_pCurSong ) + if( SHOW_BPM_IN_SPEED_TITLE ) { - float fMinBpm, fMaxBpm; - GAMESTATE->m_pCurSong->GetDisplayBPM( fMinBpm, fMaxBpm ); - if( fMinBpm == fMaxBpm ) - sTitle += ssprintf( " (%.0f)", fMinBpm ); - else - sTitle += ssprintf( " (%.0f-%.0f)", fMinBpm, fMaxBpm ); + if( GAMESTATE->m_pCurSong ) + { + float fMinBpm, fMaxBpm; + GAMESTATE->m_pCurSong->GetDisplayBPM( fMinBpm, fMaxBpm ); + if( fMinBpm == fMaxBpm ) + sTitle += ssprintf( " (%.0f)", fMinBpm ); + else + sTitle += ssprintf( " (%.0f-%.0f)", fMinBpm, fMaxBpm ); + } + else if( GAMESTATE->m_pCurCourse ) + { + float fTotalMinBpm = -1, fTotalMaxBpm = -1; // -1 == no marker + vector ci; + GAMESTATE->m_pCurCourse->GetCourseInfo( GAMESTATE->GetCurrentStyleDef()->m_StepsType, ci ); + + ASSERT( ci.size() ); + + for( unsigned i = 0; i < ci.size(); ++i ) + { + if( ci[i].Mystery ) + continue; + + Song *pSong = ci[i].pSong; + ASSERT( pSong ); + switch( pSong->m_DisplayBPMType ) + { + case Song::DISPLAY_ACTUAL: + case Song::DISPLAY_SPECIFIED: + { + float fMinBpm, fMaxBpm; + pSong->GetDisplayBPM( fMinBpm, fMaxBpm ); + if( fTotalMinBpm == -1 ) fTotalMinBpm = fMinBpm; + else fTotalMinBpm = min( fTotalMinBpm, fMinBpm ); + if( fTotalMaxBpm == -1 ) fTotalMaxBpm = fMaxBpm; + else fTotalMaxBpm = max( fTotalMaxBpm, fMaxBpm ); + } + break; + case Song::DISPLAY_RANDOM: + break; + default: + ASSERT(0); + } + } + + if( fTotalMinBpm == -1 || fTotalMaxBpm == -1 ) + sTitle += ssprintf( " (???)", fTotalMinBpm ); + else if( fTotalMinBpm == fTotalMaxBpm ) + sTitle += ssprintf( " (%.0f)", fTotalMinBpm ); + else + sTitle += ssprintf( " (%.0f-%.0f)", fTotalMinBpm, fTotalMaxBpm ); + } } }