From 82e4a01612e0434d6a0d5c1a4c0bd505ad2af485 Mon Sep 17 00:00:00 2001 From: Charles Lohr Date: Wed, 1 Sep 2004 04:09:36 +0000 Subject: [PATCH] ScreenNetEvaluation done... Waiting for server implementation. --- stepmania/src/NetworkSyncManager.cpp | 17 ++++- stepmania/src/NetworkSyncManager.h | 12 +++- stepmania/src/ScreenNetEvaluation.cpp | 97 +++++++++++++++++++++++++++ stepmania/src/ScreenNetEvaluation.h | 18 +++++ 4 files changed, 142 insertions(+), 2 deletions(-) diff --git a/stepmania/src/NetworkSyncManager.cpp b/stepmania/src/NetworkSyncManager.cpp index 0d187c273d..3005daa3f5 100644 --- a/stepmania/src/NetworkSyncManager.cpp +++ b/stepmania/src/NetworkSyncManager.cpp @@ -379,6 +379,14 @@ void NetworkSyncManager::StartRequest(short position) for (int i=0;i<2-players;i++) m_packet.WriteNT(""); //Write a NULL if no player + //This needs to be reset before ScreenEvaluation could possibly be called + for (int i=0; i< NETMAXPLAYERS; i++) + { + m_EvalPlayerData[i].grade=0; + m_EvalPlayerData[i].score=0; + for (int j=0;j m_ActivePlayer; vector m_PlayerNames; + //Used for ScreenNetEvaluation + EndOfGame_PlayerData m_EvalPlayerData[NETMAXPLAYERS]; + //Used togeather for bool ChangedScoreboard(int Column); //If scoreboard changed since this function last called, then true. CString m_Scoreboard[NUM_NSSB_CATEGORIES]; diff --git a/stepmania/src/ScreenNetEvaluation.cpp b/stepmania/src/ScreenNetEvaluation.cpp index 2e366934dc..04fa427687 100644 --- a/stepmania/src/ScreenNetEvaluation.cpp +++ b/stepmania/src/ScreenNetEvaluation.cpp @@ -1,6 +1,103 @@ #include "ScreenNetEvaluation.h" +#include "ThemeManager.h" +#include "Gamestate.h" + +const int NUM_SCORE_DIGITS = 9; + +#define USERSBG_WIDTH THEME->GetMetricF("ScreenNetEvaluation","UsersBGWidth") +#define USERSBG_HEIGHT THEME->GetMetricF("ScreenNetEvaluation","UsersBGHeight") +#define USERSBG_COLOR THEME->GetMetricC("ScreenNetEvaluation","UsersBGColor") + +#define USERDX THEME->GetMetricF("ScreenNetEvaluation","UserDX") +#define USERDY THEME->GetMetricF("ScreenNetEvaluation","UserDY") ScreenNetEvaluation::ScreenNetEvaluation (const CString & sClassName) : ScreenEvaluation( sClassName ) { + m_pActivePlayer = PLAYER_1; + FOREACH_PlayerNumber (pn) + if ( GAMESTATE->IsPlayerEnabled( pn ) ) + m_pActivePlayer = pn; + + int ShowSide; + + if (m_pActivePlayer == PLAYER_1) + ShowSide = 2; + else + ShowSide = 1; + + m_rectUsersBG.SetWidth( USERSBG_WIDTH ); + m_rectUsersBG.SetHeight( USERSBG_HEIGHT ); + m_rectUsersBG.SetDiffuse( USERSBG_COLOR ); + m_rectUsersBG.SetName( "UsersBG" ); + ON_COMMAND( m_rectUsersBG ); + + m_rectUsersBG.SetXY( + THEME->GetMetricF("ScreenNetEvaluation",ssprintf("UsersBG%dX",ShowSide)), + THEME->GetMetricF("ScreenNetEvaluation",ssprintf("UsersBG%dY",ShowSide)) ); + + this->AddChild( &m_rectUsersBG ); + + int cx = THEME->GetMetricF("ScreenNetEvaluation",ssprintf("User%dX",ShowSide)); + int cy = THEME->GetMetricF("ScreenNetEvaluation",ssprintf("User%dY",ShowSide)); + + m_iActivePlayers = NSMAN->m_ActivePlayers; + m_iCurrentPlayer = 0; + + for( int i=0; im_PlayerNames[NSMAN->m_ActivePlayer[i]] == GAMESTATE->GetPlayerDisplayName(m_pActivePlayer) ) + m_iCurrentPlayer = i; + + m_textUsers[i].LoadFromFont( THEME->GetPathF(m_sName,"names") ); + m_textUsers[i].SetName( "User" ); + m_textUsers[i].SetShadowLength( 1 ); + m_textUsers[i].SetXY( cx, cy ); + m_textUsers[i].SetText( NSMAN->m_PlayerNames[NSMAN->m_ActivePlayer[i]] ); + + ON_COMMAND( m_textUsers[i] ); + this->AddChild( &m_textUsers[i] ); + cx+=USERDX; + cy+=USERDY; + } + + COMMAND( m_textUsers[m_iCurrentPlayer], "Sel" ); +} + +void ScreenNetEvaluation::MenuLeft( PlayerNumber pn, const InputEventType type ) +{ + MenuUp( pn, type ); +} + +void ScreenNetEvaluation::MenuUp( PlayerNumber pn, const InputEventType type ) +{ + COMMAND( m_textUsers[m_iCurrentPlayer], "DeSel" ); + m_iCurrentPlayer = (m_iCurrentPlayer + m_iActivePlayers - 1) % m_iActivePlayers; + COMMAND( m_textUsers[m_iCurrentPlayer], "Sel" ); + UpdateStats(); +} + +void ScreenNetEvaluation::MenuRight( PlayerNumber pn, const InputEventType type ) +{ + MenuDown( pn, type ); +} + +void ScreenNetEvaluation::MenuDown( PlayerNumber pn, const InputEventType type ) +{ + COMMAND( m_textUsers[m_iCurrentPlayer], "DeSel" ); + m_iCurrentPlayer = (m_iCurrentPlayer + 1) % m_iActivePlayers; + COMMAND( m_textUsers[m_iCurrentPlayer], "Sel" ); + UpdateStats(); +} + +void ScreenNetEvaluation::UpdateStats() +{ + m_Grades[m_pActivePlayer].SetGrade( (PlayerNumber)m_pActivePlayer, (Grade)NSMAN->m_EvalPlayerData[m_iCurrentPlayer].grade ); + m_Grades[m_pActivePlayer].Spin(); + m_Grades[m_pActivePlayer].SettleImmediately(); + + m_textScore[m_pActivePlayer].SetText( ssprintf("%*.0i", NUM_SCORE_DIGITS, NSMAN->m_EvalPlayerData[m_iCurrentPlayer].score) ); + + for (int j=0;jm_EvalPlayerData[m_iCurrentPlayer].tapScores[j] ) ); } diff --git a/stepmania/src/ScreenNetEvaluation.h b/stepmania/src/ScreenNetEvaluation.h index bd0d32453f..d25dfe3f56 100644 --- a/stepmania/src/ScreenNetEvaluation.h +++ b/stepmania/src/ScreenNetEvaluation.h @@ -1,9 +1,27 @@ #include "global.h" #include "Screen.h" #include "ScreenEvaluation.h" +#include "NetworkSyncManager.h" +#include "Quad.h" +#include "BitmapText.h" class ScreenNetEvaluation: public ScreenEvaluation { public: ScreenNetEvaluation (const CString & sClassName); +protected: + virtual void MenuLeft( PlayerNumber pn, const InputEventType type ); + virtual void MenuUp( PlayerNumber pn, const InputEventType type ); + virtual void MenuRight( PlayerNumber pn, const InputEventType type ); + virtual void MenuDown( PlayerNumber pn, const InputEventType type ); + + void UpdateStats( ); +private: + Quad m_rectUsersBG; + + BitmapText m_textUsers[NETMAXPLAYERS]; + int m_iCurrentPlayer; + int m_iActivePlayers; + + PlayerNumber m_pActivePlayer; }; \ No newline at end of file