2003-02-16 04:01:45 +00:00
|
|
|
#include "global.h"
|
2002-09-29 18:09:38 +00:00
|
|
|
/****************************************
|
2003-04-22 14:32:48 +00:00
|
|
|
ScreenSelectMode.cpp
|
2002-09-29 18:09:38 +00:00
|
|
|
Desc: See Header
|
|
|
|
|
Copyright (C):
|
|
|
|
|
Andrew Livy
|
2002-10-06 00:07:09 +00:00
|
|
|
Chris Danford
|
2002-09-29 18:09:38 +00:00
|
|
|
*****************************************/
|
|
|
|
|
|
|
|
|
|
/* Includes */
|
|
|
|
|
|
|
|
|
|
#include "ScreenSelectMode.h"
|
|
|
|
|
#include "ScreenManager.h"
|
|
|
|
|
#include "PrefsManager.h"
|
2003-01-02 07:54:28 +00:00
|
|
|
#include "RageSoundManager.h"
|
2002-09-29 18:09:38 +00:00
|
|
|
#include "GameConstantsAndTypes.h"
|
|
|
|
|
#include "PrefsManager.h"
|
|
|
|
|
#include "GameManager.h"
|
|
|
|
|
#include "RageLog.h"
|
|
|
|
|
#include "AnnouncerManager.h"
|
|
|
|
|
#include "GameState.h"
|
|
|
|
|
#include "RageException.h"
|
|
|
|
|
#include "RageTimer.h"
|
|
|
|
|
#include "GameState.h"
|
2002-11-11 04:53:31 +00:00
|
|
|
#include "ThemeManager.h"
|
2002-09-29 18:09:38 +00:00
|
|
|
|
|
|
|
|
/* Constants */
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
#define ELEM_SPACING THEME->GetMetricI("ScreenSelectMode","ElementSpacing")
|
|
|
|
|
#define INCLUDE_DOUBLE_IN_JP THEME->GetMetricI("ScreenSelectMode","IncludeDoubleInJointPremium")
|
|
|
|
|
#define SCROLLING_LIST_X THEME->GetMetricI("ScreenSelectMode","ScrollingListX")
|
|
|
|
|
#define SCROLLING_LIST_Y THEME->GetMetricI("ScreenSelectMode","ScrollingListY")
|
|
|
|
|
#define GUIDE_X THEME->GetMetricF("ScreenSelectMode", "GuideX")
|
|
|
|
|
#define GUIDE_Y THEME->GetMetricF("ScreenSelectMode", "GuideY")
|
2002-09-29 18:09:38 +00:00
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
|
ScreenSelectMode (Constructor)
|
|
|
|
|
Desc: Sets up the screen display
|
|
|
|
|
************************************/
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
ScreenSelectMode::ScreenSelectMode() : ScreenSelect( "ScreenSelectMode" )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-04-12 17:39:27 +00:00
|
|
|
m_ChoiceListFrame.Load( THEME->GetPathToG("ScreenSelectMode list frame"));
|
2002-09-30 16:57:34 +00:00
|
|
|
m_ChoiceListFrame.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y);
|
|
|
|
|
this->AddChild( &m_ChoiceListFrame );
|
2002-09-29 18:09:38 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
m_soundModeChange.Load( THEME->GetPathToS("ScreenSelectMode modechange"));
|
|
|
|
|
unsigned i;
|
|
|
|
|
for( i=0; i<m_aModeChoices.size(); i++ )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
const ModeChoice& mc = m_aModeChoices[i];
|
2002-09-30 16:57:34 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
//
|
|
|
|
|
// Load Sprite
|
|
|
|
|
//
|
|
|
|
|
CString sElementName = ssprintf("ScreenSelectMode %s", mc.name );
|
|
|
|
|
CString sElementPath = THEME->GetPathToG(sElementName);
|
2002-09-30 16:57:34 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
arrayLocations.push_back( sElementPath );
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
// m_ScrollingList.UseSpriteType(BANNERTYPE);
|
|
|
|
|
m_ScrollingList.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y );
|
|
|
|
|
m_ScrollingList.SetSpacing( ELEM_SPACING );
|
|
|
|
|
this->AddChild( &m_ScrollingList );
|
2002-09-29 18:09:38 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
m_ChoiceListHighlight.Load( THEME->GetPathToG("ScreenSelectMode list highlight"));
|
|
|
|
|
m_ChoiceListHighlight.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y );
|
|
|
|
|
this->AddChild(&m_ChoiceListHighlight);
|
2002-12-21 20:33:10 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
m_Guide.Load( THEME->GetPathToG("select mode guide"));
|
|
|
|
|
m_Guide.SetXY( GUIDE_X, GUIDE_Y );
|
|
|
|
|
this->AddChild( &m_Guide );
|
2002-12-21 20:33:10 +00:00
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
UpdateSelectableChoices();
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/************************************
|
|
|
|
|
~ScreenSelectMode (Destructor)
|
|
|
|
|
Desc: Writes line to log when screen
|
|
|
|
|
is terminated.
|
|
|
|
|
************************************/
|
|
|
|
|
ScreenSelectMode::~ScreenSelectMode()
|
|
|
|
|
{
|
|
|
|
|
LOG->Trace( "ScreenSelectMode::~ScreenSelectMode()" );
|
|
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
void ScreenSelectMode::MenuLeft( PlayerNumber pn )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
m_ScrollingList.Left();
|
|
|
|
|
m_soundModeChange.Play();
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
void ScreenSelectMode::MenuRight( PlayerNumber pn )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
m_ScrollingList.Right();
|
|
|
|
|
m_soundModeChange.Play();
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
void ScreenSelectMode::UpdateSelectableChoices()
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
CStringArray GraphicPaths;
|
|
|
|
|
m_iNumChoices = 0;
|
|
|
|
|
unsigned i=0;
|
|
|
|
|
unsigned j=0;
|
|
|
|
|
for( i=0; i<m_aModeChoices.size(); i++ )
|
2002-12-21 20:33:10 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
const ModeChoice& mc = m_aModeChoices[i];
|
|
|
|
|
CString modename = mc.name;
|
|
|
|
|
modename.MakeUpper();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// if its joint premium and inclusive of double consider double and versus as needing another coin
|
|
|
|
|
// if its joint premium and non-inclusive of double consider double as appearing only when one player is available.
|
|
|
|
|
// if its joint premium, everythings available for play
|
|
|
|
|
if(
|
|
|
|
|
(PREFSMAN->m_bJointPremium && INCLUDE_DOUBLE_IN_JP == 1 && ((GAMESTATE->GetNumSidesJoined() == 1 && mc.numSidesJoinedToPlay == 1) || (GAMESTATE->GetNumSidesJoined() == 2 && mc.numSidesJoinedToPlay == 2))) ||
|
|
|
|
|
(PREFSMAN->m_bJointPremium && INCLUDE_DOUBLE_IN_JP == 0 &&
|
|
|
|
|
((modename.substr(0, 6) == "DOUBLE" && GAMESTATE->GetNumSidesJoined() != 2 ) || GAMESTATE->GetNumSidesJoined() == 1 && mc.numSidesJoinedToPlay == 1) ||
|
|
|
|
|
(modename.substr(0, 6) != "DOUBLE" && GAMESTATE->GetNumSidesJoined() == 2 && mc.numSidesJoinedToPlay == 2)) ||
|
|
|
|
|
(!PREFSMAN->m_bJointPremium)
|
|
|
|
|
)
|
2002-12-21 20:33:10 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
m_iNumChoices++;
|
|
|
|
|
if(j<=MAX_ELEMS)
|
2002-12-21 20:33:10 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
m_iSelectableChoices[j] = i;
|
|
|
|
|
j++;
|
2002-12-21 20:33:10 +00:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
ASSERT(0); // too many choices, can't track them all. Quick Fix: If You Get This Just Increase MAX_ELEMS
|
2002-12-21 20:33:10 +00:00
|
|
|
}
|
2003-05-01 23:40:12 +00:00
|
|
|
GraphicPaths.push_back(arrayLocations[i]);
|
2002-12-21 20:33:10 +00:00
|
|
|
}
|
|
|
|
|
}
|
2003-05-01 23:40:12 +00:00
|
|
|
m_ScrollingList.Unload();
|
|
|
|
|
m_ScrollingList.Load(GraphicPaths);
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ScreenSelectMode::MenuStart( PlayerNumber pn )
|
|
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
SCREENMAN->PostMessageToTopScreen( SM_AllDoneChoosing, 0 );
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
int ScreenSelectMode::GetSelectionIndex( PlayerNumber pn )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
return m_iSelectableChoices[m_ScrollingList.GetSelection()];
|
2002-09-29 18:09:38 +00:00
|
|
|
}
|
|
|
|
|
|
2003-05-01 23:40:12 +00:00
|
|
|
void ScreenSelectMode::Update( float fDelta )
|
2002-09-29 18:09:38 +00:00
|
|
|
{
|
2003-05-01 23:40:12 +00:00
|
|
|
ScreenSelect::Update( fDelta );
|
|
|
|
|
}
|