From 0fdd7ab7dde953c835d93ee3fd139caf69aea94e Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Thu, 21 Apr 2005 19:54:11 +0000 Subject: [PATCH] add manual cycling in STestLights --- stepmania/src/LightsManager.cpp | 47 ++++++++++++++++++++++++++---- stepmania/src/LightsManager.h | 12 +++++++- stepmania/src/ScreenTestLights.cpp | 30 +++++++++++++++---- stepmania/src/ScreenTestLights.h | 4 +++ 4 files changed, 81 insertions(+), 12 deletions(-) diff --git a/stepmania/src/LightsManager.cpp b/stepmania/src/LightsManager.cpp index 58be02a972..b057ad3322 100644 --- a/stepmania/src/LightsManager.cpp +++ b/stepmania/src/LightsManager.cpp @@ -31,7 +31,8 @@ static const CString LightsModeNames[NUM_LIGHTS_MODES] = { "Gameplay", "Stage", "Cleared", - "Test", + "TestAutoCycle", + "TestManualCycle", }; XToString( LightsMode, NUM_LIGHTS_MODES ); @@ -41,8 +42,8 @@ LightsManager* LIGHTSMAN = NULL; // global and accessable from anywhere in our p LightsManager::LightsManager(CString sDriver) { m_LightsMode = LIGHTSMODE_JOINING; - m_pDriver = MakeLightsDriver(sDriver); + m_fCurrentCurrentTestLightIndex = 0; ZERO( m_fSecsLeftInCabinetLightBlink ); ZERO( m_fSecsLeftInGameButtonBlink ); @@ -75,6 +76,12 @@ void LightsManager::Update( float fDeltaTime ) ZERO( m_LightsState.m_bGameButtonLights ); } + if( m_LightsMode == LIGHTSMODE_TEST_AUTO_CYCLE ) + { + m_fCurrentCurrentTestLightIndex += fDeltaTime; + m_fCurrentCurrentTestLightIndex = fmodf( m_fCurrentCurrentTestLightIndex, NUM_CABINET_LIGHTS*100 ); + } + switch( m_LightsMode ) { case LIGHTSMODE_JOINING: @@ -152,9 +159,10 @@ void LightsManager::Update( float fDeltaTime ) m_LightsState.m_bCabinetLights[cl] = true; } break; - case LIGHTSMODE_TEST: + case LIGHTSMODE_TEST_AUTO_CYCLE: + case LIGHTSMODE_TEST_MANUAL_CYCLE: { - int iSec = (int)RageTimer::GetTimeSinceStartFast(); + int iSec = GetCurrentTestLightIndex(); FOREACH_CabinetLight( cl ) { bool bOn = (iSec%NUM_CABINET_LIGHTS) == cl; @@ -244,9 +252,10 @@ void LightsManager::Update( float fDeltaTime ) } } break; - case LIGHTSMODE_TEST: + case LIGHTSMODE_TEST_AUTO_CYCLE: + case LIGHTSMODE_TEST_MANUAL_CYCLE: { - int iSec = (int)RageTimer::GetTimeSinceStartFast(); + int iSec = GetCurrentTestLightIndex(); int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons(); @@ -288,6 +297,32 @@ LightsMode LightsManager::GetLightsMode() return m_LightsMode; } +void LightsManager::PrevTestLight() +{ + m_fCurrentCurrentTestLightIndex -= 1; + m_fCurrentCurrentTestLightIndex = Quantize( m_fCurrentCurrentTestLightIndex, 1.0f ); + fmodf( m_fCurrentCurrentTestLightIndex, NUM_CABINET_LIGHTS*100 ); +} + +void LightsManager::NextTestLight() +{ + m_fCurrentCurrentTestLightIndex += 1; + 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(); + return GetCurrentTestLightIndex()%iNumGameButtonsToShow; +} + /* * (c) 2003-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/LightsManager.h b/stepmania/src/LightsManager.h index 6547f80101..9cc0b64b70 100644 --- a/stepmania/src/LightsManager.h +++ b/stepmania/src/LightsManager.h @@ -33,7 +33,8 @@ enum LightsMode LIGHTSMODE_GAMEPLAY, LIGHTSMODE_STAGE, LIGHTSMODE_ALL_CLEARED, - LIGHTSMODE_TEST, + LIGHTSMODE_TEST_AUTO_CYCLE, + LIGHTSMODE_TEST_MANUAL_CYCLE, NUM_LIGHTS_MODES }; const CString& LightsModeToString( LightsMode lm ); @@ -61,6 +62,12 @@ public: void SetLightsMode( LightsMode lm ); LightsMode GetLightsMode(); + void PrevTestLight(); + void NextTestLight(); + + CabinetLight GetCurrentTestCabinetLight(); + int GetCurrentTestGameplayLight(); + private: float m_fSecsLeftInCabinetLightBlink[NUM_CABINET_LIGHTS]; float m_fSecsLeftInGameButtonBlink[MAX_GAME_CONTROLLERS][MAX_GAME_BUTTONS]; @@ -68,6 +75,9 @@ private: LightsDriver* m_pDriver; LightsMode m_LightsMode; LightsState m_LightsState; + + int GetCurrentTestLightIndex() { return (int)m_fCurrentCurrentTestLightIndex; } + float m_fCurrentCurrentTestLightIndex; }; diff --git a/stepmania/src/ScreenTestLights.cpp b/stepmania/src/ScreenTestLights.cpp index f9d52d927b..dee6666adb 100644 --- a/stepmania/src/ScreenTestLights.cpp +++ b/stepmania/src/ScreenTestLights.cpp @@ -16,7 +16,7 @@ ScreenTestLights::ScreenTestLights( CString sClassName ) : ScreenWithMenuElement { LOG->Trace( "ScreenTestLights::ScreenTestLights()" ); - LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST ); + LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_AUTO_CYCLE ); } void ScreenTestLights::Init() @@ -45,11 +45,16 @@ void ScreenTestLights::Update( float fDeltaTime ) { Screen::Update( fDeltaTime ); - int iSec = (int)RageTimer::GetTimeSinceStartFast(); - CabinetLight cl = (CabinetLight)(iSec%NUM_CABINET_LIGHTS); - int iNumGameButtonsToShow = GAMESTATE->GetCurrentGame()->GetNumGameplayButtons(); - GameButton gb = (GameButton)(iSec%iNumGameButtonsToShow); + if( m_timerBackToAutoCycle.Ago() > 20 ) + { + m_timerBackToAutoCycle.Touch(); + LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_AUTO_CYCLE ); + } + + + CabinetLight cl = LIGHTSMAN->GetCurrentTestCabinetLight(); + GameButton gb = (GameButton)(LIGHTSMAN->GetCurrentTestGameplayLight()); CString sCabLight = CabinetLightToString(cl); CString sGameButton = GAMESTATE->GetCurrentGame()->m_szButtonNames[gb]; @@ -82,10 +87,25 @@ void ScreenTestLights::HandleScreenMessage( const ScreenMessage SM ) case SM_GoToNextScreen: case SM_GoToPrevScreen: SCREENMAN->SetNewScreen( "ScreenOptionsMenu" ); + LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU ); break; } } +void ScreenTestLights::MenuLeft( PlayerNumber pn ) +{ + LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); + LIGHTSMAN->PrevTestLight(); + m_timerBackToAutoCycle.Touch(); +} + +void ScreenTestLights::MenuRight( PlayerNumber pn ) +{ + LIGHTSMAN->SetLightsMode( LIGHTSMODE_TEST_MANUAL_CYCLE ); + LIGHTSMAN->NextTestLight(); + m_timerBackToAutoCycle.Touch(); +} + void ScreenTestLights::MenuStart( PlayerNumber pn ) { MenuBack(pn); diff --git a/stepmania/src/ScreenTestLights.h b/stepmania/src/ScreenTestLights.h index 32c71293d0..8022d5267a 100644 --- a/stepmania/src/ScreenTestLights.h +++ b/stepmania/src/ScreenTestLights.h @@ -17,11 +17,15 @@ public: virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void HandleScreenMessage( const ScreenMessage SM ); + virtual void MenuLeft( PlayerNumber pn ); + virtual void MenuRight( PlayerNumber pn ); virtual void MenuStart( PlayerNumber pn ); virtual void MenuBack( PlayerNumber pn ); private: BitmapText m_textInputs; + + RageTimer m_timerBackToAutoCycle; }; #endif