Added server-automated song selection.

This commit is contained in:
Charles Lohr
2004-08-28 03:37:52 +00:00
parent 7570cb9eb1
commit 3903354786
4 changed files with 99 additions and 13 deletions
+22
View File
@@ -18,6 +18,7 @@ void NetworkSyncManager::DisplayStartupStatus() { }
void NetworkSyncManager::Update( float fDeltaTime ) { }
bool NetworkSyncManager::ChangedScoreboard(int Column) { return false; }
void NetworkSyncManager::SendChat( CString message ) { }
void NetworkSyncManager::SelectUserSong() { }
#else
#include "ezsockets.h"
#include "ProfileManager.h"
@@ -483,6 +484,14 @@ void NetworkSyncManager::ProcessInput()
m_WaitingChat = m_packet.ReadNT();
SCREENMAN->SendMessageToTopScreen( SM_AddToChat );
}
case 8: //Select Song/Play song
{
m_iSelectMode = m_packet.Read1();
m_sMainTitle = m_packet.ReadNT();
m_sArtist = m_packet.ReadNT();
m_sSubTitle = m_packet.ReadNT();
SCREENMAN->SendMessageToTopScreen( SM_ChangeSong );
}
}
m_packet.ClearPacket();
}
@@ -504,6 +513,19 @@ void NetworkSyncManager::SendChat( CString message )
NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position);
}
void NetworkSyncManager::SelectUserSong()
{
m_packet.ClearPacket();
m_packet.Write1( 8 );
m_packet.Write1( m_iSelectMode );
m_packet.WriteNT( m_sMainTitle );
m_packet.WriteNT( m_sArtist );
m_packet.WriteNT( m_sSubTitle );
NetPlayerClient->SendPack((char*)&m_packet.Data, m_packet.Position);
}
//Packet functions
uint8_t PacketFunctions::Read1()
{
+8
View File
@@ -74,6 +74,14 @@ public:
//Used for chatting
void SendChat( CString message );
CString m_WaitingChat;
//Used for song checking/changing
CString m_sMainTitle;
CString m_sArtist;
CString m_sSubTitle;
int m_iSelectMode;
void SelectUserSong();
private:
#if !defined(WITHOUT_NETWORKING)
+67 -13
View File
@@ -188,7 +188,6 @@ ScreenNetSelectMusic::ScreenNetSelectMusic( CString sName ) : ScreenWithMenuElem
}
//Make the last group the full list group.
//XXX: what if someone has a group named [All Songs]?
//Must be last
m_vGroups.push_back( AllGroups );
m_iShowGroups = NUM_GROUPS_SHOW;
@@ -339,7 +338,48 @@ void ScreenNetSelectMusic::HandleScreenMessage( const ScreenMessage SM )
break;
}
case SM_ChangeSong:
{
//We always need to find the song
m_iGroupNum=m_vGroups.size()-1; //Alphabetical
UpdateGroupsListPos();
UpdateSongsList();
int i;
for ( i = 0; m_vSongs.size(); i++)
if ( ( m_vSongs[i]->GetTranslitArtist() == NSMAN->m_sArtist ) &&
( m_vSongs[i]->GetTranslitMainTitle() == NSMAN->m_sMainTitle ) &&
( m_vSongs[i]->GetTranslitSubTitle() == NSMAN->m_sSubTitle ) )
break;
bool haveSong = false;
if ( i != m_vSongs.size() )
haveSong = true;
switch (NSMAN->m_iSelectMode)
{
case 2: //We need to do cmd 1 as well here
case 1: //Scroll to song as well
if (haveSong)
{
m_iSongNum = i + m_vSongs.size();
UpdateSongsListPos();
}
//don't break here
case 0: //See if client has song
if (haveSong)
NSMAN->m_iSelectMode = 0;
else
NSMAN->m_iSelectMode = 1;
NSMAN->SelectUserSong();
}
//Play the song.
if ( ( NSMAN->m_iSelectMode == 2 ) && ( haveSong ) )
StartSelectedSong();
}
break;
}
@@ -439,18 +479,16 @@ void ScreenNetSelectMusic::MenuDown( PlayerNumber pn, const InputEventType type
void ScreenNetSelectMusic::MenuStart( PlayerNumber pn )
{
Song * pSong = m_vSongs[m_iSongNum%m_vSongs.size()];
StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; //STEPS_TYPE_DANCE_SINGLE;
FOREACH_EnabledPlayer (pn)
if ( NSMAN->useSMserver )
{
GAMESTATE->m_PreferredDifficulty[pn] = m_DC[pn];
Steps * pSteps = pSong->GetStepsByDifficulty(st,m_DC[pn]);
GAMESTATE->m_pCurSteps[pn] = pSteps;
}
GAMESTATE->m_pCurSong = pSong;
TweenOffScreen();
StartTransitioning( SM_GoToNextScreen );
int j = m_iSongNum % m_vSongs.size();
NSMAN->m_sArtist = m_vSongs[j]->GetTranslitArtist();
NSMAN->m_sMainTitle = m_vSongs[j]->GetTranslitMainTitle();
NSMAN->m_sSubTitle = m_vSongs[j]->GetTranslitSubTitle();
NSMAN->m_iSelectMode = 2; //Command for user selecting song
NSMAN->SelectUserSong ();
} else
StartSelectedSong();
}
void ScreenNetSelectMusic::MenuBack( PlayerNumber pn )
@@ -502,6 +540,22 @@ void ScreenNetSelectMusic::UpdateTextInput()
m_textChatInput.SetText( m_sTextInput );
}
void ScreenNetSelectMusic::StartSelectedSong()
{
Song * pSong = m_vSongs[m_iSongNum%m_vSongs.size()];
StepsType st = GAMESTATE->GetCurrentStyle()->m_StepsType; //STEPS_TYPE_DANCE_SINGLE;
FOREACH_EnabledPlayer (pn)
{
GAMESTATE->m_PreferredDifficulty[pn] = m_DC[pn];
Steps * pSteps = pSong->GetStepsByDifficulty(st,m_DC[pn]);
GAMESTATE->m_pCurSteps[pn] = pSteps;
}
GAMESTATE->m_pCurSong = pSong;
TweenOffScreen();
StartTransitioning( SM_GoToNextScreen );
}
void ScreenNetSelectMusic::UpdateSongsListPos()
{
int i,j;
+2
View File
@@ -28,6 +28,8 @@ public:
void UpdateSongsList();
void UpdateTextInput();
void StartSelectedSong();
int m_iSongNum;
int m_iShowSongs; //The number of songs to display to each side
int m_iGroupNum;