Move some player-specific data out of the bloated GameState class.

Have gameplay objects hold a PlayerState pointer instead of a PlayerNumber and indexing back into GameState.
This will simplify off-screen players (e.g. CPU ghosts, network replicated human players, >2 players using one NoteField)
This commit is contained in:
Chris Danford
2004-12-20 06:25:59 +00:00
parent 52545966e6
commit f840c014a9
70 changed files with 977 additions and 655 deletions
+14 -10
View File
@@ -7,6 +7,7 @@
#include "GameState.h"
#include "PrefsManager.h"
#include "NoteFieldPositioning.h"
#include "PlayerState.h"
ReceptorArrowRow::ReceptorArrowRow()
@@ -14,9 +15,9 @@ ReceptorArrowRow::ReceptorArrowRow()
m_iNumCols = 0;
}
void ReceptorArrowRow::Load( PlayerNumber pn, CString NoteSkin, float fYReverseOffset )
void ReceptorArrowRow::Load( const PlayerState* pPlayerState, CString NoteSkin, float fYReverseOffset )
{
m_PlayerNumber = pn;
m_pPlayerState = pPlayerState;
m_fYReverseOffsetPixels = fYReverseOffset;
const Style* pStyle = GAMESTATE->GetCurrentStyle();
@@ -26,7 +27,7 @@ void ReceptorArrowRow::Load( PlayerNumber pn, CString NoteSkin, float fYReverseO
for( int c=0; c<m_iNumCols; c++ )
{
m_ReceptorArrow[c].SetName( "ReceptorArrow" );
m_ReceptorArrow[c].Load( NoteSkin, m_PlayerNumber, c );
m_ReceptorArrow[c].Load( NoteSkin, m_pPlayerState, c );
}
}
@@ -35,28 +36,31 @@ void ReceptorArrowRow::Update( float fDeltaTime )
for( int c=0; c<m_iNumCols; c++ )
{
m_ReceptorArrow[c].Update( fDeltaTime );
m_ReceptorArrow[c].SetDiffuse( RageColor(1,1,1,1 - GAMESTATE->m_CurrentPlayerOptions[m_PlayerNumber].m_fDark) );
m_ReceptorArrow[c].SetDiffuse( RageColor(1,1,1,1 - m_pPlayerState->m_CurrentPlayerOptions.m_fDark) );
// set arrow XYZ
const float fX = ArrowGetXPos( m_PlayerNumber, c, 0 );
const float fY = ArrowGetYPos( m_PlayerNumber, c, 0, m_fYReverseOffsetPixels );
const float fZ = ArrowGetZPos( m_PlayerNumber, c, 0 );
const float fX = ArrowEffects::GetXPos( m_pPlayerState, c, 0 );
const float fY = ArrowEffects::GetYPos( m_pPlayerState, c, 0, m_fYReverseOffsetPixels );
const float fZ = ArrowEffects::GetZPos( m_pPlayerState, c, 0 );
m_ReceptorArrow[c].SetX( fX );
m_ReceptorArrow[c].SetY( fY );
m_ReceptorArrow[c].SetZ( fZ );
const float fZoom = ArrowGetZoom( m_PlayerNumber );
const float fZoom = ArrowEffects::GetZoom( m_pPlayerState );
m_ReceptorArrow[c].SetZoom( fZoom );
}
}
void ReceptorArrowRow::DrawPrimitives()
{
// TODO: Remove use of PlayerNumber.
PlayerNumber pn = m_pPlayerState->m_PlayerNumber;
for( int c=0; c<m_iNumCols; c++ )
{
g_NoteFieldMode[m_PlayerNumber].BeginDrawTrack(c);
g_NoteFieldMode[pn].BeginDrawTrack(c);
m_ReceptorArrow[c].Draw();
g_NoteFieldMode[m_PlayerNumber].EndDrawTrack(c);
g_NoteFieldMode[pn].EndDrawTrack(c);
}
}