support pad lights
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
#include "arch/Lights/LightsDriver.h"
|
||||
#include "arch/arch.h"
|
||||
#include "RageUtil.h"
|
||||
#include "GameInput.h" // for GameController
|
||||
#include "InputMapper.h"
|
||||
|
||||
#include "windows.h"
|
||||
|
||||
@@ -35,6 +37,9 @@ LightsManager::~LightsManager()
|
||||
|
||||
void LightsManager::Update( float fDeltaTime )
|
||||
{
|
||||
//
|
||||
// Update cabinet lights
|
||||
//
|
||||
switch( m_LightMode )
|
||||
{
|
||||
case LIGHTMODE_JOINING:
|
||||
@@ -115,13 +120,13 @@ void LightsManager::Update( float fDeltaTime )
|
||||
m_pDriver->SetLight( (Light)i, bOn );
|
||||
}
|
||||
break;
|
||||
case LIGHTMODE_ALL_ON:
|
||||
case LIGHTMODE_STAGE:
|
||||
{
|
||||
for( int i=0; i<8; i++ )
|
||||
m_pDriver->SetLight( (Light)i, true );
|
||||
}
|
||||
break;
|
||||
case LIGHTMODE_ALL_OFF:
|
||||
case LIGHTMODE_ALL_CLEARED:
|
||||
{
|
||||
for( int i=0; i<8; i++ )
|
||||
m_pDriver->SetLight( (Light)i, false );
|
||||
@@ -130,6 +135,61 @@ void LightsManager::Update( float fDeltaTime )
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
void LightsManager::SetLightMode( LightMode lm )
|
||||
|
||||
@@ -18,13 +18,23 @@ enum Light
|
||||
LIGHT_MARUQEE_UP_RIGHT,
|
||||
LIGHT_MARUQEE_LR_LEFT,
|
||||
LIGHT_MARUQEE_LR_RIGHT,
|
||||
LIGHT_MARUQEE_MENU_LEFT,
|
||||
LIGHT_MARUQEE_MENU_RIGHT,
|
||||
LIGHT_MARUQEE_BASS_LEFT,
|
||||
LIGHT_MARUQEE_BASS_RIGHT,
|
||||
LIGHT_MENU_LEFT,
|
||||
LIGHT_MENU_RIGHT,
|
||||
LIGHT_BASS_LEFT,
|
||||
LIGHT_BASS_RIGHT,
|
||||
LIGHT_GAME_BUTTON1, //
|
||||
LIGHT_GAME_BUTTON2,
|
||||
LIGHT_GAME_BUTTON3,
|
||||
LIGHT_GAME_BUTTON4,
|
||||
LIGHT_GAME_BUTTON5,
|
||||
LIGHT_GAME_BUTTON6,
|
||||
LIGHT_GAME_BUTTON7,
|
||||
LIGHT_GAME_BUTTON8,
|
||||
NUM_LIGHTS
|
||||
};
|
||||
|
||||
const Light LIGHT_LAST_GAME_BUTTON = LIGHT_GAME_BUTTON8;
|
||||
|
||||
enum LightMode
|
||||
{
|
||||
LIGHTMODE_ATTRACT,
|
||||
@@ -32,8 +42,8 @@ enum LightMode
|
||||
LIGHTMODE_MENU,
|
||||
LIGHTMODE_DEMONSTRATION,
|
||||
LIGHTMODE_GAMEPLAY,
|
||||
LIGHTMODE_ALL_ON,
|
||||
LIGHTMODE_ALL_OFF,
|
||||
LIGHTMODE_STAGE,
|
||||
LIGHTMODE_ALL_CLEARED,
|
||||
};
|
||||
|
||||
class LightsDriver;
|
||||
|
||||
@@ -1715,7 +1715,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
|
||||
|
||||
GAMESTATE->RemoveAllActiveAttacks();
|
||||
|
||||
LIGHTSMAN->SetLightMode( LIGHTMODE_ALL_OFF );
|
||||
LIGHTSMAN->SetLightMode( LIGHTMODE_ALL_CLEARED );
|
||||
|
||||
|
||||
if( bAllReallyFailed )
|
||||
|
||||
@@ -57,7 +57,7 @@ ScreenStage::ScreenStage( CString sClassName ) : Screen( sClassName )
|
||||
{
|
||||
SOUND->StopMusic();
|
||||
|
||||
LIGHTSMAN->SetLightMode( LIGHTMODE_ALL_ON );
|
||||
LIGHTSMAN->SetLightMode( LIGHTMODE_STAGE );
|
||||
|
||||
|
||||
m_Background.LoadFromAniDir( THEME->GetPathToB("ScreenStage "+GAMESTATE->GetStageText()) );
|
||||
|
||||
@@ -21,6 +21,20 @@ PORTOUT* PortOut = NULL;
|
||||
typedef short int (WINAPI ISDRIVERINSTALLED)();
|
||||
ISDRIVERINSTALLED* IsDriverInstalled = NULL;
|
||||
|
||||
const int LIGHTS_PER_PARALLEL_PORT = 8;
|
||||
const int MAX_PARALLEL_PORTS = 3;
|
||||
DWORD LPT_ADDRESS[MAX_PARALLEL_PORTS] =
|
||||
{
|
||||
0x378, // LPT1
|
||||
0x278, // LPT2
|
||||
0x3bc, // LPT3
|
||||
};
|
||||
void LightToLptAndPin( Light light, int &lpt_out, int &pin_out )
|
||||
{
|
||||
lpt_out = light / LIGHTS_PER_PARALLEL_PORT;
|
||||
ASSERT( lpt_out >= 0 && lpt_out < MAX_PARALLEL_PORTS );
|
||||
pin_out = light % LIGHTS_PER_PARALLEL_PORT;
|
||||
}
|
||||
|
||||
LightsDriver_Win32Parallel::LightsDriver_Win32Parallel()
|
||||
{
|
||||
@@ -42,14 +56,26 @@ LightsDriver_Win32Parallel::~LightsDriver_Win32Parallel()
|
||||
FreeLibrary( hDLL );
|
||||
}
|
||||
|
||||
BYTE g_data[MAX_PARALLEL_PORTS] =
|
||||
{
|
||||
0x00,
|
||||
0x00,
|
||||
0x00
|
||||
};
|
||||
|
||||
void LightsDriver_Win32Parallel::SetLight( Light light, bool bOn )
|
||||
{
|
||||
static BYTE data = 0x00;
|
||||
BYTE mask = 0x01 << light;
|
||||
int lpt;
|
||||
int pin;
|
||||
LightToLptAndPin( light, lpt, pin );
|
||||
|
||||
BYTE &data = g_data[lpt];
|
||||
BYTE mask = 0x01 << pin;
|
||||
if( bOn )
|
||||
data |= mask;
|
||||
else
|
||||
data &= ~mask;
|
||||
PortOut( 0x378, data );
|
||||
// ports of interest: 0x278, 0x3BC, 0x378
|
||||
|
||||
DWORD address = LPT_ADDRESS[lpt];
|
||||
PortOut( address, data );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user