Added server-automated song selection.
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user