in Multiplayer, have multiple Player objects for each MultiPlayer, then choose the best score from each group of Players on StageFinished
This commit is contained in:
@@ -103,6 +103,7 @@ PlayerInfo::PlayerInfo()
|
|||||||
m_mp = MultiPlayer_Invalid;
|
m_mp = MultiPlayer_Invalid;
|
||||||
m_bIsDummy = false;
|
m_bIsDummy = false;
|
||||||
m_iDummyIndex = 0;
|
m_iDummyIndex = 0;
|
||||||
|
m_difficultyForced = Difficulty_Invalid;
|
||||||
m_pLifeMeter = NULL;
|
m_pLifeMeter = NULL;
|
||||||
m_ptextCourseSongNumber = NULL;
|
m_ptextCourseSongNumber = NULL;
|
||||||
m_ptextStepsDescription = NULL;
|
m_ptextStepsDescription = NULL;
|
||||||
@@ -117,7 +118,7 @@ PlayerInfo::PlayerInfo()
|
|||||||
m_pDifficultyIcon = NULL;
|
m_pDifficultyIcon = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField )
|
void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, Difficulty dcForced )
|
||||||
{
|
{
|
||||||
m_pn = pn;
|
m_pn = pn;
|
||||||
m_mp = mp;
|
m_mp = mp;
|
||||||
@@ -190,12 +191,13 @@ void PlayerInfo::Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerInfo::LoadDummyP1( int iDummyIndex )
|
void PlayerInfo::LoadDummyP1( int iDummyIndex, Difficulty dcForced )
|
||||||
{
|
{
|
||||||
m_pn = PLAYER_1;
|
m_pn = PLAYER_1;
|
||||||
m_bPlayerEnabled = IsEnabled();
|
m_bPlayerEnabled = IsEnabled();
|
||||||
m_bIsDummy = true;
|
m_bIsDummy = true;
|
||||||
m_iDummyIndex = iDummyIndex;
|
m_iDummyIndex = iDummyIndex;
|
||||||
|
m_difficultyForced = dcForced;
|
||||||
|
|
||||||
// don't init any of the scoring objects
|
// don't init any of the scoring objects
|
||||||
m_pPlayer = new Player( m_NoteData, true );
|
m_pPlayer = new Player( m_NoteData, true );
|
||||||
@@ -236,11 +238,10 @@ PlayerState *PlayerInfo::GetPlayerState()
|
|||||||
|
|
||||||
PlayerStageStats *PlayerInfo::GetPlayerStageStats()
|
PlayerStageStats *PlayerInfo::GetPlayerStageStats()
|
||||||
{
|
{
|
||||||
if( m_bIsDummy )
|
// multiplayer chooses the PlayerStageStats with the highest score on StageFinalized
|
||||||
|
if( m_bIsDummy || IsMultiPlayer() )
|
||||||
return &m_PlayerStageStatsDummy;
|
return &m_PlayerStageStatsDummy;
|
||||||
return IsMultiPlayer() ?
|
return &STATSMAN->m_CurStageStats.m_player[ GetPlayerStateAndStageStatsIndex() ];
|
||||||
&STATSMAN->m_CurStageStats.m_multiPlayer[ GetPlayerStateAndStageStatsIndex() ] :
|
|
||||||
&STATSMAN->m_CurStageStats.m_player[ GetPlayerStateAndStageStatsIndex() ];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PlayerInfo::IsEnabled()
|
bool PlayerInfo::IsEnabled()
|
||||||
@@ -885,22 +886,9 @@ void ScreenGameplay::SetupSong( int iSongIndex )
|
|||||||
* once in Player::Load, then again in Player::ApplyActiveAttacks. This
|
* once in Player::Load, then again in Player::ApplyActiveAttacks. This
|
||||||
* is very bad for transforms like AddMines.
|
* is very bad for transforms like AddMines.
|
||||||
*/
|
*/
|
||||||
|
if( pi->m_difficultyForced != Difficulty_Invalid )
|
||||||
|
pSteps = SongUtil::GetOneSteps( GAMESTATE->m_pCurSong, pSteps->m_StepsType, pi->m_difficultyForced );
|
||||||
NoteData originalNoteData;
|
NoteData originalNoteData;
|
||||||
if( pi->m_bIsDummy )
|
|
||||||
{
|
|
||||||
switch( pi->m_iDummyIndex )
|
|
||||||
{
|
|
||||||
//case 0:
|
|
||||||
// pSteps = SongUtil::GetOneSteps( GAMESTATE->m_pCurSong, pSteps->m_StepsType, Difficulty_Easy );
|
|
||||||
// break;
|
|
||||||
case 1:
|
|
||||||
pSteps = SongUtil::GetOneSteps( GAMESTATE->m_pCurSong, pSteps->m_StepsType, Difficulty_Medium );
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
pSteps = SongUtil::GetOneSteps( GAMESTATE->m_pCurSong, pSteps->m_StepsType, Difficulty_Hard );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pSteps->GetNoteData( originalNoteData );
|
pSteps->GetNoteData( originalNoteData );
|
||||||
|
|
||||||
const Style* pStyle = GAMESTATE->GetCurrentStyle();
|
const Style* pStyle = GAMESTATE->GetCurrentStyle();
|
||||||
@@ -2185,8 +2173,14 @@ void ScreenGameplay::Input( const InputEventPlus &input )
|
|||||||
|
|
||||||
if( GAMESTATE->m_bMultiplayer )
|
if( GAMESTATE->m_bMultiplayer )
|
||||||
{
|
{
|
||||||
if( input.mp != MultiPlayer_Invalid && GAMESTATE->IsMultiPlayerEnabled(input.mp) )
|
if( input.mp != MultiPlayer_Invalid && GAMESTATE->IsMultiPlayerEnabled(input.mp) && iCol != -1 )
|
||||||
m_vPlayerInfo[input.mp].m_pPlayer->Step( iCol, -1, input.DeviceI.ts, false, bRelease );
|
{
|
||||||
|
FOREACH( PlayerInfo, m_vPlayerInfo, pi )
|
||||||
|
{
|
||||||
|
if( input.mp == pi->m_mp )
|
||||||
|
pi->m_pPlayer->Step( iCol, -1, input.DeviceI.ts, false, bRelease );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -2506,7 +2500,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
else if( SM == SM_DoPrevScreen )
|
else if( SM == SM_DoPrevScreen )
|
||||||
{
|
{
|
||||||
SongFinished();
|
SongFinished();
|
||||||
StageFinished( true );
|
this->StageFinished( true );
|
||||||
|
|
||||||
m_sNextScreen = GetPrevScreen();
|
m_sNextScreen = GetPrevScreen();
|
||||||
|
|
||||||
@@ -2518,7 +2512,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
else if( SM == SM_DoNextScreen )
|
else if( SM == SM_DoNextScreen )
|
||||||
{
|
{
|
||||||
SongFinished();
|
SongFinished();
|
||||||
StageFinished( false );
|
this->StageFinished( false );
|
||||||
//SaveReplay();
|
//SaveReplay();
|
||||||
|
|
||||||
if( AdjustSync::IsSyncDataChanged() )
|
if( AdjustSync::IsSyncDataChanged() )
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ public:
|
|||||||
PlayerInfo();
|
PlayerInfo();
|
||||||
~PlayerInfo();
|
~PlayerInfo();
|
||||||
|
|
||||||
void Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField );
|
void Load( PlayerNumber pn, MultiPlayer mp, bool bShowNoteField, Difficulty dcForced );
|
||||||
void LoadDummyP1( int iDummyIndex );
|
void LoadDummyP1( int iDummyIndex, Difficulty dcForced );
|
||||||
|
|
||||||
void ShowOniGameOver();
|
void ShowOniGameOver();
|
||||||
MultiPlayer GetPlayerStateAndStageStatsIndex() { return m_pn == PLAYER_INVALID ? m_mp : (MultiPlayer)m_pn; }
|
MultiPlayer GetPlayerStateAndStageStatsIndex() { return m_pn == PLAYER_INVALID ? m_mp : (MultiPlayer)m_pn; }
|
||||||
@@ -72,6 +72,7 @@ public:
|
|||||||
MultiPlayer m_mp;
|
MultiPlayer m_mp;
|
||||||
bool m_bIsDummy;
|
bool m_bIsDummy;
|
||||||
int m_iDummyIndex;
|
int m_iDummyIndex;
|
||||||
|
Difficulty m_difficultyForced; // force use of Steps with this Difficulty
|
||||||
bool m_bPlayerEnabled; // IsEnabled cache for iterators
|
bool m_bPlayerEnabled; // IsEnabled cache for iterators
|
||||||
PlayerState m_PlayerStateDummy;
|
PlayerState m_PlayerStateDummy;
|
||||||
PlayerStageStats m_PlayerStageStatsDummy;
|
PlayerStageStats m_PlayerStageStatsDummy;
|
||||||
@@ -171,7 +172,7 @@ protected:
|
|||||||
void UpdateLyrics( float fDeltaTime );
|
void UpdateLyrics( float fDeltaTime );
|
||||||
void SongFinished();
|
void SongFinished();
|
||||||
virtual void SaveStats();
|
virtual void SaveStats();
|
||||||
void StageFinished( bool bBackedOut );
|
virtual void StageFinished( bool bBackedOut );
|
||||||
void SaveReplay();
|
void SaveReplay();
|
||||||
bool AllAreFailing();
|
bool AllAreFailing();
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ void ScreenGameplayNormal::FillPlayerInfo( vector<PlayerInfo> &vPlayerInfoOut )
|
|||||||
{
|
{
|
||||||
vPlayerInfoOut.resize( NUM_PLAYERS );
|
vPlayerInfoOut.resize( NUM_PLAYERS );
|
||||||
FOREACH_PlayerNumber( p )
|
FOREACH_PlayerNumber( p )
|
||||||
vPlayerInfoOut[p].Load( p, MultiPlayer_Invalid, true );
|
vPlayerInfoOut[p].Load( p, MultiPlayer_Invalid, true, Difficulty_Invalid );
|
||||||
};
|
};
|
||||||
|
|
||||||
// lua end
|
// lua end
|
||||||
|
|||||||
Reference in New Issue
Block a user