beginnings of late join
This commit is contained in:
@@ -3909,6 +3909,7 @@ AreStagePlayerModsForced=AreStagePlayerModsForced
|
|||||||
AreStageSongModsForced=AreStageSongModsForced
|
AreStageSongModsForced=AreStageSongModsForced
|
||||||
GradeTierForExtra1="Grade_Tier03"
|
GradeTierForExtra1="Grade_Tier03"
|
||||||
GradeTierForExtra2="Grade_Tier03"
|
GradeTierForExtra2="Grade_Tier03"
|
||||||
|
AllowLateJoin=false
|
||||||
|
|
||||||
[ScreenMiniMenuContext]
|
[ScreenMiniMenuContext]
|
||||||
Fallback="ScreenMiniMenu"
|
Fallback="ScreenMiniMenu"
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
#include "Style.h"
|
#include "Style.h"
|
||||||
#include "ThemeManager.h"
|
#include "ThemeManager.h"
|
||||||
#include "UnlockManager.h"
|
#include "UnlockManager.h"
|
||||||
|
#include "ScreenManager.h"
|
||||||
|
#include "Screen.h"
|
||||||
|
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
#include <set>
|
#include <set>
|
||||||
@@ -76,6 +78,7 @@ struct GameStateImpl
|
|||||||
};
|
};
|
||||||
static GameStateImpl *g_pImpl = NULL;
|
static GameStateImpl *g_pImpl = NULL;
|
||||||
|
|
||||||
|
ThemeMetric<bool> ALLOW_LATE_JOIN("GameState","AllowLateJoin");
|
||||||
ThemeMetric<bool> USE_NAME_BLACKLIST("GameState","UseNameBlacklist");
|
ThemeMetric<bool> USE_NAME_BLACKLIST("GameState","UseNameBlacklist");
|
||||||
|
|
||||||
ThemeMetric<RString> DEFAULT_SORT ("GameState","DefaultSort");
|
ThemeMetric<RString> DEFAULT_SORT ("GameState","DefaultSort");
|
||||||
@@ -317,9 +320,6 @@ void GameState::Reset()
|
|||||||
void GameState::JoinPlayer( PlayerNumber pn )
|
void GameState::JoinPlayer( PlayerNumber pn )
|
||||||
{
|
{
|
||||||
m_bSideIsJoined[pn] = true;
|
m_bSideIsJoined[pn] = true;
|
||||||
Message msg( MessageIDToString(Message_PlayerJoined) );
|
|
||||||
msg.SetParam( "Player", pn );
|
|
||||||
MESSAGEMAN->Broadcast( msg );
|
|
||||||
|
|
||||||
if( m_MasterPlayerNumber == PLAYER_INVALID )
|
if( m_MasterPlayerNumber == PLAYER_INVALID )
|
||||||
m_MasterPlayerNumber = pn;
|
m_MasterPlayerNumber = pn;
|
||||||
@@ -327,6 +327,17 @@ void GameState::JoinPlayer( PlayerNumber pn )
|
|||||||
// if first player to join, set start time
|
// if first player to join, set start time
|
||||||
if( GetNumSidesJoined() == 1 )
|
if( GetNumSidesJoined() == 1 )
|
||||||
BeginGame();
|
BeginGame();
|
||||||
|
|
||||||
|
// Set the current style to something appropriate for the new number of joined players.
|
||||||
|
if( ALLOW_LATE_JOIN && GAMESTATE->m_pCurStyle != NULL )
|
||||||
|
{
|
||||||
|
const Style *pStyle = GAMEMAN->GetFirstCompatibleStyle( m_pCurGame, GetNumSidesJoined(), m_pCurStyle->m_StepsType );
|
||||||
|
GAMESTATE->m_pCurStyle.Set( pStyle );
|
||||||
|
}
|
||||||
|
|
||||||
|
Message msg( MessageIDToString(Message_PlayerJoined) );
|
||||||
|
msg.SetParam( "Player", pn );
|
||||||
|
MESSAGEMAN->Broadcast( msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handle an input that can join a player. Return true if the player joined. */
|
/* Handle an input that can join a player. Return true if the player joined. */
|
||||||
@@ -906,7 +917,14 @@ RString GameState::GetPlayerDisplayName( PlayerNumber pn ) const
|
|||||||
|
|
||||||
bool GameState::PlayersCanJoin() const
|
bool GameState::PlayersCanJoin() const
|
||||||
{
|
{
|
||||||
return GetNumSidesJoined() == 0 || GetCurrentStyle() == NULL; // selecting a style finalizes the players
|
bool b = GetNumSidesJoined() == 0 || GetCurrentStyle() == NULL; // selecting a style finalizes the players
|
||||||
|
if( ALLOW_LATE_JOIN.IsLoaded() && ALLOW_LATE_JOIN )
|
||||||
|
{
|
||||||
|
Screen *pScreen = SCREENMAN->GetTopScreen();
|
||||||
|
if( pScreen )
|
||||||
|
b |= pScreen->AllowLateJoin();
|
||||||
|
}
|
||||||
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GameState::GetNumSidesJoined() const
|
int GameState::GetNumSidesJoined() const
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
|
|
||||||
virtual ScreenType GetScreenType() const { return ALLOW_OPERATOR_MENU_BUTTON ? game_menu : system_menu; }
|
virtual ScreenType GetScreenType() const { return ALLOW_OPERATOR_MENU_BUTTON ? game_menu : system_menu; }
|
||||||
bool AllowOperatorMenuButton() const { return ALLOW_OPERATOR_MENU_BUTTON; }
|
bool AllowOperatorMenuButton() const { return ALLOW_OPERATOR_MENU_BUTTON; }
|
||||||
|
virtual bool AllowLateJoin() const { return false; }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Lua
|
// Lua
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ void ScreenSelect::Input( const InputEventPlus &input )
|
|||||||
{
|
{
|
||||||
// LOG->Trace( "ScreenSelect::Input()" );
|
// LOG->Trace( "ScreenSelect::Input()" );
|
||||||
|
|
||||||
/* Reset the demonstration timer when a key is pressed. */
|
/* Reset the announcer timers when a key is pressed. */
|
||||||
m_timerIdleComment.GetDeltaTime();
|
m_timerIdleComment.GetDeltaTime();
|
||||||
m_timerIdleTimeout.GetDeltaTime();
|
m_timerIdleTimeout.GetDeltaTime();
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public:
|
|||||||
virtual void TweenOffScreen();
|
virtual void TweenOffScreen();
|
||||||
|
|
||||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||||
|
virtual bool AllowLateJoin() const { return true; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum Page { PAGE_1, PAGE_2, NUM_PAGES }; // on PAGE_2, cursors are locked together
|
enum Page { PAGE_1, PAGE_2, NUM_PAGES }; // on PAGE_2, cursors are locked together
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ void ScreenSelectMusic::Init()
|
|||||||
COMMAND( m_sprCDTitleBack, "Back" );
|
COMMAND( m_sprCDTitleBack, "Back" );
|
||||||
this->AddChild( &m_sprCDTitleBack );
|
this->AddChild( &m_sprCDTitleBack );
|
||||||
|
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_ENUM( PlayerNumber, p )
|
||||||
{
|
{
|
||||||
m_sprHighScoreFrame[p].SetName( ssprintf("ScoreFrameP%d",p+1) );
|
m_sprHighScoreFrame[p].SetName( ssprintf("ScoreFrameP%d",p+1) );
|
||||||
m_sprHighScoreFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("score frame p%d",p+1)) );
|
m_sprHighScoreFrame[p].Load( THEME->GetPathG(m_sName,ssprintf("score frame p%d",p+1)) );
|
||||||
@@ -287,6 +287,18 @@ void ScreenSelectMusic::Input( const InputEventPlus &input )
|
|||||||
{
|
{
|
||||||
// LOG->Trace( "ScreenSelectMusic::Input()" );
|
// LOG->Trace( "ScreenSelectMusic::Input()" );
|
||||||
|
|
||||||
|
|
||||||
|
if( input.MenuI == MENU_BUTTON_START && input.type == IET_FIRST_PRESS && GAMESTATE->JoinInput(input.pn) )
|
||||||
|
{
|
||||||
|
|
||||||
|
int iSel = 0;
|
||||||
|
m_iSelection[input.pn] = iSel;
|
||||||
|
SwitchToPreferredDifficulty();
|
||||||
|
return; // don't handle this press again below
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// temp Chris debug
|
// temp Chris debug
|
||||||
if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_F8 )
|
if( input.DeviceI.device == DEVICE_KEYBOARD && input.DeviceI.button == KEY_F8 )
|
||||||
{
|
{
|
||||||
@@ -432,7 +444,7 @@ void ScreenSelectMusic::Input( const InputEventPlus &input )
|
|||||||
|
|
||||||
bool bLeftIsDown = false;
|
bool bLeftIsDown = false;
|
||||||
bool bRightIsDown = false;
|
bool bRightIsDown = false;
|
||||||
FOREACH_EnabledPlayer( p )
|
FOREACH_HumanPlayer( p )
|
||||||
{
|
{
|
||||||
bLeftIsDown |= INPUTMAPPER->IsBeingPressed( m_GameButtonPreviousSong, p );
|
bLeftIsDown |= INPUTMAPPER->IsBeingPressed( m_GameButtonPreviousSong, p );
|
||||||
bRightIsDown |= INPUTMAPPER->IsBeingPressed( m_GameButtonNextSong, p );
|
bRightIsDown |= INPUTMAPPER->IsBeingPressed( m_GameButtonNextSong, p );
|
||||||
@@ -540,7 +552,7 @@ bool ScreenSelectMusic::DetectCodes( const InputEventPlus &input )
|
|||||||
void ScreenSelectMusic::UpdateSelectButton()
|
void ScreenSelectMusic::UpdateSelectButton()
|
||||||
{
|
{
|
||||||
bool bSelectIsDown = false;
|
bool bSelectIsDown = false;
|
||||||
FOREACH_EnabledPlayer( pn )
|
FOREACH_HumanPlayer( pn )
|
||||||
bSelectIsDown |= INPUTMAPPER->IsBeingPressed( MENU_BUTTON_SELECT, pn );
|
bSelectIsDown |= INPUTMAPPER->IsBeingPressed( MENU_BUTTON_SELECT, pn );
|
||||||
if( !SELECT_MENU_AVAILABLE )
|
if( !SELECT_MENU_AVAILABLE )
|
||||||
bSelectIsDown = false;
|
bSelectIsDown = false;
|
||||||
@@ -590,7 +602,7 @@ void ScreenSelectMusic::ChangeDifficulty( PlayerNumber pn, int dir )
|
|||||||
}
|
}
|
||||||
|
|
||||||
vector<PlayerNumber> vpns;
|
vector<PlayerNumber> vpns;
|
||||||
FOREACH_HumanPlayer( p )
|
FOREACH_ENUM( PlayerNumber, p )
|
||||||
{
|
{
|
||||||
if( pn == p || GAMESTATE->DifficultiesLocked() )
|
if( pn == p || GAMESTATE->DifficultiesLocked() )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public:
|
|||||||
virtual void Update( float fDeltaTime );
|
virtual void Update( float fDeltaTime );
|
||||||
virtual void Input( const InputEventPlus &input );
|
virtual void Input( const InputEventPlus &input );
|
||||||
virtual void HandleScreenMessage( const ScreenMessage SM );
|
virtual void HandleScreenMessage( const ScreenMessage SM );
|
||||||
|
virtual bool AllowLateJoin() const { return true; }
|
||||||
|
|
||||||
virtual void MenuStart( const InputEventPlus &input );
|
virtual void MenuStart( const InputEventPlus &input );
|
||||||
virtual void MenuBack( const InputEventPlus &input );
|
virtual void MenuBack( const InputEventPlus &input );
|
||||||
|
|||||||
Reference in New Issue
Block a user