Files
itgmania212121/stepmania/src/LightsManager.cpp
T
Glenn Maynard 7c2519da31 quiet warnings
2003-12-01 01:11:58 +00:00

220 lines
4.5 KiB
C++

#include "global.h"
/*
-----------------------------------------------------------------------------
Class: LightsManager
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "LightsManager.h"
#include "GameState.h"
#include "RageTimer.h"
#include "arch/Lights/LightsDriver.h"
#include "arch/arch.h"
#include "RageUtil.h"
#include "GameInput.h" // for GameController
#include "InputMapper.h"
LightsManager* LIGHTSMAN = NULL; // global and accessable from anywhere in our program
LightsManager::LightsManager(CString sDriver)
{
m_LightMode = LIGHTMODE_JOINING;
m_pDriver = MakeLightsDriver(sDriver);
}
LightsManager::~LightsManager()
{
SAFE_DELETE( m_pDriver );
}
void LightsManager::Update( float fDeltaTime )
{
//
// Update cabinet lights
//
switch( m_LightMode )
{
case LIGHTMODE_JOINING:
{
switch( GAMESTATE->GetNumSidesJoined() )
{
case 0:
{
int iSec = (int)(RageTimer::GetTimeSinceStart()*2);
// float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
bool bOn = (iSec%2)==0;
for( int i=0; i<8; i++ )
m_pDriver->SetLight( (Light)i, bOn );
}
break;
default:
for( int i=0; i<8; i++ )
{
bool bOn = GAMESTATE->m_bSideIsJoined[i%2];
m_pDriver->SetLight( (Light)i, bOn );
}
}
}
break;
case LIGHTMODE_ATTRACT:
{
int iSec = (int)RageTimer::GetTimeSinceStart();
int i;
for( i=0; i<4; i++ )
{
bool bOn = (iSec%4)==i;
m_pDriver->SetLight( (Light)i, bOn );
}
for( i=4; i<6; i++ )
{
bool bOn = false;
m_pDriver->SetLight( (Light)i, bOn );
}
for( i=6; i<8; i++ )
{
bool bOn = (iSec%3)==0;
m_pDriver->SetLight( (Light)i, bOn );
}
}
break;
case LIGHTMODE_MENU:
{
int iSec = (int)RageTimer::GetTimeSinceStart();
int i;
for( i=0; i<2; i++ )
{
bool bOn = (iSec%2)==0;
m_pDriver->SetLight( (Light)i, bOn );
}
for( i=2; i<4; i++ )
{
bool bOn = (iSec%2)==1;
m_pDriver->SetLight( (Light)i, bOn );
}
for( i=4; i<6; i++ )
{
bool bOn = (iSec%2)==0;
m_pDriver->SetLight( (Light)i, bOn );
}
for( i=6; i<8; i++ )
{
bool bOn = (iSec%2)==1;
m_pDriver->SetLight( (Light)i, bOn );
}
}
break;
case LIGHTMODE_DEMONSTRATION:
case LIGHTMODE_GAMEPLAY:
{
int i;
// top lights are controlled my ScreenGameplay
//for( int i=0; i<4; i++ )
// m_pDriver->SetLight( (Light)i, bOn );
// menu lights are always off
for( i=4; i<6; i++ )
m_pDriver->SetLight( (Light)i, false );
// bass lights
float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
bool bOn = fBeatPercentage < 0.1 || fBeatPercentage > 0.9;
for( i=7; i<8; i++ )
m_pDriver->SetLight( (Light)i, bOn );
}
break;
case LIGHTMODE_STAGE:
{
for( int i=0; i<8; i++ )
m_pDriver->SetLight( (Light)i, true );
}
break;
case LIGHTMODE_ALL_CLEARED:
{
for( int i=0; i<8; i++ )
m_pDriver->SetLight( (Light)i, false );
}
break;
default:
ASSERT(0);
}
//
// Update game controller lights
//
// FIXME: Works only with Game==dance
// FIXME: lights pads for players who aren't playing
switch( m_LightMode )
{
case LIGHTMODE_ATTRACT:
case LIGHTMODE_MENU:
case LIGHTMODE_DEMONSTRATION:
{
for( int i=LIGHT_GAME_BUTTON1; i<=LIGHT_LAST_GAME_BUTTON; i++ )
m_pDriver->SetLight( (Light)i, false );
}
break;
case LIGHTMODE_ALL_CLEARED:
case LIGHTMODE_STAGE:
case LIGHTMODE_JOINING:
{
for( int c=0; c<2; c++ )
{
// GameController gc = (GameController)c;
bool bOn = GAMESTATE->m_bSideIsJoined[c];
for( int i=0; i<4; i++ )
{
// GameButton gb = (GameButton)i;
Light light = (Light)(LIGHT_GAME_BUTTON1 + c*4+i);
m_pDriver->SetLight( light, bOn );
}
}
}
break;
case LIGHTMODE_GAMEPLAY:
{
for( int c=0; c<2; c++ )
{
GameController gc = (GameController)c;
for( int i=0; i<4; i++ )
{
GameButton gb = (GameButton)i;
Light light = (Light)(LIGHT_GAME_BUTTON1 + c*4+i);
bool bOn = INPUTMAPPER->IsButtonDown( GameInput(gc,gb) );
m_pDriver->SetLight( light, bOn );
}
}
}
break;
default:
ASSERT(0);
}
// apply new light values we set above
m_pDriver->Flush();
}
void LightsManager::SetLightMode( LightMode lm )
{
m_LightMode = lm;
}
void LightsManager::SetAllUpperLights( bool bOn )
{
for( int i=0; i<4; i++ )
{
m_pDriver->SetLight( (Light)i, bOn );
}
}