fix workout goal not working correctly when CurStageIndex > 0

This commit is contained in:
Chris Danford
2008-02-24 07:43:55 +00:00
parent f612f70cf7
commit e23275084d
3 changed files with 14 additions and 18 deletions
+5 -6
View File
@@ -794,9 +794,8 @@ void GameState::Update( float fDelta )
if( WORKOUTMAN->m_pCurWorkout != NULL && !m_bWorkoutGoalComplete ) if( WORKOUTMAN->m_pCurWorkout != NULL && !m_bWorkoutGoalComplete )
{ {
const StageStats &ssAccum = STATSMAN->GetAccumPlayedStageStats();
const StageStats &ssCurrent = STATSMAN->m_CurStageStats; const StageStats &ssCurrent = STATSMAN->m_CurStageStats;
bool bGoalComplete = ssAccum.m_fGameplaySeconds + ssCurrent.m_fGameplaySeconds > WORKOUTMAN->m_pCurWorkout->m_iMinutes*60; bool bGoalComplete = ssCurrent.m_fGameplaySeconds > WORKOUTMAN->m_pCurWorkout->m_iMinutes*60;
if( bGoalComplete ) if( bGoalComplete )
{ {
MESSAGEMAN->Broadcast( "WorkoutGoalComplete" ); MESSAGEMAN->Broadcast( "WorkoutGoalComplete" );
@@ -1898,9 +1897,7 @@ Premium GameState::GetPremium() const
float GameState::GetGoalPercentComplete( PlayerNumber pn ) float GameState::GetGoalPercentComplete( PlayerNumber pn )
{ {
const Profile *pProfile = PROFILEMAN->GetProfile(pn); const Profile *pProfile = PROFILEMAN->GetProfile(pn);
const StageStats &ssAccum = STATSMAN->GetAccumPlayedStageStats();
const StageStats &ssCurrent = STATSMAN->m_CurStageStats; const StageStats &ssCurrent = STATSMAN->m_CurStageStats;
const PlayerStageStats &pssAccum = ssAccum.m_player[pn];
const PlayerStageStats &pssCurrent = ssCurrent.m_player[pn]; const PlayerStageStats &pssCurrent = ssCurrent.m_player[pn];
float fActual = 0; float fActual = 0;
@@ -1908,11 +1905,11 @@ float GameState::GetGoalPercentComplete( PlayerNumber pn )
switch( pProfile->m_GoalType ) switch( pProfile->m_GoalType )
{ {
case GoalType_Calories: case GoalType_Calories:
fActual = pssAccum.m_fCaloriesBurned + pssCurrent.m_fCaloriesBurned; fActual = pssCurrent.m_fCaloriesBurned;
fGoal = (float)pProfile->m_iGoalCalories; fGoal = (float)pProfile->m_iGoalCalories;
break; break;
case GoalType_Time: case GoalType_Time:
fActual = ssAccum.m_fGameplaySeconds + ssCurrent.m_fGameplaySeconds; fActual = ssCurrent.m_fGameplaySeconds;
fGoal = (float)pProfile->m_iGoalSeconds; fGoal = (float)pProfile->m_iGoalSeconds;
break; break;
case GoalType_None: case GoalType_None:
@@ -2247,6 +2244,7 @@ public:
{ {
p->m_bJukeboxUsesModifiers = BArg(1); return 0; p->m_bJukeboxUsesModifiers = BArg(1); return 0;
} }
DEFINE_METHOD( GetWorkoutGoalComplete, m_bWorkoutGoalComplete )
LunaGameState() LunaGameState()
{ {
@@ -2329,6 +2327,7 @@ public:
ADD_METHOD( GetStageSeed ); ADD_METHOD( GetStageSeed );
ADD_METHOD( SaveLocalData ); ADD_METHOD( SaveLocalData );
ADD_METHOD( SetJukeboxUsesModifiers ); ADD_METHOD( SetJukeboxUsesModifiers );
ADD_METHOD( GetWorkoutGoalComplete );
} }
}; };
+7 -10
View File
@@ -41,12 +41,12 @@ void WorkoutGraph::LoadFromNode( const XNode* pNode )
Load(); Load();
} }
void WorkoutGraph::SetFromGameState() void WorkoutGraph::SetFromCurrentWorkout()
{ {
SetFromGameStateInternal( STATSMAN->m_CurStageStats.m_vpPlayedSongs.size() ); SetInternal( 0 );
} }
void WorkoutGraph::SetFromGameStateInternal( int iNumSongsToShowForCurrentStage ) void WorkoutGraph::SetInternal( int iMinSongsPlayed )
{ {
ASSERT( WORKOUTMAN->m_pCurWorkout ); ASSERT( WORKOUTMAN->m_pCurWorkout );
@@ -57,11 +57,8 @@ void WorkoutGraph::SetFromGameStateInternal( int iNumSongsToShowForCurrentStage
} }
m_vpBars.clear(); m_vpBars.clear();
int iTotalSongsPlayed =
STATSMAN->GetAccumPlayedStageStats().m_vpPlayedSongs.size() +
iNumSongsToShowForCurrentStage;
int iWorkoutEstimatedSongs = WORKOUTMAN->m_pCurWorkout->GetEstimatedNumSongs(); int iWorkoutEstimatedSongs = WORKOUTMAN->m_pCurWorkout->GetEstimatedNumSongs();
int iNumSongsToShow = max( iTotalSongsPlayed, iWorkoutEstimatedSongs ); int iNumSongsToShow = max( iMinSongsPlayed, iWorkoutEstimatedSongs );
vector<int> viMeters; vector<int> viMeters;
WORKOUTMAN->m_pCurWorkout->GetEstimatedMeters( iNumSongsToShow, viMeters ); WORKOUTMAN->m_pCurWorkout->GetEstimatedMeters( iNumSongsToShow, viMeters );
@@ -105,7 +102,7 @@ void WorkoutGraph::SetFromGameStateInternal( int iNumSongsToShowForCurrentStage
void WorkoutGraph::SetFromGameStateAndHighlightSong( int iSongIndex ) void WorkoutGraph::SetFromGameStateAndHighlightSong( int iSongIndex )
{ {
SetFromGameStateInternal( iSongIndex+1 ); SetInternal( iSongIndex+1 );
FOREACH( Sprite*, m_vpBars, spr ) FOREACH( Sprite*, m_vpBars, spr )
(*spr)->StopEffect(); (*spr)->StopEffect();
@@ -123,12 +120,12 @@ void WorkoutGraph::SetFromGameStateAndHighlightSong( int iSongIndex )
class LunaWorkoutGraph: public Luna<WorkoutGraph> class LunaWorkoutGraph: public Luna<WorkoutGraph>
{ {
public: public:
static int SetFromGameState( T* p, lua_State *L ) { p->SetFromGameState(); return 0; } static int SetFromCurrentWorkout( T* p, lua_State *L ) { p->SetFromCurrentWorkout(); return 0; }
static int SetFromGameStateAndHighlightSong( T* p, lua_State *L ) { p->SetFromGameStateAndHighlightSong(IArg(1)); return 0; } static int SetFromGameStateAndHighlightSong( T* p, lua_State *L ) { p->SetFromGameStateAndHighlightSong(IArg(1)); return 0; }
LunaWorkoutGraph() LunaWorkoutGraph()
{ {
ADD_METHOD( SetFromGameState ); ADD_METHOD( SetFromCurrentWorkout );
ADD_METHOD( SetFromGameStateAndHighlightSong ); ADD_METHOD( SetFromGameStateAndHighlightSong );
} }
}; };
+2 -2
View File
@@ -16,14 +16,14 @@ public:
void Load(); void Load();
void LoadFromNode( const XNode* pNode ); void LoadFromNode( const XNode* pNode );
void SetFromGameState(); void SetFromCurrentWorkout();
void SetFromGameStateAndHighlightSong( int iSongIndex ); void SetFromGameStateAndHighlightSong( int iSongIndex );
// Lua // Lua
void PushSelf( lua_State *L ); void PushSelf( lua_State *L );
protected: protected:
void SetFromGameStateInternal( int iNumSongsToShowForCurrentStage ); void SetInternal( int iNumSongsToShowForCurrentStage );
void HighlightSong( int iSongIndex ); void HighlightSong( int iSongIndex );
Sprite m_sprEmpty; Sprite m_sprEmpty;