Files
itgmania212121/stepmania/src/LightsManager.cpp
T

222 lines
4.6 KiB
C++
Raw Normal View History

2003-11-16 04:45:12 +00:00
#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"
2003-11-16 06:27:52 +00:00
#include "GameInput.h" // for GameController
#include "InputMapper.h"
2003-11-16 04:45:12 +00:00
LightsManager* LIGHTSMAN = NULL; // global and accessable from anywhere in our program
LightsManager::LightsManager(CString sDriver)
{
2004-03-23 06:11:10 +00:00
m_LightsMode = LIGHTSMODE_JOINING;
2003-11-16 04:45:12 +00:00
m_pDriver = MakeLightsDriver(sDriver);
}
LightsManager::~LightsManager()
{
SAFE_DELETE( m_pDriver );
}
void LightsManager::Update( float fDeltaTime )
{
2003-11-16 06:27:52 +00:00
//
// Update cabinet lights
//
2004-03-23 06:11:10 +00:00
switch( m_LightsMode )
2003-11-16 04:45:12 +00:00
{
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_JOINING:
2003-11-16 04:45:12 +00:00
{
switch( GAMESTATE->GetNumSidesJoined() )
{
case 0:
{
int iSec = (int)(RageTimer::GetTimeSinceStart()*2);
2003-12-01 01:11:58 +00:00
// float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
2003-11-16 04:45:12 +00:00
bool bOn = (iSec%2)==0;
for( int i=0; i<8; i++ )
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
break;
default:
for( int i=0; i<8; i++ )
{
bool bOn = GAMESTATE->m_bSideIsJoined[i%2];
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
}
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_ATTRACT:
2003-11-16 04:45:12 +00:00
{
int iSec = (int)RageTimer::GetTimeSinceStart();
int i;
for( i=0; i<4; i++ )
{
bool bOn = (iSec%4)==i;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
for( i=4; i<6; i++ )
{
bool bOn = false;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
for( i=6; i<8; i++ )
{
bool bOn = (iSec%3)==0;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_MENU:
2003-11-16 04:45:12 +00:00
{
int iSec = (int)RageTimer::GetTimeSinceStart();
int i;
for( i=0; i<2; i++ )
{
bool bOn = (iSec%2)==0;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
for( i=2; i<4; i++ )
{
bool bOn = (iSec%2)==1;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
for( i=4; i<6; i++ )
{
bool bOn = (iSec%2)==0;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
for( i=6; i<8; i++ )
{
bool bOn = (iSec%2)==1;
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_DEMONSTRATION:
case LIGHTSMODE_GAMEPLAY_READY:
case LIGHTSMODE_GAMEPLAY_GO:
2003-11-16 04:45:12 +00:00
{
2003-11-20 11:55:45 +00:00
int i;
2004-03-23 06:11:10 +00:00
bool bMarqueeLightsOn = m_LightsMode == LIGHTSMODE_GAMEPLAY_READY;
for( i=0; i<4; i++ )
m_LightsState.m_bCabinetLights[i] = bMarqueeLightsOn;
2003-11-20 11:55:45 +00:00
// menu lights are always off
for( i=4; i<6; i++ )
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = false;
2003-11-20 11:55:45 +00:00
// bass lights
2003-11-16 04:45:12 +00:00
float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
bool bOn = fBeatPercentage < 0.1 || fBeatPercentage > 0.9;
2003-11-20 11:55:45 +00:00
for( i=7; i<8; i++ )
2004-03-23 06:11:10 +00:00
m_LightsState.m_bCabinetLights[i] = bOn;
2003-11-16 04:45:12 +00:00
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_STAGE:
case LIGHTSMODE_ALL_CLEARED:
2003-11-16 04:45:12 +00:00
{
2004-03-23 06:11:10 +00:00
FOREACH_CabinetLight( cl )
m_LightsState.m_bCabinetLights[cl] = true;
2003-11-16 04:45:12 +00:00
}
break;
2004-03-23 06:33:01 +00:00
case LIGHTSMODE_TEST:
{
int iSec = (int)RageTimer::GetTimeSinceStart();
FOREACH_CabinetLight( cl )
{
bool bOn = (iSec%NUM_CABINET_LIGHTS) == cl;
m_LightsState.m_bCabinetLights[cl] = bOn;
}
}
break;
2003-11-16 04:45:12 +00:00
default:
ASSERT(0);
}
2003-11-16 06:27:52 +00:00
//
// Update game controller lights
//
// FIXME: Works only with Game==dance
// FIXME: lights pads for players who aren't playing
2004-03-23 06:11:10 +00:00
switch( m_LightsMode )
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_ATTRACT:
case LIGHTSMODE_MENU:
case LIGHTSMODE_DEMONSTRATION:
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
ZERO( m_LightsState.m_bGameButtonLights );
2003-11-16 06:27:52 +00:00
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_ALL_CLEARED:
case LIGHTSMODE_STAGE:
case LIGHTSMODE_JOINING:
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
FOREACH_GameController( gc )
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
bool bOn = GAMESTATE->m_bSideIsJoined[gc];
2003-11-16 06:27:52 +00:00
2004-03-23 06:11:10 +00:00
FOREACH_GameButton( gb )
m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
2003-11-16 06:27:52 +00:00
}
}
break;
2004-03-23 06:11:10 +00:00
case LIGHTSMODE_GAMEPLAY_READY:
case LIGHTSMODE_GAMEPLAY_GO:
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
FOREACH_GameController( gc )
2003-11-16 06:27:52 +00:00
{
2004-03-23 06:11:10 +00:00
FOREACH_GameButton( gb )
2003-11-16 06:27:52 +00:00
{
bool bOn = INPUTMAPPER->IsButtonDown( GameInput(gc,gb) );
2004-03-23 06:11:10 +00:00
m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
2003-11-16 06:27:52 +00:00
}
}
}
break;
2004-03-23 06:33:01 +00:00
case LIGHTSMODE_TEST:
{
int iSec = (int)RageTimer::GetTimeSinceStart();
FOREACH_GameController( gc )
{
FOREACH_GameButton( gb )
{
bool bOn = (iSec%MAX_GAME_BUTTONS)==gb;
m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
}
}
}
break;
2003-11-16 06:27:52 +00:00
default:
ASSERT(0);
}
2003-11-16 07:43:39 +00:00
// apply new light values we set above
2004-03-23 06:11:10 +00:00
m_pDriver->Set( &m_LightsState );
2003-11-16 04:45:12 +00:00
}
2004-03-23 06:11:10 +00:00
void LightsManager::SetLightsMode( LightsMode lm )
2003-11-16 04:45:12 +00:00
{
2004-03-23 06:11:10 +00:00
m_LightsMode = lm;
2003-11-20 11:55:45 +00:00
}