add StepsType for cabinet lights

This commit is contained in:
Chris Danford
2004-04-20 02:35:30 +00:00
parent 3bbefc42d4
commit fc8d3ed363
10 changed files with 217 additions and 64 deletions
+22 -22
View File
@@ -1053,20 +1053,18 @@ void ScreenGameplay::LoadNextSong()
//
// Load lights data
//
m_MarqueeLightsNoteData.Init();
m_BassLightsNoteData.Init();
StepsType st = GAMESTATE->GetCurrentStyleDef()->m_StepsType;
ASSERT( GAMESTATE->m_pCurSong );
Steps* pStepsEasy = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, DIFFICULTY_EASY, false );
Steps* pStepsMedium = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, DIFFICULTY_MEDIUM, false );
if( pStepsEasy ) pStepsEasy->GetNoteData( &m_BassLightsNoteData );
if( pStepsMedium ) pStepsMedium->GetNoteData( &m_MarqueeLightsNoteData );
// optimization: collapse to one and free unused tracks
NoteDataUtil::CollapseToOne(m_BassLightsNoteData);
m_BassLightsNoteData.SetNumTracks(1);
NoteDataUtil::CollapseToOne(m_MarqueeLightsNoteData);
m_MarqueeLightsNoteData.SetNumTracks(1);
{
m_CabinetLightsNoteData.Init();
ASSERT( GAMESTATE->m_pCurSong );
vector<Steps*> vSteps;
GAMESTATE->m_pCurSong->GetSteps( vSteps, STEPS_TYPE_LIGHTS_CABINET );
if( !vSteps.empty() )
vSteps[0]->GetNoteData( &m_CabinetLightsNoteData );
// Convert to 4s so that we can check if we're inside a hold with just
// GetTapNote().
m_CabinetLightsNoteData.ConvertHoldNotesTo4s();
}
}
float ScreenGameplay::StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic)
@@ -1402,11 +1400,12 @@ void ScreenGameplay::Update( float fDeltaTime )
//
// update lights
//
bool bBlinkMarqueeLights = false;
bool bBlink[NUM_CABINET_LIGHTS];
ZERO( bBlink );
bool bBlinkBassLights = false;
bool bCrossedABeat = false;
{
float fPositionSeconds = GAMESTATE->m_fMusicSeconds - 0.05f; // trigger the light a tiny bit early
float fPositionSeconds = GAMESTATE->m_fMusicSeconds - LIGHTS_FALLOFF_SECONDS/2; // trigger the light a tiny bit early
fPositionSeconds += (SOUND->GetPlayLatency()) * GAMESTATE->m_SongOptions.m_fMusicRate;
float fSongBeat = GAMESTATE->m_pCurSong->GetBeatFromElapsedTime( fPositionSeconds );
@@ -1421,8 +1420,8 @@ void ScreenGameplay::Update( float fDeltaTime )
for( int r=iRowLastCrossed+1; r<=iRowNow; r++ ) // for each index we crossed since the last update
{
bBlinkMarqueeLights |= m_MarqueeLightsNoteData.IsThereATapOrHoldHeadAtRow( r );
bBlinkBassLights |= m_BassLightsNoteData.IsThereATapOrHoldHeadAtRow( r );
FOREACH_CabinetLight( cl )
bBlink[cl] |= (m_CabinetLightsNoteData.GetTapNote( cl, r ) != TAP_EMPTY);
}
iRowLastCrossed = iRowNow;
@@ -1430,10 +1429,11 @@ void ScreenGameplay::Update( float fDeltaTime )
bool bOverrideBlink = (GAMESTATE->m_fSongBeat < GAMESTATE->m_pCurSong->m_fFirstBeat) && bCrossedABeat;
if( bOverrideBlink || bBlinkMarqueeLights )
LIGHTSMAN->GameplayBlinkMarqueeLights();
if( bOverrideBlink || bBlinkBassLights )
LIGHTSMAN->GameplayBlinkBassLights();
FOREACH_CabinetLight( cl )
{
if( bOverrideBlink || bBlink[cl] )
LIGHTSMAN->GameplayBlinkLight( cl );
}
//
// update song position meter