clean up lights
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
#define FOREACH_ENUM( e, max, var ) for( e var=(e)0; var<max; ((int&)var)++ )
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "PlayerNumber.h" // TODO: Get rid of this dependency. -Chris
|
#include "PlayerNumber.h" // TODO: Get rid of this dependency. -Chris
|
||||||
|
#include "ForeachEnum.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Screen Dimensions
|
// Screen Dimensions
|
||||||
@@ -35,9 +36,6 @@
|
|||||||
#define ARROW_SIZE (64)
|
#define ARROW_SIZE (64)
|
||||||
|
|
||||||
|
|
||||||
#define FOREACH_ENUM( e, max, var ) for( e var=(e)0; var<max; ((int&)var)++ )
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Note definitions
|
// Note definitions
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -10,6 +10,9 @@
|
|||||||
Chris Danford
|
Chris Danford
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "ForeachEnum.h"
|
||||||
|
|
||||||
enum GameController
|
enum GameController
|
||||||
{
|
{
|
||||||
GAME_CONTROLLER_1 = 0, // left controller
|
GAME_CONTROLLER_1 = 0, // left controller
|
||||||
@@ -17,8 +20,12 @@ enum GameController
|
|||||||
MAX_GAME_CONTROLLERS, // leave this at the end
|
MAX_GAME_CONTROLLERS, // leave this at the end
|
||||||
GAME_CONTROLLER_INVALID,
|
GAME_CONTROLLER_INVALID,
|
||||||
};
|
};
|
||||||
|
#define FOREACH_GameController( gc ) FOREACH_ENUM( GameController, MAX_GAME_CONTROLLERS, gc )
|
||||||
|
|
||||||
typedef int GameButton;
|
typedef int GameButton;
|
||||||
|
const GameButton MAX_GAME_BUTTONS = 20;
|
||||||
|
const GameButton GAME_BUTTON_INVALID = MAX_GAME_BUTTONS+1;
|
||||||
|
#define FOREACH_GameButton( gb ) FOREACH_ENUM( GameButton, MAX_GAME_BUTTONS, gb )
|
||||||
|
|
||||||
enum // DanceButtons
|
enum // DanceButtons
|
||||||
{
|
{
|
||||||
@@ -223,9 +230,6 @@ enum // PnM Buttons
|
|||||||
NUM_PNM_BUTTONS, // leave this at the end
|
NUM_PNM_BUTTONS, // leave this at the end
|
||||||
};
|
};
|
||||||
|
|
||||||
const GameButton MAX_GAME_BUTTONS = 20;
|
|
||||||
const GameButton GAME_BUTTON_INVALID = MAX_GAME_BUTTONS+1;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct GameInput
|
struct GameInput
|
||||||
|
|||||||
@@ -165,7 +165,7 @@ void GameState::Reset()
|
|||||||
|
|
||||||
MEMCARDMAN->LockCards( false );
|
MEMCARDMAN->LockCards( false );
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_ATTRACT );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_ATTRACT );
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameState::BeginGame()
|
void GameState::BeginGame()
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ LightsManager* LIGHTSMAN = NULL; // global and accessable from anywhere in our p
|
|||||||
|
|
||||||
LightsManager::LightsManager(CString sDriver)
|
LightsManager::LightsManager(CString sDriver)
|
||||||
{
|
{
|
||||||
m_LightMode = LIGHTMODE_JOINING;
|
m_LightsMode = LIGHTSMODE_JOINING;
|
||||||
|
|
||||||
m_pDriver = MakeLightsDriver(sDriver);
|
m_pDriver = MakeLightsDriver(sDriver);
|
||||||
}
|
}
|
||||||
@@ -39,9 +39,9 @@ void LightsManager::Update( float fDeltaTime )
|
|||||||
//
|
//
|
||||||
// Update cabinet lights
|
// Update cabinet lights
|
||||||
//
|
//
|
||||||
switch( m_LightMode )
|
switch( m_LightsMode )
|
||||||
{
|
{
|
||||||
case LIGHTMODE_JOINING:
|
case LIGHTSMODE_JOINING:
|
||||||
{
|
{
|
||||||
switch( GAMESTATE->GetNumSidesJoined() )
|
switch( GAMESTATE->GetNumSidesJoined() )
|
||||||
{
|
{
|
||||||
@@ -51,95 +51,92 @@ void LightsManager::Update( float fDeltaTime )
|
|||||||
// float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
|
// float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
|
||||||
bool bOn = (iSec%2)==0;
|
bool bOn = (iSec%2)==0;
|
||||||
for( int i=0; i<8; i++ )
|
for( int i=0; i<8; i++ )
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
for( int i=0; i<8; i++ )
|
for( int i=0; i<8; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = GAMESTATE->m_bSideIsJoined[i%2];
|
bool bOn = GAMESTATE->m_bSideIsJoined[i%2];
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_ATTRACT:
|
case LIGHTSMODE_ATTRACT:
|
||||||
{
|
{
|
||||||
int iSec = (int)RageTimer::GetTimeSinceStart();
|
int iSec = (int)RageTimer::GetTimeSinceStart();
|
||||||
int i;
|
int i;
|
||||||
for( i=0; i<4; i++ )
|
for( i=0; i<4; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%4)==i;
|
bool bOn = (iSec%4)==i;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
for( i=4; i<6; i++ )
|
for( i=4; i<6; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = false;
|
bool bOn = false;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
for( i=6; i<8; i++ )
|
for( i=6; i<8; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%3)==0;
|
bool bOn = (iSec%3)==0;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_MENU:
|
case LIGHTSMODE_MENU:
|
||||||
{
|
{
|
||||||
int iSec = (int)RageTimer::GetTimeSinceStart();
|
int iSec = (int)RageTimer::GetTimeSinceStart();
|
||||||
int i;
|
int i;
|
||||||
for( i=0; i<2; i++ )
|
for( i=0; i<2; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%2)==0;
|
bool bOn = (iSec%2)==0;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
for( i=2; i<4; i++ )
|
for( i=2; i<4; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%2)==1;
|
bool bOn = (iSec%2)==1;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
for( i=4; i<6; i++ )
|
for( i=4; i<6; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%2)==0;
|
bool bOn = (iSec%2)==0;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
for( i=6; i<8; i++ )
|
for( i=6; i<8; i++ )
|
||||||
{
|
{
|
||||||
bool bOn = (iSec%2)==1;
|
bool bOn = (iSec%2)==1;
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_DEMONSTRATION:
|
case LIGHTSMODE_DEMONSTRATION:
|
||||||
case LIGHTMODE_GAMEPLAY:
|
case LIGHTSMODE_GAMEPLAY_READY:
|
||||||
|
case LIGHTSMODE_GAMEPLAY_GO:
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
// top lights are controlled my ScreenGameplay
|
bool bMarqueeLightsOn = m_LightsMode == LIGHTSMODE_GAMEPLAY_READY;
|
||||||
//for( int i=0; i<4; i++ )
|
|
||||||
// m_pDriver->SetLight( (Light)i, bOn );
|
for( i=0; i<4; i++ )
|
||||||
|
m_LightsState.m_bCabinetLights[i] = bMarqueeLightsOn;
|
||||||
|
|
||||||
// menu lights are always off
|
// menu lights are always off
|
||||||
for( i=4; i<6; i++ )
|
for( i=4; i<6; i++ )
|
||||||
m_pDriver->SetLight( (Light)i, false );
|
m_LightsState.m_bCabinetLights[i] = false;
|
||||||
|
|
||||||
// bass lights
|
// bass lights
|
||||||
float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
|
float fBeatPercentage = GAMESTATE->m_fSongBeat - (int)GAMESTATE->m_fSongBeat;
|
||||||
bool bOn = fBeatPercentage < 0.1 || fBeatPercentage > 0.9;
|
bool bOn = fBeatPercentage < 0.1 || fBeatPercentage > 0.9;
|
||||||
for( i=7; i<8; i++ )
|
for( i=7; i<8; i++ )
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
m_LightsState.m_bCabinetLights[i] = bOn;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_STAGE:
|
case LIGHTSMODE_STAGE:
|
||||||
|
case LIGHTSMODE_ALL_CLEARED:
|
||||||
{
|
{
|
||||||
for( int i=0; i<8; i++ )
|
FOREACH_CabinetLight( cl )
|
||||||
m_pDriver->SetLight( (Light)i, true );
|
m_LightsState.m_bCabinetLights[cl] = true;
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LIGHTMODE_ALL_CLEARED:
|
|
||||||
{
|
|
||||||
for( int i=0; i<8; i++ )
|
|
||||||
m_pDriver->SetLight( (Light)i, false );
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -151,48 +148,37 @@ void LightsManager::Update( float fDeltaTime )
|
|||||||
//
|
//
|
||||||
// FIXME: Works only with Game==dance
|
// FIXME: Works only with Game==dance
|
||||||
// FIXME: lights pads for players who aren't playing
|
// FIXME: lights pads for players who aren't playing
|
||||||
switch( m_LightMode )
|
switch( m_LightsMode )
|
||||||
{
|
{
|
||||||
case LIGHTMODE_ATTRACT:
|
case LIGHTSMODE_ATTRACT:
|
||||||
case LIGHTMODE_MENU:
|
case LIGHTSMODE_MENU:
|
||||||
case LIGHTMODE_DEMONSTRATION:
|
case LIGHTSMODE_DEMONSTRATION:
|
||||||
{
|
{
|
||||||
for( int i=LIGHT_GAME_BUTTON1; i<=LIGHT_LAST_GAME_BUTTON; i++ )
|
ZERO( m_LightsState.m_bGameButtonLights );
|
||||||
m_pDriver->SetLight( (Light)i, false );
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_ALL_CLEARED:
|
case LIGHTSMODE_ALL_CLEARED:
|
||||||
case LIGHTMODE_STAGE:
|
case LIGHTSMODE_STAGE:
|
||||||
case LIGHTMODE_JOINING:
|
case LIGHTSMODE_JOINING:
|
||||||
{
|
{
|
||||||
for( int c=0; c<2; c++ )
|
FOREACH_GameController( gc )
|
||||||
{
|
{
|
||||||
// GameController gc = (GameController)c;
|
bool bOn = GAMESTATE->m_bSideIsJoined[gc];
|
||||||
bool bOn = GAMESTATE->m_bSideIsJoined[c];
|
|
||||||
|
|
||||||
for( int i=0; i<4; i++ )
|
FOREACH_GameButton( gb )
|
||||||
{
|
m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
|
||||||
// GameButton gb = (GameButton)i;
|
|
||||||
Light light = (Light)(LIGHT_GAME_BUTTON1 + c*4+i);
|
|
||||||
m_pDriver->SetLight( light, bOn );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case LIGHTMODE_GAMEPLAY:
|
case LIGHTSMODE_GAMEPLAY_READY:
|
||||||
|
case LIGHTSMODE_GAMEPLAY_GO:
|
||||||
{
|
{
|
||||||
for( int c=0; c<2; c++ )
|
FOREACH_GameController( gc )
|
||||||
{
|
{
|
||||||
GameController gc = (GameController)c;
|
FOREACH_GameButton( gb )
|
||||||
|
|
||||||
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) );
|
bool bOn = INPUTMAPPER->IsButtonDown( GameInput(gc,gb) );
|
||||||
m_pDriver->SetLight( light, bOn );
|
m_LightsState.m_bGameButtonLights[gc][gb] = bOn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -202,18 +188,10 @@ void LightsManager::Update( float fDeltaTime )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// apply new light values we set above
|
// apply new light values we set above
|
||||||
m_pDriver->Flush();
|
m_pDriver->Set( &m_LightsState );
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightsManager::SetLightMode( LightMode lm )
|
void LightsManager::SetLightsMode( LightsMode lm )
|
||||||
{
|
{
|
||||||
m_LightMode = lm;
|
m_LightsMode = lm;
|
||||||
}
|
|
||||||
|
|
||||||
void LightsManager::SetAllUpperLights( bool bOn )
|
|
||||||
{
|
|
||||||
for( int i=0; i<4; i++ )
|
|
||||||
{
|
|
||||||
m_pDriver->SetLight( (Light)i, bOn );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,39 +11,41 @@
|
|||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "PlayerNumber.h"
|
||||||
|
#include "GameInput.h"
|
||||||
|
#include "ForeachEnum.h"
|
||||||
|
|
||||||
enum Light
|
enum CabinetLight
|
||||||
{
|
{
|
||||||
LIGHT_MARUQEE_UP_LEFT,
|
LIGHT_MARUQEE_UP_LEFT,
|
||||||
LIGHT_MARUQEE_UP_RIGHT,
|
LIGHT_MARUQEE_UP_RIGHT,
|
||||||
LIGHT_MARUQEE_LR_LEFT,
|
LIGHT_MARUQEE_LR_LEFT,
|
||||||
LIGHT_MARUQEE_LR_RIGHT,
|
LIGHT_MARUQEE_LR_RIGHT,
|
||||||
LIGHT_MENU_LEFT,
|
LIGHT_BUTTONS_LEFT,
|
||||||
LIGHT_MENU_RIGHT,
|
LIGHT_BUTTONS_RIGHT,
|
||||||
LIGHT_BASS_LEFT,
|
LIGHT_BASS_LEFT,
|
||||||
LIGHT_BASS_RIGHT,
|
LIGHT_BASS_RIGHT,
|
||||||
LIGHT_GAME_BUTTON1, //
|
NUM_CABINET_LIGHTS
|
||||||
LIGHT_GAME_BUTTON2,
|
};
|
||||||
LIGHT_GAME_BUTTON3,
|
#define FOREACH_CabinetLight( i ) FOREACH_ENUM( CabinetLight, NUM_CABINET_LIGHTS, i )
|
||||||
LIGHT_GAME_BUTTON4,
|
|
||||||
LIGHT_GAME_BUTTON5,
|
enum LightsMode
|
||||||
LIGHT_GAME_BUTTON6,
|
{
|
||||||
LIGHT_GAME_BUTTON7,
|
LIGHTSMODE_ATTRACT,
|
||||||
LIGHT_GAME_BUTTON8,
|
LIGHTSMODE_JOINING,
|
||||||
NUM_LIGHTS
|
LIGHTSMODE_MENU,
|
||||||
|
LIGHTSMODE_DEMONSTRATION,
|
||||||
|
LIGHTSMODE_GAMEPLAY_READY,
|
||||||
|
LIGHTSMODE_GAMEPLAY_GO,
|
||||||
|
LIGHTSMODE_STAGE,
|
||||||
|
LIGHTSMODE_ALL_CLEARED,
|
||||||
|
LIGHTSMODE_TEST,
|
||||||
};
|
};
|
||||||
|
|
||||||
const Light LIGHT_LAST_GAME_BUTTON = LIGHT_GAME_BUTTON8;
|
struct LightsState
|
||||||
|
|
||||||
enum LightMode
|
|
||||||
{
|
{
|
||||||
LIGHTMODE_ATTRACT,
|
bool m_bCabinetLights[NUM_CABINET_LIGHTS];
|
||||||
LIGHTMODE_JOINING,
|
bool m_bGameButtonLights[MAX_GAME_CONTROLLERS][MAX_GAME_BUTTONS];
|
||||||
LIGHTMODE_MENU,
|
|
||||||
LIGHTMODE_DEMONSTRATION,
|
|
||||||
LIGHTMODE_GAMEPLAY,
|
|
||||||
LIGHTMODE_STAGE,
|
|
||||||
LIGHTMODE_ALL_CLEARED,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class LightsDriver;
|
class LightsDriver;
|
||||||
@@ -56,14 +58,13 @@ public:
|
|||||||
|
|
||||||
void Update( float fDeltaTime );
|
void Update( float fDeltaTime );
|
||||||
|
|
||||||
void SetLightMode( LightMode lm );
|
void SetLightsMode( LightsMode lm );
|
||||||
void SetAllUpperLights( bool bOn );
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void SetLight( Light light, bool bOn );
|
|
||||||
|
|
||||||
LightsDriver* m_pDriver;
|
LightsDriver* m_pDriver;
|
||||||
LightMode m_LightMode;
|
LightsMode m_LightsMode;
|
||||||
|
LightsState m_LightsState;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -125,7 +125,6 @@ MovieTexture += arch/MovieTexture/MovieTexture_FFMpeg.cpp arch/MovieTexture/Movi
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
Lights = arch/Lights/LightsDriver.h \
|
Lights = arch/Lights/LightsDriver.h \
|
||||||
arch/Lights/LightsDriver_LinuxSerial.cpp arch/Lights/LightsDriver_LinuxSerial.h \
|
|
||||||
arch/Lights/LightsDriver_SystemMessage.cpp arch/Lights/LightsDriver_SystemMessage.h
|
arch/Lights/LightsDriver_SystemMessage.cpp arch/Lights/LightsDriver_SystemMessage.h
|
||||||
|
|
||||||
MemoryCard = arch/MemoryCard/MemoryCardDriver.h \
|
MemoryCard = arch/MemoryCard/MemoryCardDriver.h \
|
||||||
|
|||||||
@@ -14,8 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "RageTypes.h" // for RageColor
|
#include "RageTypes.h" // for RageColor
|
||||||
|
#include "ForeachEnum.h"
|
||||||
#define FOREACH_ENUM( e, max, var ) for( e var=(e)0; var<max; ((int&)var)++ )
|
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -79,10 +79,10 @@ void ScreenCaution::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
break;
|
break;
|
||||||
case SM_GoToPrevScreen:
|
case SM_GoToPrevScreen:
|
||||||
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
|
SCREENMAN->SetNewScreen( "ScreenTitleMenu" );
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_MENU );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU );
|
||||||
break;
|
break;
|
||||||
case SM_GoToNextScreen:
|
case SM_GoToNextScreen:
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_MENU );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU );
|
||||||
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
SCREENMAN->SetNewScreen( NEXT_SCREEN );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ void ScreenEvaluation::Init()
|
|||||||
|
|
||||||
LOG->Trace( "ScreenEvaluation::ScreenEvaluation()" );
|
LOG->Trace( "ScreenEvaluation::ScreenEvaluation()" );
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_MENU );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU );
|
||||||
|
|
||||||
m_bFailed = g_CurStageStats.AllFailed();
|
m_bFailed = g_CurStageStats.AllFailed();
|
||||||
|
|
||||||
|
|||||||
@@ -99,9 +99,9 @@ void ScreenGameplay::Init()
|
|||||||
int p;
|
int p;
|
||||||
|
|
||||||
if( m_bDemonstration )
|
if( m_bDemonstration )
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_DEMONSTRATION );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_DEMONSTRATION );
|
||||||
else
|
else
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_GAMEPLAY );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_GAMEPLAY_READY );
|
||||||
|
|
||||||
m_soundMusic = NULL;
|
m_soundMusic = NULL;
|
||||||
|
|
||||||
@@ -1388,9 +1388,9 @@ void ScreenGameplay::Update( float fDeltaTime )
|
|||||||
s_fSecsLeftOnUpperLights = 0;
|
s_fSecsLeftOnUpperLights = 0;
|
||||||
}
|
}
|
||||||
if( s_fSecsLeftOnUpperLights>0 )
|
if( s_fSecsLeftOnUpperLights>0 )
|
||||||
LIGHTSMAN->SetAllUpperLights( true );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_GAMEPLAY_READY );
|
||||||
else
|
else
|
||||||
LIGHTSMAN->SetAllUpperLights( false );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_GAMEPLAY_GO );
|
||||||
|
|
||||||
//
|
//
|
||||||
// update song position meter
|
// update song position meter
|
||||||
@@ -1977,7 +1977,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
|||||||
|
|
||||||
GAMESTATE->RemoveAllActiveAttacks();
|
GAMESTATE->RemoveAllActiveAttacks();
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_ALL_CLEARED );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_ALL_CLEARED );
|
||||||
|
|
||||||
|
|
||||||
if( bAllReallyFailed )
|
if( bAllReallyFailed )
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ ScreenSelectMusic::ScreenSelectMusic( CString sClassName ) : Screen( sClassName
|
|||||||
{
|
{
|
||||||
LOG->Trace( "ScreenSelectMusic::ScreenSelectMusic()" );
|
LOG->Trace( "ScreenSelectMusic::ScreenSelectMusic()" );
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_MENU );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU );
|
||||||
|
|
||||||
m_bInCourseDisplayMode = GAMESTATE->IsCourseMode();
|
m_bInCourseDisplayMode = GAMESTATE->IsCourseMode();
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ ScreenSelectStyle::ScreenSelectStyle( CString sClassName ) : ScreenSelect( sClas
|
|||||||
{
|
{
|
||||||
m_iSelection = 0;
|
m_iSelection = 0;
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_MENU );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_MENU );
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for( i=0; i<m_aModeChoices.size(); i++ )
|
for( i=0; i<m_aModeChoices.size(); i++ )
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ ScreenStage::ScreenStage( CString sClassName ) : Screen( sClassName )
|
|||||||
{
|
{
|
||||||
SOUND->StopMusic();
|
SOUND->StopMusic();
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_STAGE );
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_STAGE );
|
||||||
|
|
||||||
|
|
||||||
m_Background.LoadFromAniDir( THEME->GetPathToB(m_sName + " "+GAMESTATE->GetStageText()) );
|
m_Background.LoadFromAniDir( THEME->GetPathToB(m_sName + " "+GAMESTATE->GetStageText()) );
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ ScreenTitleMenu::ScreenTitleMenu( CString sClassName ) : ScreenSelect( sClassNam
|
|||||||
* things stinks ... */
|
* things stinks ... */
|
||||||
GAMESTATE->Reset();
|
GAMESTATE->Reset();
|
||||||
|
|
||||||
LIGHTSMAN->SetLightMode( LIGHTMODE_JOINING ); // do this after Reset!
|
LIGHTSMAN->SetLightsMode( LIGHTSMODE_JOINING ); // do this after Reset!
|
||||||
|
|
||||||
|
|
||||||
m_sprLogo.Load( THEME->GetPathToG(ssprintf("ScreenLogo %s",GAMESTATE->GetCurrentGameDef()->m_szName)) );
|
m_sprLogo.Load( THEME->GetPathToG(ssprintf("ScreenLogo %s",GAMESTATE->GetCurrentGameDef()->m_szName)) );
|
||||||
|
|||||||
@@ -13,14 +13,15 @@
|
|||||||
|
|
||||||
#include "LightsManager.h"
|
#include "LightsManager.h"
|
||||||
|
|
||||||
|
struct LightsState;
|
||||||
|
|
||||||
class LightsDriver
|
class LightsDriver
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LightsDriver() {};
|
LightsDriver() {};
|
||||||
virtual ~LightsDriver() {};
|
virtual ~LightsDriver() {};
|
||||||
|
|
||||||
virtual void SetLight( Light light, bool bOn ) = 0;
|
virtual void Set( const LightsState *ls ) = 0;
|
||||||
virtual void Flush() = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
#include "global.h"
|
|
||||||
/*
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Class: LightsDriver_LinuxSerial
|
|
||||||
|
|
||||||
Desc: See header.
|
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
|
||||||
Chris Danford
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "LightsDriver_LinuxSerial.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <termios.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include "RageLog.h"
|
|
||||||
#include "RageTimer.h"
|
|
||||||
|
|
||||||
static int fd = -1;
|
|
||||||
|
|
||||||
void WriteString( const char *sz, int len )
|
|
||||||
{
|
|
||||||
int iOut;
|
|
||||||
if( fd == -1 )
|
|
||||||
{
|
|
||||||
LOG->Warn("Lights port is not open\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
iOut = write(fd, sz, len);
|
|
||||||
if (iOut < 0)
|
|
||||||
{
|
|
||||||
LOG->Warn("Lights write error %d %s\n", errno, strerror(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT( iOut > 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
LightsDriver_LinuxSerial::LightsDriver_LinuxSerial()
|
|
||||||
{
|
|
||||||
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY); // COM1
|
|
||||||
if (fd < 0)
|
|
||||||
RageException::Throw( "open error %d %s\n", errno, strerror(errno) );
|
|
||||||
|
|
||||||
tcflush(fd, TCIFLUSH);
|
|
||||||
|
|
||||||
struct termios my_termios;
|
|
||||||
tcgetattr(fd, &my_termios);
|
|
||||||
|
|
||||||
// my_termios.c_iflag = IGNBRK;
|
|
||||||
// my_termios.c_lflag = 0;
|
|
||||||
// my_termios.c_oflag = 0;
|
|
||||||
// my_termios.c_cflag |= CREAD | CLOCAL;
|
|
||||||
my_termios.c_cflag &= ~CRTSCTS;
|
|
||||||
my_termios.c_iflag &= ~(IXON | IXOFF | IXANY); /* no flow control */
|
|
||||||
// my_termios.sg_ispeed = my_termios.sg_ispeed = B2400;
|
|
||||||
|
|
||||||
// my_termios.c_cflag = B2400 | CS8 | CREAD | CLOCAL | HUPCL;
|
|
||||||
// my_termios.c_oflag &= ~0; /* no flow control */
|
|
||||||
// fcntl(fd, F_SETFL, 0);
|
|
||||||
|
|
||||||
cfsetispeed(&my_termios, B2400);
|
|
||||||
cfsetospeed(&my_termios, B2400);
|
|
||||||
tcsetattr(fd, TCSANOW, &my_termios);
|
|
||||||
LOG->Info("Lights info:");
|
|
||||||
LOG->Info(" new cflag=%08x", (int) my_termios.c_cflag);
|
|
||||||
LOG->Info(" new oflag=%08x", (int) my_termios.c_oflag);
|
|
||||||
LOG->Info(" new iflag=%08x", (int) my_termios.c_iflag);
|
|
||||||
LOG->Info(" new lflag=%08x", (int) my_termios.c_lflag);
|
|
||||||
}
|
|
||||||
|
|
||||||
LightsDriver_LinuxSerial::~LightsDriver_LinuxSerial()
|
|
||||||
{
|
|
||||||
if( fd != -1 )
|
|
||||||
close( fd );
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUM_DATA_BYTES 2
|
|
||||||
|
|
||||||
char g_data[NUM_DATA_BYTES] = { 0, 0 };
|
|
||||||
|
|
||||||
void LightsDriver_LinuxSerial::SetLight( Light light, bool bOn )
|
|
||||||
{
|
|
||||||
int byte_index = light / 8;
|
|
||||||
ASSERT( byte_index <= NUM_DATA_BYTES );
|
|
||||||
int bit_index = light % 8;
|
|
||||||
char &data = g_data[byte_index];
|
|
||||||
char mask = 0x01 << bit_index;
|
|
||||||
if( bOn )
|
|
||||||
data |= mask;
|
|
||||||
else
|
|
||||||
data &= ~mask;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LightsDriver_LinuxSerial::Flush()
|
|
||||||
{
|
|
||||||
// temp HACK: only write once every 30 times
|
|
||||||
static RageTimer tm;
|
|
||||||
if( tm.PeekDeltaTime() < 0.02f )
|
|
||||||
return;
|
|
||||||
tm.Touch();
|
|
||||||
|
|
||||||
// LOG->Trace( "Entering LightsDriver_LinuxSerial::Flush()" );
|
|
||||||
|
|
||||||
char temp_data_to_write[2+NUM_DATA_BYTES] = "";
|
|
||||||
temp_data_to_write[0] = 'Y';
|
|
||||||
temp_data_to_write[1] = 'o';
|
|
||||||
|
|
||||||
for( int i=0; i<NUM_DATA_BYTES; i++ )
|
|
||||||
temp_data_to_write[2+i] = ~g_data[i]; // flip bits so that 0=on, 1=off.
|
|
||||||
|
|
||||||
RageTimer testing;
|
|
||||||
WriteString( temp_data_to_write, sizeof(temp_data_to_write) );
|
|
||||||
if( testing.PeekDeltaTime() > 0.1f )
|
|
||||||
LOG->Warn("WriteString took %F", testing.GetDeltaTime());
|
|
||||||
|
|
||||||
// LOG->Trace( "Leaving LightsDriver_LinuxSerial::Flush()" );
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#ifndef LightsDriver_LinuxSerial_H
|
|
||||||
#define LightsDriver_LinuxSerial_H
|
|
||||||
/*
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
Class: LightsDriver_LinuxSerial
|
|
||||||
|
|
||||||
Desc: Control lights.
|
|
||||||
|
|
||||||
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
|
|
||||||
Chris Danford
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "arch/Lights/LightsDriver.h"
|
|
||||||
|
|
||||||
class LightsDriver_LinuxSerial : public LightsDriver
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
LightsDriver_LinuxSerial();
|
|
||||||
virtual ~LightsDriver_LinuxSerial();
|
|
||||||
|
|
||||||
virtual void SetLight( Light light, bool bOn );
|
|
||||||
virtual void Flush();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -19,8 +19,7 @@ public:
|
|||||||
LightsDriver_Null() {};
|
LightsDriver_Null() {};
|
||||||
virtual ~LightsDriver_Null() {};
|
virtual ~LightsDriver_Null() {};
|
||||||
|
|
||||||
virtual void SetLight( Light light, bool bOn ) {};
|
void Set( const LightsState *ls ) {};
|
||||||
virtual void Flush() {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -14,28 +14,34 @@
|
|||||||
#include "ScreenManager.h"
|
#include "ScreenManager.h"
|
||||||
|
|
||||||
|
|
||||||
bool g_bLightOn[NUM_LIGHTS];
|
|
||||||
|
|
||||||
LightsDriver_SystemMessage::LightsDriver_SystemMessage()
|
LightsDriver_SystemMessage::LightsDriver_SystemMessage()
|
||||||
{
|
{
|
||||||
memset( g_bLightOn, 0, sizeof(g_bLightOn) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
LightsDriver_SystemMessage::~LightsDriver_SystemMessage()
|
LightsDriver_SystemMessage::~LightsDriver_SystemMessage()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightsDriver_SystemMessage::SetLight( Light light, bool bOn )
|
void LightsDriver_SystemMessage::Set( const LightsState *ls )
|
||||||
{
|
{
|
||||||
g_bLightOn[light] = bOn;
|
CString s;
|
||||||
|
|
||||||
|
s += "Cabinet: ";
|
||||||
|
FOREACH_CabinetLight( cl )
|
||||||
|
{
|
||||||
|
s += ls->m_bCabinetLights[cl] ? '1' : '0';
|
||||||
|
}
|
||||||
|
s += "\n";
|
||||||
|
|
||||||
|
FOREACH_GameController( gc )
|
||||||
|
{
|
||||||
|
s += ssprintf("Controller%d: ",gc+1);
|
||||||
|
FOREACH_GameButton( gb )
|
||||||
|
{
|
||||||
|
s += ls->m_bGameButtonLights[gc][gb] ? '1' : '0';
|
||||||
|
}
|
||||||
|
s += "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightsDriver_SystemMessage::Flush()
|
|
||||||
{
|
|
||||||
CString s = "Lights: ";
|
|
||||||
for( int i=0; i<NUM_LIGHTS; i++ )
|
|
||||||
{
|
|
||||||
s += g_bLightOn[i] ? '1' : '0';
|
|
||||||
}
|
|
||||||
SCREENMAN->SystemMessageNoAnimate( s );
|
SCREENMAN->SystemMessageNoAnimate( s );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ public:
|
|||||||
LightsDriver_SystemMessage();
|
LightsDriver_SystemMessage();
|
||||||
virtual ~LightsDriver_SystemMessage();
|
virtual ~LightsDriver_SystemMessage();
|
||||||
|
|
||||||
virtual void SetLight( Light light, bool bOn );
|
virtual void Set( const LightsState *ls );
|
||||||
virtual void Flush();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "LightsDriver_Win32Parallel.h"
|
#include "LightsDriver_Win32Parallel.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "RageUtil.h"
|
||||||
|
|
||||||
|
|
||||||
HINSTANCE hDLL = NULL;
|
HINSTANCE hDLL = NULL;
|
||||||
@@ -23,17 +24,29 @@ ISDRIVERINSTALLED* IsDriverInstalled = NULL;
|
|||||||
|
|
||||||
const int LIGHTS_PER_PARALLEL_PORT = 8;
|
const int LIGHTS_PER_PARALLEL_PORT = 8;
|
||||||
const int MAX_PARALLEL_PORTS = 3;
|
const int MAX_PARALLEL_PORTS = 3;
|
||||||
DWORD LPT_ADDRESS[MAX_PARALLEL_PORTS] =
|
short LPT_ADDRESS[MAX_PARALLEL_PORTS] =
|
||||||
{
|
{
|
||||||
0x378, // LPT1
|
0x378, // LPT1
|
||||||
0x278, // LPT2
|
0x278, // LPT2
|
||||||
0x3bc, // LPT3
|
0x3bc, // LPT3
|
||||||
};
|
};
|
||||||
void LightToLptAndPin( Light light, int &lpt_out, int &pin_out )
|
|
||||||
|
int CabinetLightToIndex( CabinetLight cl )
|
||||||
{
|
{
|
||||||
lpt_out = light / LIGHTS_PER_PARALLEL_PORT;
|
return cl;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GameControllerAndGameButtonToIndex( GameController gc, GameButton gb )
|
||||||
|
{
|
||||||
|
CLAMP( (int&)gb, 0, 3 );
|
||||||
|
return NUM_CABINET_LIGHTS + gc*4 + gb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void IndexToLptAndPin( int index, int &lpt_out, int &pin_out )
|
||||||
|
{
|
||||||
|
lpt_out = index / LIGHTS_PER_PARALLEL_PORT;
|
||||||
ASSERT( lpt_out >= 0 && lpt_out < MAX_PARALLEL_PORTS );
|
ASSERT( lpt_out >= 0 && lpt_out < MAX_PARALLEL_PORTS );
|
||||||
pin_out = light % LIGHTS_PER_PARALLEL_PORT;
|
pin_out = index % LIGHTS_PER_PARALLEL_PORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
LightsDriver_Win32Parallel::LightsDriver_Win32Parallel()
|
LightsDriver_Win32Parallel::LightsDriver_Win32Parallel()
|
||||||
@@ -56,33 +69,53 @@ LightsDriver_Win32Parallel::~LightsDriver_Win32Parallel()
|
|||||||
FreeLibrary( hDLL );
|
FreeLibrary( hDLL );
|
||||||
}
|
}
|
||||||
|
|
||||||
BYTE g_data[MAX_PARALLEL_PORTS] =
|
void LightsDriver_Win32Parallel::Set( const LightsState *ls )
|
||||||
|
{
|
||||||
|
BYTE data[MAX_PARALLEL_PORTS] =
|
||||||
{
|
{
|
||||||
0x00,
|
0x00,
|
||||||
0x00,
|
0x00,
|
||||||
0x00
|
0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
void LightsDriver_Win32Parallel::SetLight( Light light, bool bOn )
|
|
||||||
{
|
{
|
||||||
|
FOREACH_CabinetLight( cl )
|
||||||
|
{
|
||||||
|
bool bOn = ls->m_bCabinetLights[cl];
|
||||||
|
int index = CabinetLightToIndex( cl );
|
||||||
int lpt;
|
int lpt;
|
||||||
int pin;
|
int pin;
|
||||||
LightToLptAndPin( light, lpt, pin );
|
IndexToLptAndPin( index, lpt, pin );
|
||||||
|
|
||||||
BYTE &data = g_data[lpt];
|
|
||||||
BYTE mask = (BYTE) (0x01 << pin);
|
BYTE mask = (BYTE) (0x01 << pin);
|
||||||
if( bOn )
|
if( bOn )
|
||||||
data |= mask;
|
data[lpt] |= mask;
|
||||||
else
|
else
|
||||||
data &= ~mask;
|
data[lpt] &= ~mask;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FOREACH_GameController( gc )
|
||||||
|
{
|
||||||
|
FOREACH_GameButton( gb )
|
||||||
|
{
|
||||||
|
bool bOn = ls->m_bGameButtonLights[gc][gb];
|
||||||
|
int index = GameControllerAndGameButtonToIndex( gc, gb );
|
||||||
|
int lpt;
|
||||||
|
int pin;
|
||||||
|
IndexToLptAndPin( index, lpt, pin );
|
||||||
|
BYTE mask = (BYTE) (0x01 << pin);
|
||||||
|
if( bOn )
|
||||||
|
data[lpt] |= mask;
|
||||||
|
else
|
||||||
|
data[lpt] &= ~mask;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LightsDriver_Win32Parallel::Flush()
|
|
||||||
{
|
{
|
||||||
for( int i=0; i<MAX_PARALLEL_PORTS; i++ )
|
for( int i=0; i<MAX_PARALLEL_PORTS; i++ )
|
||||||
{
|
{
|
||||||
BYTE &data = g_data[i];
|
short address = LPT_ADDRESS[i];
|
||||||
DWORD address = LPT_ADDRESS[i];
|
PortOut( address, data[i] );
|
||||||
PortOut( (short) address, data );
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ public:
|
|||||||
LightsDriver_Win32Parallel();
|
LightsDriver_Win32Parallel();
|
||||||
virtual ~LightsDriver_Win32Parallel();
|
virtual ~LightsDriver_Win32Parallel();
|
||||||
|
|
||||||
virtual void SetLight( Light light, bool bOn );
|
virtual void Set( const LightsState *ls );
|
||||||
virtual void Flush();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user