From 4f41bacd91055ae245fc976c26f6a204b79cc9a6 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 21 Aug 2004 06:21:12 +0000 Subject: [PATCH] fix "PaneDisplay shows bogus values for edits" --- stepmania/src/PaneDisplay.cpp | 277 +++++++++++++++++----------------- stepmania/src/RadarValues.cpp | 3 +- stepmania/src/RadarValues.h | 2 + 3 files changed, 145 insertions(+), 137 deletions(-) diff --git a/stepmania/src/PaneDisplay.cpp b/stepmania/src/PaneDisplay.cpp index 9a71c7ce40..aa3e62c799 100644 --- a/stepmania/src/PaneDisplay.cpp +++ b/stepmania/src/PaneDisplay.cpp @@ -142,163 +142,168 @@ void PaneDisplay::Update( float fDeltaTime ) void PaneDisplay::SetContent( PaneContents c ) { - m_textContents[c].SetText( "" ); - - if( (g_Contents[c].req&NEED_NOTES) && !GAMESTATE->m_pCurSteps[m_PlayerNumber] ) - return; - if( (g_Contents[c].req&NEED_COURSE) && !GAMESTATE->m_pCurTrail[m_PlayerNumber] ) - return; - if( (g_Contents[c].req&NEED_PROFILE) && !PROFILEMAN->IsUsingProfile( m_PlayerNumber ) ) - return; + CString str = "?"; // fill this in + float val = 0; // fill this in const Song *pSong = GAMESTATE->m_pCurSong; const Steps *pSteps = GAMESTATE->m_pCurSteps[m_PlayerNumber]; const Course *pCourse = GAMESTATE->m_pCurCourse; const Trail *pTrail = GAMESTATE->m_pCurTrail[m_PlayerNumber]; + const Profile *pProfile = PROFILEMAN->GetProfile( m_PlayerNumber ); - RadarValues rv; + if( (g_Contents[c].req&NEED_NOTES) && !pSteps ) + goto done; + if( (g_Contents[c].req&NEED_COURSE) && !pTrail ) + goto done; + if( (g_Contents[c].req&NEED_PROFILE) && !pProfile ) + goto done; - if( g_Contents[c].req&NEED_NOTES ) - rv = pSteps->GetRadarValues(); - else if( g_Contents[c].req&NEED_COURSE ) - rv = pTrail->GetRadarValues(); - - float val = 0; - CString str; - switch( c ) { - case COURSE_NUM_STEPS: - case SONG_NUM_STEPS: val = rv[RADAR_NUM_TAPS_AND_HOLDS]; break; - case COURSE_JUMPS: - case SONG_JUMPS: val = rv[RADAR_NUM_JUMPS]; break; - case COURSE_HOLDS: - case SONG_HOLDS: val = rv[RADAR_NUM_HOLDS]; break; - case COURSE_MINES: - case SONG_MINES: val = rv[RADAR_NUM_MINES]; break; - case COURSE_HANDS: - case SONG_HANDS: val = rv[RADAR_NUM_HANDS]; break; - case SONG_DIFFICULTY_RADAR_STREAM: val = rv[RADAR_STREAM]; break; - case SONG_DIFFICULTY_RADAR_VOLTAGE: val = rv[RADAR_VOLTAGE]; break; - case SONG_DIFFICULTY_RADAR_AIR: val = rv[RADAR_AIR]; break; - case SONG_DIFFICULTY_RADAR_FREEZE: val = rv[RADAR_FREEZE]; break; - case SONG_DIFFICULTY_RADAR_CHAOS: val = rv[RADAR_CHAOS]; break; - case SONG_PROFILE_HIGH_SCORE: - val = 100.0f * PROFILEMAN->GetProfile(m_PlayerNumber)->GetStepsHighScoreList(pSong,pSteps).GetTopScore().fPercentDP; - break; - case SONG_PROFILE_NUM_PLAYS: - val = (float) PROFILEMAN->GetProfile(m_PlayerNumber)->GetStepsNumTimesPlayed(pSong,pSteps); - break; + RadarValues rv; - case SONG_MACHINE_HIGH_NAME: /* set val for color */ - case SONG_MACHINE_HIGH_SCORE: - CHECKPOINT; - val = 100.0f * PROFILEMAN->GetMachineProfile()->GetStepsHighScoreList(pSong,pSteps).GetTopScore().fPercentDP; - break; + if( g_Contents[c].req&NEED_NOTES ) + rv = pSteps->GetRadarValues(); + else if( g_Contents[c].req&NEED_COURSE ) + rv = pTrail->GetRadarValues(); - case SONG_MACHINE_RANK: + switch( c ) { - const vector best = SONGMAN->GetBestSongs( PROFILE_SLOT_MACHINE ); - val = (float) FindIndex( best.begin(), best.end(), pSong ); - val += 1; - break; + case COURSE_NUM_STEPS: + case SONG_NUM_STEPS: val = rv[RADAR_NUM_TAPS_AND_HOLDS]; break; + case COURSE_JUMPS: + case SONG_JUMPS: val = rv[RADAR_NUM_JUMPS]; break; + case COURSE_HOLDS: + case SONG_HOLDS: val = rv[RADAR_NUM_HOLDS]; break; + case COURSE_MINES: + case SONG_MINES: val = rv[RADAR_NUM_MINES]; break; + case COURSE_HANDS: + case SONG_HANDS: val = rv[RADAR_NUM_HANDS]; break; + case SONG_DIFFICULTY_RADAR_STREAM: val = rv[RADAR_STREAM]; break; + case SONG_DIFFICULTY_RADAR_VOLTAGE: val = rv[RADAR_VOLTAGE]; break; + case SONG_DIFFICULTY_RADAR_AIR: val = rv[RADAR_AIR]; break; + case SONG_DIFFICULTY_RADAR_FREEZE: val = rv[RADAR_FREEZE]; break; + case SONG_DIFFICULTY_RADAR_CHAOS: val = rv[RADAR_CHAOS]; break; + case SONG_PROFILE_HIGH_SCORE: + val = 100.0f * PROFILEMAN->GetProfile(m_PlayerNumber)->GetStepsHighScoreList(pSong,pSteps).GetTopScore().fPercentDP; + break; + case SONG_PROFILE_NUM_PLAYS: + val = (float) PROFILEMAN->GetProfile(m_PlayerNumber)->GetStepsNumTimesPlayed(pSong,pSteps); + break; + + case SONG_MACHINE_HIGH_NAME: /* set val for color */ + case SONG_MACHINE_HIGH_SCORE: + CHECKPOINT; + val = 100.0f * PROFILEMAN->GetMachineProfile()->GetStepsHighScoreList(pSong,pSteps).GetTopScore().fPercentDP; + break; + + case SONG_MACHINE_RANK: + { + const vector best = SONGMAN->GetBestSongs( PROFILE_SLOT_MACHINE ); + val = (float) FindIndex( best.begin(), best.end(), pSong ); + val += 1; + break; + } + + case SONG_PROFILE_RANK: + { + const vector best = SONGMAN->GetBestSongs( PlayerMemCard(m_PlayerNumber) ); + val = (float) FindIndex( best.begin(), best.end(), pSong ); + val += 1; + break; + } + + case COURSE_MACHINE_HIGH_NAME: /* set val for color */ + case COURSE_MACHINE_HIGH_SCORE: + val = 100.0f * PROFILEMAN->GetMachineProfile()->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().fPercentDP; + break; + + case COURSE_MACHINE_NUM_PLAYS: + val = (float) PROFILEMAN->GetMachineProfile()->GetCourseNumTimesPlayed( pCourse ); + break; + + case COURSE_MACHINE_RANK: + { + const vector best = SONGMAN->GetBestCourses( PROFILE_SLOT_MACHINE ); + val = (float) FindIndex( best.begin(), best.end(), pCourse ); + val += 1; + } + break; + + case COURSE_PROFILE_HIGH_SCORE: + val = 100.0f * PROFILEMAN->GetProfile(m_PlayerNumber)->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().fPercentDP; + break; + case COURSE_PROFILE_NUM_PLAYS: + val = (float) PROFILEMAN->GetProfile(m_PlayerNumber)->GetCourseNumTimesPlayed( pCourse ); + break; + + case COURSE_PROFILE_RANK: + const vector best = SONGMAN->GetBestCourses( PlayerMemCard(m_PlayerNumber) ); + val = (float) FindIndex( best.begin(), best.end(), pCourse ); + val += 1; + break; + }; + + if( val == RADAR_VAL_UNKNOWN ) + goto done; + + /* Scale, round, clamp, etc. for floats: */ + switch( c ) + { + case SONG_DIFFICULTY_RADAR_STREAM: + case SONG_DIFFICULTY_RADAR_VOLTAGE: + case SONG_DIFFICULTY_RADAR_AIR: + case SONG_DIFFICULTY_RADAR_FREEZE: + case SONG_DIFFICULTY_RADAR_CHAOS: + val = roundf( SCALE( val, 0, 1, 0, 10 ) ); + val = clamp( val, 0, 10 ); + str = ssprintf( "%.0f", val ); + break; } - case SONG_PROFILE_RANK: + switch( c ) { - const vector best = SONGMAN->GetBestSongs( PlayerMemCard(m_PlayerNumber) ); - val = (float) FindIndex( best.begin(), best.end(), pSong ); - val += 1; - break; + case SONG_MACHINE_HIGH_NAME: + str = PROFILEMAN->GetMachineProfile()->GetStepsHighScoreList(pSong,pSteps).GetTopScore().sName; + break; + case COURSE_MACHINE_HIGH_NAME: + + str = PROFILEMAN->GetMachineProfile()->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().sName; + break; + + case SONG_MACHINE_HIGH_SCORE: + case COURSE_MACHINE_HIGH_SCORE: + case SONG_PROFILE_HIGH_SCORE: + case COURSE_PROFILE_HIGH_SCORE: + str = ssprintf( "%.2f%%", val ); + break; + case SONG_NUM_STEPS: + case SONG_JUMPS: + case SONG_HOLDS: + case SONG_MINES: + case SONG_HANDS: + case COURSE_NUM_STEPS: + case COURSE_JUMPS: + case COURSE_HOLDS: + case COURSE_MINES: + case COURSE_HANDS: + case SONG_MACHINE_NUM_PLAYS: + case COURSE_MACHINE_NUM_PLAYS: + case SONG_PROFILE_NUM_PLAYS: + case COURSE_PROFILE_NUM_PLAYS: + case SONG_MACHINE_RANK: + case COURSE_MACHINE_RANK: + case SONG_PROFILE_RANK: + case COURSE_PROFILE_RANK: + str = ssprintf( "%.0f", val ); } - - case COURSE_MACHINE_HIGH_NAME: /* set val for color */ - case COURSE_MACHINE_HIGH_SCORE: - val = 100.0f * PROFILEMAN->GetMachineProfile()->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().fPercentDP; - break; - - case COURSE_MACHINE_NUM_PLAYS: - val = (float) PROFILEMAN->GetMachineProfile()->GetCourseNumTimesPlayed( pCourse ); - break; - - case COURSE_MACHINE_RANK: - { - const vector best = SONGMAN->GetBestCourses( PROFILE_SLOT_MACHINE ); - val = (float) FindIndex( best.begin(), best.end(), pCourse ); - val += 1; - } - break; - - case COURSE_PROFILE_HIGH_SCORE: - val = 100.0f * PROFILEMAN->GetProfile(m_PlayerNumber)->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().fPercentDP; - break; - case COURSE_PROFILE_NUM_PLAYS: - val = (float) PROFILEMAN->GetProfile(m_PlayerNumber)->GetCourseNumTimesPlayed( pCourse ); - break; - - case COURSE_PROFILE_RANK: - const vector best = SONGMAN->GetBestCourses( PlayerMemCard(m_PlayerNumber) ); - val = (float) FindIndex( best.begin(), best.end(), pCourse ); - val += 1; - break; - }; - - /* Scale, round, clamp, etc. for floats: */ - switch( c ) - { - case SONG_DIFFICULTY_RADAR_STREAM: - case SONG_DIFFICULTY_RADAR_VOLTAGE: - case SONG_DIFFICULTY_RADAR_AIR: - case SONG_DIFFICULTY_RADAR_FREEZE: - case SONG_DIFFICULTY_RADAR_CHAOS: - val = roundf( SCALE( val, 0, 1, 0, 10 ) ); - val = clamp( val, 0, 10 ); - str = ssprintf( "%.0f", val ); - break; } - switch( c ) - { - case SONG_MACHINE_HIGH_NAME: - str = PROFILEMAN->GetMachineProfile()->GetStepsHighScoreList(pSong,pSteps).GetTopScore().sName; - break; - case COURSE_MACHINE_HIGH_NAME: - - str = PROFILEMAN->GetMachineProfile()->GetCourseHighScoreList(pCourse,pTrail).GetTopScore().sName; - break; - - case SONG_MACHINE_HIGH_SCORE: - case COURSE_MACHINE_HIGH_SCORE: - case SONG_PROFILE_HIGH_SCORE: - case COURSE_PROFILE_HIGH_SCORE: - str = ssprintf( "%.2f%%", val ); - break; - case SONG_NUM_STEPS: - case SONG_JUMPS: - case SONG_HOLDS: - case SONG_MINES: - case SONG_HANDS: - case COURSE_NUM_STEPS: - case COURSE_JUMPS: - case COURSE_HOLDS: - case COURSE_MINES: - case COURSE_HANDS: - case SONG_MACHINE_NUM_PLAYS: - case COURSE_MACHINE_NUM_PLAYS: - case SONG_PROFILE_NUM_PLAYS: - case COURSE_PROFILE_NUM_PLAYS: - case SONG_MACHINE_RANK: - case COURSE_MACHINE_RANK: - case SONG_PROFILE_RANK: - case COURSE_PROFILE_RANK: - str = ssprintf( "%.0f", val ); - } - - int p; +done: m_textContents[c].SetText( str ); const int num = NUM_ITEM_COLORS( g_Contents[c].name ); - for( p = 0; p < num; ++p ) + for( int p = 0; p < num; ++p ) { const CString metric = ITEM_COLOR(g_Contents[c].name, p); CStringArray spec; diff --git a/stepmania/src/RadarValues.cpp b/stepmania/src/RadarValues.cpp index c901e046b8..2871aa46f3 100644 --- a/stepmania/src/RadarValues.cpp +++ b/stepmania/src/RadarValues.cpp @@ -12,7 +12,8 @@ RadarValues::RadarValues() void RadarValues::Init() { - ZERO( *this ); + FOREACH_RadarCategory( rc ) + m_fValues[rc] = RADAR_VAL_UNKNOWN; } XNode* RadarValues::CreateNode() const diff --git a/stepmania/src/RadarValues.h b/stepmania/src/RadarValues.h index c40058a3b3..e896621b19 100644 --- a/stepmania/src/RadarValues.h +++ b/stepmania/src/RadarValues.h @@ -6,6 +6,8 @@ #include "GameConstantsAndTypes.h" +#define RADAR_VAL_UNKNOWN -1 + struct XNode; struct RadarValues