experimental: AutoJoin, join players immediately (or as soon as possible) when enough coins are inserted
This commit is contained in:
@@ -103,6 +103,7 @@ static ThemeMetric<bool> ARE_STAGE_PLAYER_MODS_FORCED( "GameState","AreStagePlay
|
|||||||
static ThemeMetric<bool> ARE_STAGE_SONG_MODS_FORCED( "GameState","AreStageSongModsForced" );
|
static ThemeMetric<bool> ARE_STAGE_SONG_MODS_FORCED( "GameState","AreStageSongModsForced" );
|
||||||
|
|
||||||
static Preference<Premium> g_Premium( "Premium", Premium_Off );
|
static Preference<Premium> g_Premium( "Premium", Premium_Off );
|
||||||
|
Preference<bool> GameState::m_bAutoJoin( "AutoJoin", false );
|
||||||
|
|
||||||
GameState::GameState() :
|
GameState::GameState() :
|
||||||
m_pCurGame( Message_CurrentGameChanged ),
|
m_pCurGame( Message_CurrentGameChanged ),
|
||||||
@@ -413,6 +414,17 @@ bool GameState::JoinInput( PlayerNumber pn )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GameState::JoinPlayers()
|
||||||
|
{
|
||||||
|
bool bJoined = false;
|
||||||
|
FOREACH_PlayerNumber( pn )
|
||||||
|
{
|
||||||
|
if( JoinInput(pn) )
|
||||||
|
bJoined = true;
|
||||||
|
}
|
||||||
|
return bJoined;
|
||||||
|
}
|
||||||
|
|
||||||
int GameState::GetCoinsNeededToJoin() const
|
int GameState::GetCoinsNeededToJoin() const
|
||||||
{
|
{
|
||||||
int iCoinsToCharge = 0;
|
int iCoinsToCharge = 0;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "RageTimer.h"
|
#include "RageTimer.h"
|
||||||
#include "PlayerOptions.h"
|
#include "PlayerOptions.h"
|
||||||
#include "SongOptions.h"
|
#include "SongOptions.h"
|
||||||
|
#include "Preference.h"
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <deque>
|
#include <deque>
|
||||||
@@ -45,6 +46,7 @@ public:
|
|||||||
void JoinPlayer( PlayerNumber pn );
|
void JoinPlayer( PlayerNumber pn );
|
||||||
void UnjoinPlayer( PlayerNumber pn );
|
void UnjoinPlayer( PlayerNumber pn );
|
||||||
bool JoinInput( PlayerNumber pn );
|
bool JoinInput( PlayerNumber pn );
|
||||||
|
bool JoinPlayers();
|
||||||
void LoadProfiles( bool bLoadEdits = true );
|
void LoadProfiles( bool bLoadEdits = true );
|
||||||
void SaveProfiles();
|
void SaveProfiles();
|
||||||
void SaveProfile( PlayerNumber pn );
|
void SaveProfile( PlayerNumber pn );
|
||||||
@@ -301,10 +303,14 @@ public:
|
|||||||
PlayerState* m_pMultiPlayerState[NUM_MultiPlayer];
|
PlayerState* m_pMultiPlayerState[NUM_MultiPlayer];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Preference wrappers
|
// Preferences
|
||||||
|
//
|
||||||
|
static Preference<bool> m_bAutoJoin;
|
||||||
|
|
||||||
//
|
//
|
||||||
// These options have weird interactions depending on m_bEventMode,
|
// These options have weird interactions depending on m_bEventMode,
|
||||||
// so wrap them
|
// so wrap them
|
||||||
|
//
|
||||||
bool m_bTemporaryEventMode;
|
bool m_bTemporaryEventMode;
|
||||||
bool IsEventMode() const;
|
bool IsEventMode() const;
|
||||||
CoinMode GetCoinMode() const;
|
CoinMode GetCoinMode() const;
|
||||||
|
|||||||
@@ -127,6 +127,15 @@ void ScreenWithMenuElements::BeginScreen()
|
|||||||
|
|
||||||
/* Evaluate FirstUpdateCommand. */
|
/* Evaluate FirstUpdateCommand. */
|
||||||
this->PlayCommand( "FirstUpdate" );
|
this->PlayCommand( "FirstUpdate" );
|
||||||
|
|
||||||
|
/* If AutoJoin is enabled, we may have a credit that couldn't be used to join when
|
||||||
|
* the coin was inserted due to AllowLateJoin being disabled at the time. Try to
|
||||||
|
* join players when a new screen starts. */
|
||||||
|
if( GAMESTATE->m_bAutoJoin.Get() )
|
||||||
|
{
|
||||||
|
if( GAMESTATE->JoinPlayers() )
|
||||||
|
SCREENMAN->PlayStartSound();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ScreenWithMenuElements::HandleScreenMessage( const ScreenMessage SM )
|
void ScreenWithMenuElements::HandleScreenMessage( const ScreenMessage SM )
|
||||||
|
|||||||
@@ -1198,6 +1198,13 @@ void StepMania::InsertCoin( int iNum, bool bCountInBookkeeping )
|
|||||||
else
|
else
|
||||||
SCREENMAN->PlayInvalidSound();
|
SCREENMAN->PlayInvalidSound();
|
||||||
|
|
||||||
|
/* If AutoJoin and enough coins to join have been inserted, then try to join a player. */
|
||||||
|
if( GAMESTATE->m_bAutoJoin.Get() )
|
||||||
|
{
|
||||||
|
if( GAMESTATE->JoinPlayers() )
|
||||||
|
SCREENMAN->PlayStartSound();
|
||||||
|
}
|
||||||
|
|
||||||
Message msg( "CoinInserted" );
|
Message msg( "CoinInserted" );
|
||||||
// below params are unused
|
// below params are unused
|
||||||
//msg.SetParam( "Coins", GAMESTATE->m_iCoins );
|
//msg.SetParam( "Coins", GAMESTATE->m_iCoins );
|
||||||
|
|||||||
Reference in New Issue
Block a user