2003-06-02 11:31:13 +00:00
|
|
|
#include "global.h"
|
|
|
|
|
#include "ModeSwitcher.h"
|
|
|
|
|
#include "RageUtil.h"
|
|
|
|
|
#include "GameState.h"
|
|
|
|
|
#include "PrefsManager.h"
|
|
|
|
|
#include "SongManager.h"
|
|
|
|
|
#include "ThemeManager.h"
|
2004-06-28 07:26:00 +00:00
|
|
|
#include "Style.h"
|
2003-06-02 11:31:13 +00:00
|
|
|
#include "song.h"
|
|
|
|
|
#include "ActorUtil.h"
|
2004-06-27 06:52:49 +00:00
|
|
|
#include "GameManager.h"
|
2003-06-02 11:31:13 +00:00
|
|
|
|
|
|
|
|
#define PREVMODE_X THEME->GetMetricF("ModeSwitcher","PrevModeX")
|
|
|
|
|
#define PREVMODE_Y THEME->GetMetricF("ModeSwitcher","PrevModeY")
|
|
|
|
|
#define PREVMODE_ZOOM THEME->GetMetricF("ModeSwitcher","PrevModeZoom")
|
|
|
|
|
#define NEXTMODE_X THEME->GetMetricF("ModeSwitcher","NextModeX")
|
|
|
|
|
#define NEXTMODE_Y THEME->GetMetricF("ModeSwitcher","NextModeY")
|
|
|
|
|
#define NEXTMODE_ZOOM THEME->GetMetricF("ModeSwitcher","NextModeZoom")
|
|
|
|
|
#define NEXTICON_X THEME->GetMetricF("ModeSwitcher","NextIconX")
|
|
|
|
|
#define NEXTICON_Y THEME->GetMetricF("ModeSwitcher","NextIconY")
|
|
|
|
|
#define PREVICON_X THEME->GetMetricF("ModeSwitcher","PrevIconX")
|
|
|
|
|
#define PREVICON_Y THEME->GetMetricF("ModeSwitcher","PrevIconY")
|
|
|
|
|
#define CURRMODE_X THEME->GetMetricF("ModeSwitcher","CurrentModeX")
|
|
|
|
|
#define CURRMODE_Y THEME->GetMetricF("ModeSwitcher","CurrentModeY")
|
|
|
|
|
#define CURRMODE_ZOOM THEME->GetMetricF("ModeSwitcher","CurrentModeZoom")
|
|
|
|
|
|
|
|
|
|
ModeSwitcher::ModeSwitcher()
|
|
|
|
|
{
|
|
|
|
|
m_Nextmode.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") );
|
|
|
|
|
m_Nextmode.SetXY(NEXTMODE_X,NEXTMODE_Y);
|
|
|
|
|
m_Nextmode.SetZoom(NEXTMODE_ZOOM);
|
|
|
|
|
m_Nextmode.SetText(GetNextStyleName());
|
|
|
|
|
m_Prevmode.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") );
|
|
|
|
|
m_Prevmode.SetXY(PREVMODE_X,PREVMODE_Y);
|
|
|
|
|
m_Prevmode.SetText(GetPrevStyleName());
|
|
|
|
|
m_Prevmode.SetZoom(PREVMODE_ZOOM);
|
|
|
|
|
m_Stylename.LoadFromFont( THEME->GetPathToF("ModeSwitcher stylenames") );
|
|
|
|
|
m_Stylename.SetXY(CURRMODE_X,CURRMODE_Y);
|
|
|
|
|
m_Stylename.SetText(GetStyleName());
|
|
|
|
|
m_Stylename.SetZoom(CURRMODE_ZOOM);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m_NextIcon.Load( THEME->GetPathToG("ModeSwitcher nexticon"));
|
|
|
|
|
m_NextIcon.SetXY( NEXTICON_X, NEXTICON_Y);
|
|
|
|
|
m_PrevIcon.Load( THEME->GetPathToG("ModeSwitcher previcon"));
|
|
|
|
|
m_PrevIcon.SetXY( PREVICON_X, PREVICON_Y);
|
|
|
|
|
|
|
|
|
|
this->AddChild( &m_NextIcon );
|
|
|
|
|
this->AddChild( &m_PrevIcon );
|
|
|
|
|
|
|
|
|
|
this->AddChild(&m_Stylename);
|
|
|
|
|
this->AddChild(&m_Nextmode);
|
|
|
|
|
this->AddChild(&m_Prevmode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ModeSwitcher::~ModeSwitcher()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString ModeSwitcher::GetStyleName()
|
|
|
|
|
{
|
|
|
|
|
CString sStyleName;
|
2004-06-27 06:52:49 +00:00
|
|
|
CString sDiff[NUM_PLAYERS];
|
2003-06-02 11:31:13 +00:00
|
|
|
|
2004-06-28 07:26:00 +00:00
|
|
|
sStyleName = GAMESTATE->m_pCurStyle->m_szName;
|
2004-06-27 06:52:49 +00:00
|
|
|
sStyleName.MakeUpper();
|
2003-06-02 11:31:13 +00:00
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
FOREACH_PlayerNumber(i)
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
2004-06-27 06:52:49 +00:00
|
|
|
if( GAMESTATE->IsPlayerEnabled(i) )
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
|
|
|
|
switch(GAMESTATE->m_PreferredDifficulty[i])
|
|
|
|
|
{
|
|
|
|
|
case DIFFICULTY_BEGINNER: sDiff[i] = "Beginner\n"; break;
|
|
|
|
|
case DIFFICULTY_EASY:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Normal\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Light\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_MEDIUM:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Hard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Standard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_HARD:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Crazy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Heavy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_CHALLENGE: sDiff[i] = "Challenge\n"; break;
|
|
|
|
|
default: sDiff[i] = ""; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CString returnval;
|
|
|
|
|
returnval = sStyleName + sDiff[0] + sDiff[1];
|
|
|
|
|
return returnval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString ModeSwitcher::GetNextStyleName()
|
|
|
|
|
{
|
2004-06-27 06:52:49 +00:00
|
|
|
CString sStyleName[NUM_PLAYERS];
|
|
|
|
|
CString sDiff[NUM_PLAYERS];
|
2003-06-02 11:31:13 +00:00
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
FOREACH_PlayerNumber(i)
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
|
|
|
|
if(GAMESTATE->IsPlayerEnabled(i))
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_PreferredDifficulty[i] != DIFFICULTY_CHALLENGE)
|
|
|
|
|
{
|
2004-06-28 07:26:00 +00:00
|
|
|
sStyleName[i] = GAMESTATE->m_pCurStyle->m_szName;
|
2004-06-27 06:52:49 +00:00
|
|
|
sStyleName[i].MakeUpper();
|
2003-06-02 11:31:13 +00:00
|
|
|
|
|
|
|
|
switch(GAMESTATE->m_PreferredDifficulty[i])
|
|
|
|
|
{
|
|
|
|
|
case DIFFICULTY_BEGINNER:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Normal\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Light\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_EASY:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Hard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Standard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_MEDIUM:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Crazy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Heavy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_HARD: sDiff[i] = "Challenge\n"; break;
|
|
|
|
|
case DIFFICULTY_CHALLENGE: sDiff[i] = "Beginner\n"; break;
|
|
|
|
|
default: sDiff[i] = ""; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2004-06-28 07:26:00 +00:00
|
|
|
sStyleName[i] = GAMESTATE->m_pCurStyle->m_szName;
|
2004-06-27 06:52:49 +00:00
|
|
|
sStyleName[i].MakeUpper();
|
|
|
|
|
|
2003-06-02 11:31:13 +00:00
|
|
|
sDiff[i] = "Beginner\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sStyleName[i] = "";
|
|
|
|
|
sDiff[i] = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CString returnval;
|
|
|
|
|
returnval = sStyleName[0] + sDiff[0] + sStyleName[1] + sDiff[1];
|
|
|
|
|
return returnval;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CString ModeSwitcher::GetPrevStyleName()
|
|
|
|
|
{
|
2004-06-27 06:52:49 +00:00
|
|
|
CString sStyleName[NUM_PLAYERS];
|
|
|
|
|
CString sDiff[NUM_PLAYERS];
|
2003-06-02 11:31:13 +00:00
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
FOREACH_PlayerNumber(i)
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
|
|
|
|
if(GAMESTATE->IsPlayerEnabled(i))
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_PreferredDifficulty[i] != DIFFICULTY_BEGINNER)
|
|
|
|
|
{
|
2004-06-28 07:26:00 +00:00
|
|
|
sStyleName[i] = GAMESTATE->m_pCurStyle->m_szName;
|
2004-06-27 06:52:49 +00:00
|
|
|
sStyleName[i].MakeUpper();
|
2003-06-02 11:31:13 +00:00
|
|
|
|
|
|
|
|
switch(GAMESTATE->m_PreferredDifficulty[i])
|
|
|
|
|
{
|
|
|
|
|
case DIFFICULTY_CHALLENGE:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Crazy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Heavy\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_EASY: sDiff[i] = "Beginner\n"; break;
|
|
|
|
|
case DIFFICULTY_MEDIUM:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Normal\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Light\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_HARD:
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Hard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sDiff[i] = "Standard\n"; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
case DIFFICULTY_BEGINNER: sDiff[i] = "Challenge\n"; break;
|
|
|
|
|
default: sDiff[i] = ""; break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2004-06-28 07:26:00 +00:00
|
|
|
sStyleName[i] = GAMESTATE->m_pCurStyle->m_szName;
|
2004-06-27 06:52:49 +00:00
|
|
|
sStyleName[i].MakeUpper();
|
|
|
|
|
|
2003-06-02 11:31:13 +00:00
|
|
|
sDiff[i] = "Challenge\n";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sStyleName[i] = "";
|
|
|
|
|
sDiff[i] = "";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
CString returnval;
|
|
|
|
|
returnval = sStyleName[0] + sDiff[0] + sStyleName[1] + sDiff[1];
|
|
|
|
|
return returnval;
|
|
|
|
|
}
|
|
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
void ModeSwitcher::ChangeMode(PlayerNumber pn, int dir)
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_CurGame == GAME_PUMP)
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->IsPlayerEnabled(pn))
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->m_PreferredDifficulty[pn] != DIFFICULTY_CHALLENGE)
|
|
|
|
|
{
|
|
|
|
|
switch(GAMESTATE->m_PreferredDifficulty[pn])
|
|
|
|
|
{
|
|
|
|
|
case DIFFICULTY_BEGINNER: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_EASY; break;
|
|
|
|
|
case DIFFICULTY_EASY: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_MEDIUM; break;
|
|
|
|
|
case DIFFICULTY_MEDIUM: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_HARD; break;
|
|
|
|
|
case DIFFICULTY_HARD: GAMESTATE->m_PreferredDifficulty[pn] = DIFFICULTY_CHALLENGE; break;
|
|
|
|
|
}
|
|
|
|
|
m_Stylename.SetText(GetStyleName());
|
|
|
|
|
m_Nextmode.SetText(GetNextStyleName());
|
|
|
|
|
m_Prevmode.SetText(GetPrevStyleName());
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if(GAMESTATE->IsPlayerEnabled(PLAYER_1))
|
2004-06-27 06:52:49 +00:00
|
|
|
GAMESTATE->m_PreferredDifficulty[PLAYER_1] = DIFFICULTY_CHALLENGE;
|
2003-06-02 11:31:13 +00:00
|
|
|
if(GAMESTATE->IsPlayerEnabled(PLAYER_2))
|
2004-06-27 06:52:49 +00:00
|
|
|
GAMESTATE->m_PreferredDifficulty[PLAYER_2] = DIFFICULTY_CHALLENGE;
|
2003-06-02 11:31:13 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
// Make a list of all styles for the current Game.
|
2004-06-28 07:26:00 +00:00
|
|
|
vector<const Style*> vPossibleStyles;
|
2004-06-27 06:52:49 +00:00
|
|
|
GAMEMAN->GetStylesForGame( GAMESTATE->m_CurGame, vPossibleStyles );
|
|
|
|
|
ASSERT( !vPossibleStyles.empty() );
|
2003-06-02 11:31:13 +00:00
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
int index = 0;
|
2004-06-28 07:26:00 +00:00
|
|
|
vector<const Style*>::const_iterator iter = find(vPossibleStyles.begin(), vPossibleStyles.end(), GAMESTATE->m_pCurStyle );
|
2004-06-27 06:52:49 +00:00
|
|
|
if( iter != vPossibleStyles.end() )
|
2003-06-02 11:31:13 +00:00
|
|
|
{
|
2004-06-27 06:52:49 +00:00
|
|
|
index = iter - vPossibleStyles.begin();
|
|
|
|
|
index += dir;
|
|
|
|
|
wrap( index, vPossibleStyles.size() );
|
2003-06-02 11:31:13 +00:00
|
|
|
}
|
|
|
|
|
|
2004-06-28 07:26:00 +00:00
|
|
|
GAMESTATE->m_pCurStyle = vPossibleStyles[index];
|
2003-06-02 11:31:13 +00:00
|
|
|
}
|
|
|
|
|
m_Stylename.SetText(GetStyleName());
|
|
|
|
|
m_Nextmode.SetText(GetNextStyleName());
|
|
|
|
|
m_Prevmode.SetText(GetPrevStyleName());
|
2003-07-03 18:13:13 +00:00
|
|
|
}
|
2004-06-07 21:14:03 +00:00
|
|
|
|
2004-06-27 06:52:49 +00:00
|
|
|
|
2004-06-07 21:14:03 +00:00
|
|
|
/*
|
|
|
|
|
* (c) 2003 "Frieza"
|
|
|
|
|
* All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
|
* copy of this software and associated documentation files (the
|
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
|
* distribute, and/or sell copies of the Software, and to permit persons to
|
|
|
|
|
* whom the Software is furnished to do so, provided that the above
|
|
|
|
|
* copyright notice(s) and this permission notice appear in all copies of
|
|
|
|
|
* the Software and that both the above copyright notice(s) and this
|
|
|
|
|
* permission notice appear in supporting documentation.
|
|
|
|
|
*
|
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
|
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
|
|
|
|
|
* THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
|
|
|
|
|
* INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
|
|
|
|
|
* OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
|
|
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
|
|
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
|
|
* PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
*/
|