cycle individual lights in manual test, not groups

This commit is contained in:
Chris Danford
2005-04-22 20:36:45 +00:00
parent b22fa5c673
commit c4e5af5a94
3 changed files with 135 additions and 50 deletions
+76 -31
View File
@@ -41,12 +41,15 @@ LightsManager* LIGHTSMAN = NULL; // global and accessable from anywhere in our p
LightsManager::LightsManager(CString sDriver) LightsManager::LightsManager(CString sDriver)
{ {
m_LightsMode = LIGHTSMODE_JOINING;
m_pDriver = MakeLightsDriver(sDriver);
m_fCurrentCurrentTestLightIndex = 0;
ZERO( m_fSecsLeftInCabinetLightBlink ); ZERO( m_fSecsLeftInCabinetLightBlink );
ZERO( m_fSecsLeftInGameButtonBlink ); ZERO( m_fSecsLeftInGameButtonBlink );
m_LightsMode = LIGHTSMODE_JOINING;
m_pDriver = MakeLightsDriver(sDriver);
m_fTestAutoCycleCurrentIndex = 0;
m_clTestManualCycleCurrent = LIGHT_INVALID;
m_gcTestManualCycleCurrent = GAME_CONTROLLER_INVALID;
m_gbTestManualCycleCurrent = GAME_BUTTON_INVALID;
} }
LightsManager::~LightsManager() LightsManager::~LightsManager()
@@ -78,8 +81,8 @@ void LightsManager::Update( float fDeltaTime )
if( m_LightsMode == LIGHTSMODE_TEST_AUTO_CYCLE ) if( m_LightsMode == LIGHTSMODE_TEST_AUTO_CYCLE )
{ {
m_fCurrentCurrentTestLightIndex += fDeltaTime; m_fTestAutoCycleCurrentIndex += fDeltaTime;
m_fCurrentCurrentTestLightIndex = fmodf( m_fCurrentCurrentTestLightIndex, NUM_CABINET_LIGHTS*100 ); m_fTestAutoCycleCurrentIndex = fmodf( m_fTestAutoCycleCurrentIndex, NUM_CABINET_LIGHTS*100 );
} }
switch( m_LightsMode ) switch( m_LightsMode )
@@ -160,9 +163,8 @@ void LightsManager::Update( float fDeltaTime )
} }
break; break;
case LIGHTSMODE_TEST_AUTO_CYCLE: case LIGHTSMODE_TEST_AUTO_CYCLE:
case LIGHTSMODE_TEST_MANUAL_CYCLE:
{ {
int iSec = GetCurrentTestLightIndex(); int iSec = GetTestAutoCycleCurrentIndex();
FOREACH_CabinetLight( cl ) FOREACH_CabinetLight( cl )
{ {
bool bOn = (iSec%NUM_CABINET_LIGHTS) == cl; bool bOn = (iSec%NUM_CABINET_LIGHTS) == cl;
@@ -170,6 +172,15 @@ void LightsManager::Update( float fDeltaTime )
} }
} }
break; break;
case LIGHTSMODE_TEST_MANUAL_CYCLE:
{
FOREACH_CabinetLight( cl )
{
bool bOn = cl == m_clTestManualCycleCurrent;
m_LightsState.m_bCabinetLights[cl] = bOn;
}
}
break;
default: default:
ASSERT(0); ASSERT(0);
} }
@@ -253,17 +264,25 @@ void LightsManager::Update( float fDeltaTime )
} }
break; break;
case LIGHTSMODE_TEST_AUTO_CYCLE: case LIGHTSMODE_TEST_AUTO_CYCLE:
{
int index = GetTestAutoCycleCurrentIndex();
int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons();
wrap( index, MAX_GAME_CONTROLLERS*iNumGameButtonsToShow );
ZERO( m_LightsState.m_bGameButtonLights );
GameController gc = (GameController)(index / iNumGameButtonsToShow);
GameButton gb = (GameButton)(index % iNumGameButtonsToShow);
m_LightsState.m_bGameButtonLights[gc][gb] = true;
}
break;
case LIGHTSMODE_TEST_MANUAL_CYCLE: case LIGHTSMODE_TEST_MANUAL_CYCLE:
{ {
int iSec = GetCurrentTestLightIndex();
int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons();
FOREACH_GameController( gc ) FOREACH_GameController( gc )
{ {
FOREACH_GameButton( gb ) FOREACH_GameButton( gb )
{ {
bool bOn = gb==(iSec%iNumGameButtonsToShow); bool bOn = gc==m_gcTestManualCycleCurrent && gb==m_gbTestManualCycleCurrent;
m_LightsState.m_bGameButtonLights[gc][gb] = bOn; m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
} }
} }
@@ -297,32 +316,58 @@ LightsMode LightsManager::GetLightsMode()
return m_LightsMode; return m_LightsMode;
} }
void LightsManager::PrevTestLight() void LightsManager::ChangeTestCabinetLight( int iDir )
{ {
m_fCurrentCurrentTestLightIndex -= 1; m_gcTestManualCycleCurrent = GAME_CONTROLLER_INVALID;
m_fCurrentCurrentTestLightIndex = Quantize( m_fCurrentCurrentTestLightIndex, 1.0f ); m_gbTestManualCycleCurrent = GAME_BUTTON_INVALID;
fmodf( m_fCurrentCurrentTestLightIndex, NUM_CABINET_LIGHTS*100 );
m_clTestManualCycleCurrent = (CabinetLight)(m_clTestManualCycleCurrent+iDir);
wrap( (int&)m_clTestManualCycleCurrent, NUM_CABINET_LIGHTS );
} }
void LightsManager::NextTestLight() void LightsManager::ChangeTestGameButtonLight( int iDir )
{ {
m_fCurrentCurrentTestLightIndex += 1; m_clTestManualCycleCurrent = LIGHT_INVALID;
m_fCurrentCurrentTestLightIndex = Quantize( m_fCurrentCurrentTestLightIndex, 1.0f );
fmodf( m_fCurrentCurrentTestLightIndex, NUM_CABINET_LIGHTS*100 );
}
CabinetLight LightsManager::GetCurrentTestCabinetLight()
{
return (CabinetLight)(GetCurrentTestLightIndex()%NUM_CABINET_LIGHTS);
}
int LightsManager::GetCurrentTestGameplayLight()
{
int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons(); int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons();
return GetCurrentTestLightIndex()%iNumGameButtonsToShow; int index = m_gcTestManualCycleCurrent * iNumGameButtonsToShow + m_gbTestManualCycleCurrent;
index += iDir;
wrap( index, MAX_GAME_CONTROLLERS * iNumGameButtonsToShow );
m_gcTestManualCycleCurrent = (GameController)(index / iNumGameButtonsToShow);
m_gbTestManualCycleCurrent = (GameButton)(index % iNumGameButtonsToShow);
} }
CabinetLight LightsManager::GetFirstLitCabinetLight()
{
FOREACH_CabinetLight( cl )
{
if( m_LightsState.m_bCabinetLights[cl] )
return cl;
}
return LIGHT_INVALID;
}
void LightsManager::GetFirstLitGameButtonLight( GameController &gcOut, GameButton &gbOut )
{
FOREACH_GameController( gc )
{
FOREACH_GameButton( gb )
{
if( m_LightsState.m_bGameButtonLights[gc][gb] )
{
gcOut = gc;
gbOut = gb;
return;
}
}
}
gcOut = GAME_CONTROLLER_INVALID;
gbOut = GAME_BUTTON_INVALID;
}
/* /*
* (c) 2003-2004 Chris Danford * (c) 2003-2004 Chris Danford
* All rights reserved. * All rights reserved.
+17 -7
View File
@@ -19,7 +19,8 @@ enum CabinetLight
LIGHT_BUTTONS_RIGHT, LIGHT_BUTTONS_RIGHT,
LIGHT_BASS_LEFT, LIGHT_BASS_LEFT,
LIGHT_BASS_RIGHT, LIGHT_BASS_RIGHT,
NUM_CABINET_LIGHTS NUM_CABINET_LIGHTS,
LIGHT_INVALID
}; };
#define FOREACH_CabinetLight( i ) FOREACH_ENUM( CabinetLight, NUM_CABINET_LIGHTS, i ) #define FOREACH_CabinetLight( i ) FOREACH_ENUM( CabinetLight, NUM_CABINET_LIGHTS, i )
const CString& CabinetLightToString( CabinetLight cl ); const CString& CabinetLightToString( CabinetLight cl );
@@ -62,13 +63,18 @@ public:
void SetLightsMode( LightsMode lm ); void SetLightsMode( LightsMode lm );
LightsMode GetLightsMode(); LightsMode GetLightsMode();
void PrevTestLight(); void PrevTestCabinetLight() { ChangeTestCabinetLight(-1); }
void NextTestLight(); void NextTestCabinetLight() { ChangeTestCabinetLight(+1); }
void PrevTestGameButtonLight() { ChangeTestGameButtonLight(-1); }
void NextTestGameButtonLight() { ChangeTestGameButtonLight(+1); }
CabinetLight GetCurrentTestCabinetLight(); CabinetLight GetFirstLitCabinetLight();
int GetCurrentTestGameplayLight(); void GetFirstLitGameButtonLight( GameController &gcOut, GameButton &gbOut );
private: private:
void ChangeTestCabinetLight( int iDir );
void ChangeTestGameButtonLight( int iDir );
float m_fSecsLeftInCabinetLightBlink[NUM_CABINET_LIGHTS]; float m_fSecsLeftInCabinetLightBlink[NUM_CABINET_LIGHTS];
float m_fSecsLeftInGameButtonBlink[MAX_GAME_CONTROLLERS][MAX_GAME_BUTTONS]; float m_fSecsLeftInGameButtonBlink[MAX_GAME_CONTROLLERS][MAX_GAME_BUTTONS];
@@ -76,8 +82,12 @@ private:
LightsMode m_LightsMode; LightsMode m_LightsMode;
LightsState m_LightsState; LightsState m_LightsState;
int GetCurrentTestLightIndex() { return (int)m_fCurrentCurrentTestLightIndex; } int GetTestAutoCycleCurrentIndex() { return (int)m_fTestAutoCycleCurrentIndex; }
float m_fCurrentCurrentTestLightIndex;
float m_fTestAutoCycleCurrentIndex;
CabinetLight m_clTestManualCycleCurrent;
GameController m_gcTestManualCycleCurrent;
GameButton m_gbTestManualCycleCurrent;
}; };
+41 -11
View File
@@ -25,8 +25,8 @@ void ScreenTestLights::Init()
m_textInputs.LoadFromFont( THEME->GetPathF("Common","normal") ); m_textInputs.LoadFromFont( THEME->GetPathF("Common","normal") );
m_textInputs.SetText( "" ); m_textInputs.SetText( "" );
m_textInputs.SetXY( SCREEN_CENTER_X, SCREEN_CENTER_Y ); m_textInputs.SetXY( SCREEN_CENTER_X - 200, SCREEN_CENTER_Y );
m_textInputs.SetDiffuse( RageColor(1,1,1,1) ); m_textInputs.SetHorizAlign( Actor::align_left );
m_textInputs.SetZoom( 0.8f ); m_textInputs.SetZoom( 0.8f );
this->AddChild( &m_textInputs ); this->AddChild( &m_textInputs );
@@ -53,15 +53,39 @@ void ScreenTestLights::Update( float fDeltaTime )
} }
CabinetLight cl = LIGHTSMAN->GetCurrentTestCabinetLight(); CabinetLight cl = LIGHTSMAN->GetFirstLitCabinetLight();
GameButton gb = (GameButton)(LIGHTSMAN->GetCurrentTestGameplayLight()); GameController gc;
CString sCabLight = CabinetLightToString(cl); GameButton gb;
CString sGameButton = GAMESTATE->GetCurrentGame()->m_szButtonNames[gb]; LIGHTSMAN->GetFirstLitGameButtonLight( gc, gb );
CString s; CString s;
s += ssprintf("cabinet light %d: %s\n", cl, sCabLight.c_str());
FOREACH_GameController( gc ) switch( LIGHTSMAN->GetLightsMode() )
s += ssprintf("controller %d light %d: %s\n", gc+1, gb, sGameButton.c_str()); {
case LIGHTSMODE_TEST_AUTO_CYCLE:
s += "Auto Cycle\n";
break;
case LIGHTSMODE_TEST_MANUAL_CYCLE:
s += "Manual Cycle\n";
break;
default:
ASSERT(0);
}
if( cl == LIGHT_INVALID )
s += "cabinet light: -----\n";
else
s += ssprintf( "cabinet light: %d %s\n", cl, CabinetLightToString(cl).c_str() );
if( gc == GAME_CONTROLLER_INVALID )
{
s += ssprintf( "controller light: -----\n" );
}
else
{
CString sGameButton = GAMESTATE->GetCurrentGame()->m_szButtonNames[gb];
s += ssprintf( "controller light: P%d %d %s\n", gc+1, gb, sGameButton.c_str() );
}
m_textInputs.SetText( s ); m_textInputs.SetText( s );
} }
@@ -95,14 +119,20 @@ void ScreenTestLights::HandleScreenMessage( const ScreenMessage SM )
void ScreenTestLights::MenuLeft( PlayerNumber pn ) void ScreenTestLights::MenuLeft( PlayerNumber pn )
{ {
LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE );
LIGHTSMAN->PrevTestLight(); if( pn == PLAYER_1 )
LIGHTSMAN->PrevTestCabinetLight();
else
LIGHTSMAN->PrevTestGameButtonLight();
m_timerBackToAutoCycle.Touch(); m_timerBackToAutoCycle.Touch();
} }
void ScreenTestLights::MenuRight( PlayerNumber pn ) void ScreenTestLights::MenuRight( PlayerNumber pn )
{ {
LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE );
LIGHTSMAN->NextTestLight(); if( pn == PLAYER_1 )
LIGHTSMAN->NextTestCabinetLight();
else
LIGHTSMAN->NextTestGameButtonLight();
m_timerBackToAutoCycle.Touch(); m_timerBackToAutoCycle.Touch();
} }