add StepsType for cabinet lights

This commit is contained in:
Chris Danford
2004-04-20 02:35:30 +00:00
parent 3bbefc42d4
commit fc8d3ed363
10 changed files with 217 additions and 64 deletions
+1
View File
@@ -23,6 +23,7 @@ enum Game
GAME_MANIAX, // DanceManiax GAME_MANIAX, // DanceManiax
GAME_TECHNO, // TechnoMotion GAME_TECHNO, // TechnoMotion
GAME_PNM, // pop n music GAME_PNM, // pop n music
GAME_LIGHTS, // cabinet lights (not really a game)
NUM_GAMES, // leave this at the end NUM_GAMES, // leave this at the end
GAME_INVALID, GAME_INVALID,
}; };
+1
View File
@@ -142,6 +142,7 @@ enum StepsType
STEPS_TYPE_TECHNO_SINGLE8, STEPS_TYPE_TECHNO_SINGLE8,
STEPS_TYPE_PNM_FIVE, STEPS_TYPE_PNM_FIVE,
STEPS_TYPE_PNM_NINE, STEPS_TYPE_PNM_NINE,
STEPS_TYPE_LIGHTS_CABINET,
NUM_STEPS_TYPES, // leave this at the end NUM_STEPS_TYPES, // leave this at the end
STEPS_TYPE_INVALID, STEPS_TYPE_INVALID,
}; };
+20
View File
@@ -230,6 +230,26 @@ enum // PnM Buttons
NUM_PNM_BUTTONS, // leave this at the end NUM_PNM_BUTTONS, // leave this at the end
}; };
enum // LightsButtons
{
LIGHTS_BUTTON_MARQUEE_UP_LEFT,
LIGHTS_BUTTON_MARQUEE_UP_RIGHT,
LIGHTS_BUTTON_MARQUEE_LR_LEFT,
LIGHTS_BUTTON_MARQUEE_LR_RIGHT,
LIGHTS_BUTTON_BUTTONS_LEFT,
LIGHTS_BUTTON_BUTTONS_RIGHT,
LIGHTS_BUTTON_BASS_LEFT,
LIGHTS_BUTTON_BASS_RIGHT,
LIGHTS_BUTTON_START,
LIGHTS_BUTTON_BACK,
LIGHTS_BUTTON_MENULEFT,
LIGHTS_BUTTON_MENURIGHT,
LIGHTS_BUTTON_MENUUP,
LIGHTS_BUTTON_MENUDOWN,
LIGHTS_BUTTON_COIN,
LIGHTS_BUTTON_OPERATOR,
NUM_LIGHTS_BUTTONS, // leave this at the end
};
struct GameInput struct GameInput
+137
View File
@@ -21,6 +21,7 @@
#include "NoteSkinManager.h" #include "NoteSkinManager.h"
#include "SDL_keysym.h" // for SDLKeys #include "SDL_keysym.h" // for SDLKeys
#include "ThemeManager.h" #include "ThemeManager.h"
#include "LightsManager.h" // for NUM_CABINET_LIGHTS
GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our program GameManager* GAMEMAN = NULL; // global and accessable from anywhere in our program
@@ -67,6 +68,7 @@ struct {
{ "techno-single8", 8 }, { "techno-single8", 8 },
{ "pnm-five", 5 }, { "pnm-five", 5 },
{ "pnm-nine", 9 }, { "pnm-nine", 9 },
{ "lights-cabinet", NUM_CABINET_LIGHTS },
}; };
// //
@@ -1031,6 +1033,106 @@ GameDef g_GameDefs[NUM_GAMES] =
}, },
} }
}, },
{ // GAME_LIGHTS
"lights", // m_szName
"Lights", // m_szDescription
1, // m_iNumControllers
NUM_LIGHTS_BUTTONS, // m_iButtonsPerController
{ // m_szButtonNames
"MarqueeUpLeft",
"MarqueeUpRight",
"MarqueeLrLeft",
"MarqueeLrRight",
"ButtonsLeft",
"ButtonsRight",
"BassLeft",
"BassRight",
"Start",
"Back",
"MenuLeft",
"MenuRight",
"MenuUp",
"MenuDown",
"Insert Coin",
"Operator",
},
{ // m_szSecondaryFunction
"(MenuLeft)",
"(MenuRight)",
"(MenuUp)",
"(MenuDown)",
"",
"",
"",
"",
"",
"",
"(dedicated)",
"(dedicated)",
"(dedicated)",
"(dedicated)",
"",
"",
},
{ // m_DedicatedMenuButton
LIGHTS_BUTTON_MENULEFT, // MENU_BUTTON_LEFT
LIGHTS_BUTTON_MENURIGHT, // MENU_BUTTON_RIGHT
LIGHTS_BUTTON_MENUUP, // MENU_BUTTON_UP
LIGHTS_BUTTON_MENUDOWN, // MENU_BUTTON_DOWN
LIGHTS_BUTTON_START, // MENU_BUTTON_START
LIGHTS_BUTTON_BACK, // MENU_BUTTON_BACK
LIGHTS_BUTTON_COIN, // MENU_BUTTON_COIN
LIGHTS_BUTTON_OPERATOR // MENU_BUTTON_OPERATOR
},
{ // m_SecondaryMenuButton
LIGHTS_BUTTON_MARQUEE_UP_LEFT, // MENU_BUTTON_LEFT
LIGHTS_BUTTON_MARQUEE_UP_RIGHT, // MENU_BUTTON_RIGHT
LIGHTS_BUTTON_MARQUEE_LR_LEFT, // MENU_BUTTON_UP
LIGHTS_BUTTON_MARQUEE_LR_RIGHT, // MENU_BUTTON_DOWN
LIGHTS_BUTTON_START, // MENU_BUTTON_START
LIGHTS_BUTTON_BACK, // MENU_BUTTON_BACK
LIGHTS_BUTTON_COIN, // MENU_BUTTON_COIN
LIGHTS_BUTTON_OPERATOR, // MENU_BUTTON_OPERATOR
},
{ // m_iDefaultKeyboardKey
{ // PLAYER_1
SDLK_LEFT, // LIGHTS_BUTTON_MARQUEE_UP_LEFT,
SDLK_RIGHT, // LIGHTS_BUTTON_MARQUEE_UP_RIGHT,
SDLK_UP, // LIGHTS_BUTTON_MARQUEE_LR_LEFT,
SDLK_DOWN, // LIGHTS_BUTTON_MARQUEE_LR_RIGHT,
-1, //no default key // LIGHTS_BUTTON_BUTTONS_LEFT,
-1, //no default key // LIGHTS_BUTTON_BUTTONS_RIGHT,
-1, //no default key // LIGHTS_BUTTON_BASS_LEFT,
-1, //no default key // LIGHTS_BUTTON_BASS_RIGHT,
SDLK_RETURN, // LIGHTS_BUTTON_START,
SDLK_ESCAPE, // LIGHTS_BUTTON_BACK
SDLK_DELETE, // LIGHTS_BUTTON_MENULEFT
SDLK_PAGEDOWN, // LIGHTS_BUTTON_MENURIGHT
SDLK_HOME, // LIGHTS_BUTTON_MENUUP
SDLK_END, // LIGHTS_BUTTON_MENUDOWN
SDLK_F1, // LIGHTS_BUTTON_COIN
SDLK_SCROLLOCK // LIGHTS_BUTTON_OPERATOR
},
{ // PLAYER_2
SDLK_KP4, // LIGHTS_BUTTON_MARQUEE_UP_LEFT,
SDLK_KP6, // LIGHTS_BUTTON_MARQUEE_UP_RIGHT,
SDLK_KP8, // LIGHTS_BUTTON_MARQUEE_LR_LEFT,
SDLK_KP2, // LIGHTS_BUTTON_MARQUEE_LR_RIGHT,
SDLK_KP7, // LIGHTS_BUTTON_BUTTONS_LEFT,
SDLK_KP9, // LIGHTS_BUTTON_BUTTONS_RIGHT,
-1, //no default key // LIGHTS_BUTTON_BASS_LEFT,
-1, //no default key // LIGHTS_BUTTON_BASS_RIGHT,
SDLK_KP_ENTER, // LIGHTS_BUTTON_START,
SDLK_KP0, // LIGHTS_BUTTON_BACK
SDLK_KP_DIVIDE, // LIGHTS_BUTTON_MENULEFT
SDLK_KP_MULTIPLY, // LIGHTS_BUTTON_MENURIGHT
SDLK_KP_MINUS, // LIGHTS_BUTTON_MENUUP
SDLK_KP_PLUS, // LIGHTS_BUTTON_MENUDOWN
-1, // LIGHTS_BUTTON_COIN
-1 // LIGHTS_BUTTON_OPERATOR
},
}
},
}; };
StyleDef g_StyleDefs[NUM_STYLES] = StyleDef g_StyleDefs[NUM_STYLES] =
@@ -2185,6 +2287,41 @@ StyleDef g_StyleDefs[NUM_STYLES] =
0,1,2,3,4,5,6,7,8 0,1,2,3,4,5,6,7,8
}, },
}, },
{ // STYLE_LIGHTS_CABINET
GAME_LIGHTS, // m_Game
true, // m_bUsedForGameplay
true, // m_bUsedForEdit
"cabinet", // m_szName
STEPS_TYPE_LIGHTS_CABINET, // m_StepsType
StyleDef::ONE_PLAYER_ONE_CREDIT, // m_StyleType
{ 320, 320 }, // m_iCenterX
NUM_CABINET_LIGHTS, // m_iColsPerPlayer
{ // m_ColumnInfo[NUM_PLAYERS][MAX_COLS_PER_PLAYER];
{ // PLAYER_1
{ TRACK_1, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_UP_LEFT, -DANCE_COL_SPACING*3.5f },
{ TRACK_2, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_UP_RIGHT, -DANCE_COL_SPACING*2.5f },
{ TRACK_3, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_LR_LEFT, -DANCE_COL_SPACING*1.5f },
{ TRACK_4, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_LR_RIGHT, -DANCE_COL_SPACING*0.5f },
{ TRACK_5, GAME_CONTROLLER_2, LIGHTS_BUTTON_BUTTONS_LEFT, +DANCE_COL_SPACING*0.5f },
{ TRACK_6, GAME_CONTROLLER_2, LIGHTS_BUTTON_BUTTONS_RIGHT, +DANCE_COL_SPACING*1.5f },
{ TRACK_7, GAME_CONTROLLER_2, LIGHTS_BUTTON_BASS_LEFT, +DANCE_COL_SPACING*2.5f },
{ TRACK_8, GAME_CONTROLLER_2, LIGHTS_BUTTON_BASS_RIGHT, +DANCE_COL_SPACING*3.5f },
},
{ // PLAYER_2
{ TRACK_1, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_UP_LEFT, -DANCE_COL_SPACING*3.5f },
{ TRACK_2, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_UP_RIGHT, -DANCE_COL_SPACING*2.5f },
{ TRACK_3, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_LR_LEFT, -DANCE_COL_SPACING*1.5f },
{ TRACK_4, GAME_CONTROLLER_1, LIGHTS_BUTTON_MARQUEE_LR_RIGHT, -DANCE_COL_SPACING*0.5f },
{ TRACK_5, GAME_CONTROLLER_2, LIGHTS_BUTTON_BUTTONS_LEFT, +DANCE_COL_SPACING*0.5f },
{ TRACK_6, GAME_CONTROLLER_2, LIGHTS_BUTTON_BUTTONS_RIGHT, +DANCE_COL_SPACING*1.5f },
{ TRACK_7, GAME_CONTROLLER_2, LIGHTS_BUTTON_BASS_LEFT, +DANCE_COL_SPACING*2.5f },
{ TRACK_8, GAME_CONTROLLER_2, LIGHTS_BUTTON_BASS_RIGHT, +DANCE_COL_SPACING*3.5f },
},
},
{ // m_iColumnDrawOrder[MAX_COLS_PER_PLAYER];
0,1,2,3,4,5,6,7
},
},
}; };
+15 -23
View File
@@ -54,8 +54,7 @@ LightsManager::LightsManager(CString sDriver)
m_pDriver = MakeLightsDriver(sDriver); m_pDriver = MakeLightsDriver(sDriver);
m_fSecsLeftInMarqueeBlink = 0; ZERO( m_fSecsLeftInBlink );
m_fSecsLeftInBassBlink = 0;
} }
LightsManager::~LightsManager() LightsManager::~LightsManager()
@@ -65,14 +64,19 @@ LightsManager::~LightsManager()
void LightsManager::Update( float fDeltaTime ) void LightsManager::Update( float fDeltaTime )
{ {
m_fSecsLeftInMarqueeBlink = max( 0, m_fSecsLeftInMarqueeBlink - fDeltaTime ); // update lights falloff
m_fSecsLeftInBassBlink = max( 0, m_fSecsLeftInBassBlink - fDeltaTime ); {
FOREACH_CabinetLight( cl )
m_fSecsLeftInBlink[cl] = max( 0, m_fSecsLeftInBlink[cl] - fDeltaTime );
}
// //
// Update cabinet lights // Set new lights state cabinet lights
// //
{
FOREACH_CabinetLight( cl ) FOREACH_CabinetLight( cl )
m_LightsState.m_bCabinetLights[cl] = false; m_LightsState.m_bCabinetLights[cl] = false;
}
switch( m_LightsMode ) switch( m_LightsMode )
{ {
@@ -147,17 +151,10 @@ void LightsManager::Update( float fDeltaTime )
bool bAllMarqueeLightsOn = !GAMESTATE->m_bPastHereWeGo; bool bAllMarqueeLightsOn = !GAMESTATE->m_bPastHereWeGo;
bool bOn; {
FOREACH_CabinetLight( cl )
bOn = bAllMarqueeLightsOn || (m_fSecsLeftInMarqueeBlink > 0); m_LightsState.m_bCabinetLights[cl] = m_fSecsLeftInBlink[cl] > 0 ;
m_LightsState.m_bCabinetLights[LIGHT_MARQUEE_UP_LEFT] = bOn; }
m_LightsState.m_bCabinetLights[LIGHT_MARQUEE_UP_RIGHT] = bOn;
m_LightsState.m_bCabinetLights[LIGHT_MARQUEE_LR_LEFT] = bOn;
m_LightsState.m_bCabinetLights[LIGHT_MARQUEE_LR_RIGHT] = bOn;
bOn = m_fSecsLeftInBassBlink > 0;
m_LightsState.m_bCabinetLights[LIGHT_BASS_LEFT] = bOn;
m_LightsState.m_bCabinetLights[LIGHT_BASS_RIGHT] = bOn;
} }
break; break;
case LIGHTSMODE_STAGE: case LIGHTSMODE_STAGE:
@@ -264,14 +261,9 @@ void LightsManager::Update( float fDeltaTime )
m_pDriver->Set( &m_LightsState ); m_pDriver->Set( &m_LightsState );
} }
void LightsManager::GameplayBlinkMarqueeLights() void LightsManager::GameplayBlinkLight( CabinetLight cl )
{ {
m_fSecsLeftInMarqueeBlink = 0.1f; m_fSecsLeftInBlink[cl] = LIGHTS_FALLOFF_SECONDS;
}
void LightsManager::GameplayBlinkBassLights()
{
m_fSecsLeftInBassBlink = 0.1f;
} }
void LightsManager::SetLightsMode( LightsMode lm ) void LightsManager::SetLightsMode( LightsMode lm )
+4 -4
View File
@@ -15,6 +15,8 @@
#include "GameInput.h" #include "GameInput.h"
#include "EnumHelper.h" #include "EnumHelper.h"
const float LIGHTS_FALLOFF_SECONDS = 0.1f;
enum CabinetLight enum CabinetLight
{ {
LIGHT_MARQUEE_UP_LEFT, LIGHT_MARQUEE_UP_LEFT,
@@ -60,15 +62,13 @@ public:
void Update( float fDeltaTime ); void Update( float fDeltaTime );
void GameplayBlinkMarqueeLights(); void GameplayBlinkLight( CabinetLight cl );
void GameplayBlinkBassLights();
void SetLightsMode( LightsMode lm ); void SetLightsMode( LightsMode lm );
LightsMode GetLightsMode(); LightsMode GetLightsMode();
private: private:
float m_fSecsLeftInMarqueeBlink; float m_fSecsLeftInBlink[NUM_CABINET_LIGHTS];
float m_fSecsLeftInBassBlink;
LightsDriver* m_pDriver; LightsDriver* m_pDriver;
LightsMode m_LightsMode; LightsMode m_LightsMode;
+20 -20
View File
@@ -1053,20 +1053,18 @@ void ScreenGameplay::LoadNextSong()
// //
// Load lights data // Load lights data
// //
m_MarqueeLightsNoteData.Init(); {
m_BassLightsNoteData.Init(); m_CabinetLightsNoteData.Init();
StepsType st = GAMESTATE->GetCurrentStyleDef()->m_StepsType;
ASSERT( GAMESTATE->m_pCurSong ); ASSERT( GAMESTATE->m_pCurSong );
Steps* pStepsEasy = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, DIFFICULTY_EASY, false ); vector<Steps*> vSteps;
Steps* pStepsMedium = GAMESTATE->m_pCurSong->GetStepsByDifficulty( st, DIFFICULTY_MEDIUM, false ); GAMESTATE->m_pCurSong->GetSteps( vSteps, STEPS_TYPE_LIGHTS_CABINET );
if( pStepsEasy ) pStepsEasy->GetNoteData( &m_BassLightsNoteData ); if( !vSteps.empty() )
if( pStepsMedium ) pStepsMedium->GetNoteData( &m_MarqueeLightsNoteData ); vSteps[0]->GetNoteData( &m_CabinetLightsNoteData );
// optimization: collapse to one and free unused tracks // Convert to 4s so that we can check if we're inside a hold with just
NoteDataUtil::CollapseToOne(m_BassLightsNoteData); // GetTapNote().
m_BassLightsNoteData.SetNumTracks(1); m_CabinetLightsNoteData.ConvertHoldNotesTo4s();
NoteDataUtil::CollapseToOne(m_MarqueeLightsNoteData); }
m_MarqueeLightsNoteData.SetNumTracks(1);
} }
float ScreenGameplay::StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic) float ScreenGameplay::StartPlayingSong(float MinTimeToNotes, float MinTimeToMusic)
@@ -1402,11 +1400,12 @@ void ScreenGameplay::Update( float fDeltaTime )
// //
// update lights // update lights
// //
bool bBlinkMarqueeLights = false; bool bBlink[NUM_CABINET_LIGHTS];
ZERO( bBlink );
bool bBlinkBassLights = false; bool bBlinkBassLights = false;
bool bCrossedABeat = false; bool bCrossedABeat = false;
{ {
float fPositionSeconds = GAMESTATE->m_fMusicSeconds - 0.05f; // trigger the light a tiny bit early float fPositionSeconds = GAMESTATE->m_fMusicSeconds - LIGHTS_FALLOFF_SECONDS/2; // trigger the light a tiny bit early
fPositionSeconds += (SOUND->GetPlayLatency()) * GAMESTATE->m_SongOptions.m_fMusicRate; fPositionSeconds += (SOUND->GetPlayLatency()) * GAMESTATE->m_SongOptions.m_fMusicRate;
float fSongBeat = GAMESTATE->m_pCurSong->GetBeatFromElapsedTime( fPositionSeconds ); float fSongBeat = GAMESTATE->m_pCurSong->GetBeatFromElapsedTime( fPositionSeconds );
@@ -1421,8 +1420,8 @@ void ScreenGameplay::Update( float fDeltaTime )
for( int r=iRowLastCrossed+1; r<=iRowNow; r++ ) // for each index we crossed since the last update for( int r=iRowLastCrossed+1; r<=iRowNow; r++ ) // for each index we crossed since the last update
{ {
bBlinkMarqueeLights |= m_MarqueeLightsNoteData.IsThereATapOrHoldHeadAtRow( r ); FOREACH_CabinetLight( cl )
bBlinkBassLights |= m_BassLightsNoteData.IsThereATapOrHoldHeadAtRow( r ); bBlink[cl] |= (m_CabinetLightsNoteData.GetTapNote( cl, r ) != TAP_EMPTY);
} }
iRowLastCrossed = iRowNow; iRowLastCrossed = iRowNow;
@@ -1430,10 +1429,11 @@ void ScreenGameplay::Update( float fDeltaTime )
bool bOverrideBlink = (GAMESTATE->m_fSongBeat < GAMESTATE->m_pCurSong->m_fFirstBeat) && bCrossedABeat; bool bOverrideBlink = (GAMESTATE->m_fSongBeat < GAMESTATE->m_pCurSong->m_fFirstBeat) && bCrossedABeat;
if( bOverrideBlink || bBlinkMarqueeLights ) FOREACH_CabinetLight( cl )
LIGHTSMAN->GameplayBlinkMarqueeLights(); {
if( bOverrideBlink || bBlinkBassLights ) if( bOverrideBlink || bBlink[cl] )
LIGHTSMAN->GameplayBlinkBassLights(); LIGHTSMAN->GameplayBlinkLight( cl );
}
// //
// update song position meter // update song position meter
+1 -2
View File
@@ -180,8 +180,7 @@ protected:
BeginnerHelper m_BeginnerHelper; BeginnerHelper m_BeginnerHelper;
NoteData m_MarqueeLightsNoteData; NoteData m_CabinetLightsNoteData;
NoteData m_BassLightsNoteData;
}; };
+9 -7
View File
@@ -867,23 +867,25 @@ void Song::GetSteps( vector<Steps*>& arrayAddTo, StepsType nt, Difficulty dc, in
if( !Max ) if( !Max )
break; break;
if( nt != STEPS_TYPE_INVALID && m_apNotes[i]->m_StepsType != nt ) Steps* pSteps = m_apNotes[i];
if( nt != STEPS_TYPE_INVALID && pSteps->m_StepsType != nt )
continue; continue;
if( dc != DIFFICULTY_INVALID && dc != m_apNotes[i]->GetDifficulty() ) if( dc != DIFFICULTY_INVALID && dc != pSteps->GetDifficulty() )
continue; continue;
if( iMeterLow != -1 && iMeterLow > m_apNotes[i]->GetMeter() ) if( iMeterLow != -1 && iMeterLow > pSteps->GetMeter() )
continue; continue;
if( iMeterHigh != -1 && iMeterHigh < m_apNotes[i]->GetMeter() ) if( iMeterHigh != -1 && iMeterHigh < pSteps->GetMeter() )
continue; continue;
if( sDescription != "" && sDescription != m_apNotes[i]->GetDescription() ) if( sDescription != "" && sDescription != pSteps->GetDescription() )
continue; continue;
if( !bIncludeAutoGen && m_apNotes[i]->IsAutogen() ) if( !bIncludeAutoGen && pSteps->IsAutogen() )
continue; continue;
if( Max != -1 ) if( Max != -1 )
--Max; --Max;
arrayAddTo.push_back( m_apNotes[i] ); arrayAddTo.push_back( pSteps );
} }
} }
+1
View File
@@ -46,6 +46,7 @@ enum Style
STYLE_TECHNO_SINGLE8, STYLE_TECHNO_SINGLE8,
STYLE_PNM_FIVE, STYLE_PNM_FIVE,
STYLE_PNM_NINE, STYLE_PNM_NINE,
STYLE_LIGHTS_CABINET,
NUM_STYLES, // leave this at the end NUM_STYLES, // leave this at the end
STYLE_INVALID, STYLE_INVALID,
}; };