From dc7f16ed324c60c513795a6f593617f1c3af5344 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sat, 9 Apr 2005 09:34:54 +0000 Subject: [PATCH] broadcast GoalComplete --- stepmania/src/GameState.cpp | 33 ++++++++++++++++++++++++++++++++ stepmania/src/GameState.h | 7 +++++++ stepmania/src/MessageManager.cpp | 8 ++++++++ stepmania/src/MessageManager.h | 2 ++ 4 files changed, 50 insertions(+) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 3e7a45a4b2..f89957e59d 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -554,6 +554,12 @@ void GameState::Update( float fDelta ) if( m_pPlayerState[p]->m_fSecondsUntilAttacksPhasedOut > 0 ) m_pPlayerState[p]->m_fSecondsUntilAttacksPhasedOut = max( 0, m_pPlayerState[p]->m_fSecondsUntilAttacksPhasedOut - fDelta ); + + if( !m_bGoalComplete[p] && IsGoalComplete(p) ) + { + m_bGoalComplete[p] = true; + MESSAGEMAN->Broadcast( (Message)(MESSAGE_GOAL_COMPLETE_P1+p) ); + } } } @@ -643,6 +649,8 @@ void GameState::ResetStageStatistics() m_pPlayerState[p]->m_iLastPositiveSumOfAttackLevels = 0; m_pPlayerState[p]->m_fSecondsUntilAttacksPhasedOut = 0; // PlayerAI not affected + + m_bGoalComplete[p] = false; } @@ -1830,6 +1838,31 @@ bool GameState::IsPlayerDead( PlayerNumber pn ) const return GAMESTATE->m_pPlayerState[pn]->m_HealthState == PlayerState::DEAD; } +float GameState::GetGoalPercentComplete( PlayerNumber pn ) +{ + if( !PROFILEMAN->IsUsingProfile(pn) ) + return 0; + const Profile *pProfile = PROFILEMAN->GetProfile(pn); + const StageStats &ssAccum = STATSMAN->GetAccumStageStats(); + const StageStats &ssCurrent = STATSMAN->m_CurStageStats; + const PlayerStageStats &pssAccum = ssAccum.m_player[pn]; + const PlayerStageStats &pssCurrent = ssCurrent.m_player[pn]; + + float fActual = 0; + float fGoal = 0; + switch( pProfile->m_GoalType ) + { + case GOAL_CALORIES: + fActual = pssAccum.fCaloriesBurned + pssCurrent.fCaloriesBurned; + fGoal = pProfile->m_iGoalCalories; + break; + case GOAL_TIME: + fActual = ssAccum.fGameplaySeconds + ssCurrent.fGameplaySeconds; + fGoal = pProfile->m_iGoalSeconds; + break; + } + return fActual / fGoal; +} // lua start diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index 760159506b..06daa76acf 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -182,6 +182,9 @@ public: // used in PLAY_MODE_RAVE float m_fTugLifePercentP1; + + // used in workout + bool m_bGoalComplete[NUM_PLAYERS]; void GetUndisplayedBeats( const PlayerState* pPlayerState, float TotalSeconds, float &StartBeat, float &EndBeat ) const; // only meaningful when a NoteField is in use void LaunchAttack( PlayerNumber target, const Attack& a ); @@ -290,6 +293,10 @@ public: BroadcastOnChangePtr m_pEditSourceSteps; BroadcastOnChange m_stEditSource; + // Workout stuff + float GetGoalPercentComplete( PlayerNumber pn ); + bool IsGoalComplete( PlayerNumber pn ) { return GetGoalPercentComplete( pn ) >= 1; } + // Lua void PushSelf( lua_State *L ); }; diff --git a/stepmania/src/MessageManager.cpp b/stepmania/src/MessageManager.cpp index 5b23ff8c0c..9752a4ba18 100644 --- a/stepmania/src/MessageManager.cpp +++ b/stepmania/src/MessageManager.cpp @@ -15,6 +15,12 @@ static const CString MessageNames[NUM_MESSAGES] = { "EditStepsTypeChanged", "EditSourceStepsChanged", "EditSourceStepsTypeChanged", + "EditPreferredDifficutyP1Changed", + "EditPreferredDifficutyP2Changed", + "EditPreferredCourseDifficutyP1Changed", + "EditPreferredCourseDifficutyP2Changed", + "GoalCompleteP1", + "GoalCompleteP2", }; XToString( Message, NUM_MESSAGES ); @@ -57,6 +63,8 @@ void MessageManager::Unsubscribe( IMessageSubscriber* pSubscriber, Message m ) void MessageManager::Broadcast( const CString& sMessage ) const { + ASSERT( !sMessage.empty() ); + map::const_iterator iter = m_MessageToSubscribers.find( sMessage ); if( iter == m_MessageToSubscribers.end() ) return; diff --git a/stepmania/src/MessageManager.h b/stepmania/src/MessageManager.h index a78686e414..21bfb8f6d2 100644 --- a/stepmania/src/MessageManager.h +++ b/stepmania/src/MessageManager.h @@ -26,6 +26,8 @@ enum Message MESSAGE_EDIT_PREFERRED_DIFFICULTY_P2_CHANGED, MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P1_CHANGED, MESSAGE_EDIT_PREFERRED_COURSE_DIFFICULTY_P2_CHANGED, + MESSAGE_GOAL_COMPLETE_P1, + MESSAGE_GOAL_COMPLETE_P2, NUM_MESSAGES, MESSAGE_INVALID };