Files
itgmania212121/stepmania/src/ScreenAppearanceOptions.cpp
T

242 lines
7.5 KiB
C++

#include "global.h"
/*
-----------------------------------------------------------------------------
Class: ScreenAppearanceOptions
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenAppearanceOptions.h"
#include "RageTextureManager.h"
#include "RageUtil.h"
#include "RageSounds.h"
#include "ScreenManager.h"
#include "PrefsManager.h"
#include "GameConstantsAndTypes.h"
#include "StepMania.h"
#include "PrefsManager.h"
#include "RageLog.h"
#include "AnnouncerManager.h"
#include "NoteSkinManager.h"
#include "GameState.h"
#include "ThemeManager.h"
#include "SongManager.h"
enum {
AO_LANGUAGE = 0,
AO_ANNOUNCER,
AO_THEME,
AO_SKIN,
AO_INSTRUCTIONS,
AO_CAUTION,
AO_DANCE_POINTS_FOR_ONI,
AO_SELECT_GROUP,
AO_WHEEL_SECTIONS,
AO_TEN_FOOT_RED,
AO_COURSE_SORT,
AO_COURSE_MOVE_RANDOM,
AO_SHOW_TRANSLATIONS,
AO_SHOW_LYRICS,
NUM_APPEARANCE_OPTIONS_LINES
};
OptionRow g_AppearanceOptionsLines[NUM_APPEARANCE_OPTIONS_LINES] = {
OptionRow( "Language", true ),
OptionRow( "Announcer", true ),
OptionRow( "Theme", true ),
OptionRow( "Default\nNoteSkin", true ),
OptionRow( "Instructions", true, "SKIP","SHOW"),
OptionRow( "Caution", true, "SKIP","SHOW"),
OptionRow( "Oni Score\nDisplay",true, "PERCENT","DANCE POINTS"),
OptionRow( "Song\nGroup", true, "ALL MUSIC","CHOOSE"),
OptionRow( "Wheel\nSections", true, "NEVER","ALWAYS", "ABC ONLY"),
OptionRow( "10+ foot\nIn Red", true, "NO", "YES"),
OptionRow( "Course\nSort", true, "# SONGS", "AVG FEET", "TOTAL FEET", "RANKING"),
OptionRow( "Random\nAt End", true, "NO","YES"),
OptionRow( "Translations", true, "NATIVE","TRANSLITERATE"),
OptionRow( "Lyrics", true, "HIDE","SHOW"),
};
ScreenAppearanceOptions::ScreenAppearanceOptions() :
ScreenOptions("ScreenAppearanceOptions",false)
{
LOG->Trace( "ScreenAppearanceOptions::ScreenAppearanceOptions()" );
Init(
INPUTMODE_TOGETHER,
g_AppearanceOptionsLines,
NUM_APPEARANCE_OPTIONS_LINES,
true );
m_Menu.m_MenuTimer.Disable();
SOUND->PlayMusic( THEME->GetPathToS("ScreenAppearanceOptions music") );
}
void ScreenAppearanceOptions::ImportOptions()
{
unsigned i;
//
// fill in language names
//
CStringArray arrayLanguages;
THEME->GetLanguages( arrayLanguages );
m_OptionRow[AO_LANGUAGE].choices.clear();
for( i=0; i<arrayLanguages.size(); i++ )
{
m_OptionRow[AO_LANGUAGE].choices.push_back( arrayLanguages[i] );
}
// highlight currently selected announcer
m_iSelectedOption[0][AO_LANGUAGE] = 0;
for( i=1; i<m_OptionRow[AO_LANGUAGE].choices.size(); i++ )
if( 0==stricmp(m_OptionRow[AO_LANGUAGE].choices[i], THEME->GetCurLanguage()) )
m_iSelectedOption[0][AO_LANGUAGE] = i;
//
// fill in announcer names
//
CStringArray arrayAnnouncerNames;
ANNOUNCER->GetAnnouncerNames( arrayAnnouncerNames );
m_OptionRow[AO_ANNOUNCER].choices.clear();
m_OptionRow[AO_ANNOUNCER].choices.push_back( "OFF" );
for( i=0; i<arrayAnnouncerNames.size(); i++ )
{
m_OptionRow[AO_ANNOUNCER].choices.push_back( arrayAnnouncerNames[i] );
}
// highlight currently selected announcer
m_iSelectedOption[0][AO_ANNOUNCER] = 0;
for( i=1; i<m_OptionRow[AO_ANNOUNCER].choices.size(); i++ )
if( 0==stricmp(m_OptionRow[AO_ANNOUNCER].choices[i], ANNOUNCER->GetCurAnnouncerName()) )
m_iSelectedOption[0][AO_ANNOUNCER] = i;
//
// fill in theme names
//
CStringArray arrayThemeNames;
THEME->GetThemeNames( arrayThemeNames );
m_OptionRow[AO_THEME].choices.clear();
for( i=0; i<arrayThemeNames.size(); i++ )
{
m_OptionRow[AO_THEME].choices.push_back( arrayThemeNames[i] );
}
// highlight currently selected theme
m_iSelectedOption[0][AO_THEME] = 0;
for( i=0; i<m_OptionRow[AO_THEME].choices.size(); i++ )
if( 0==stricmp(m_OptionRow[AO_THEME].choices[i], THEME->GetCurThemeName()) )
m_iSelectedOption[0][AO_THEME] = i;
//
// fill in skin names
//
CStringArray arraySkinNames;
NOTESKIN->GetNoteSkinNames( arraySkinNames );
m_OptionRow[AO_SKIN].choices.clear();
for( i=0; i<arraySkinNames.size(); i++ )
{
arraySkinNames[i].MakeUpper();
m_OptionRow[AO_SKIN].choices.push_back( arraySkinNames[i] );
}
// highlight currently selected skin
PlayerOptions po;
po.FromString( PREFSMAN->m_sDefaultModifiers );
m_iSelectedOption[0][AO_SKIN] = 0;
for( i=0; i<m_OptionRow[AO_SKIN].choices.size(); i++ )
if( 0==stricmp(m_OptionRow[AO_SKIN].choices[i], po.m_sNoteSkin) )
m_iSelectedOption[0][AO_SKIN] = i;
m_iSelectedOption[0][AO_INSTRUCTIONS] = PREFSMAN->m_bInstructions? 1:0;
m_iSelectedOption[0][AO_CAUTION] = PREFSMAN->m_bShowDontDie? 1:0;
m_iSelectedOption[0][AO_DANCE_POINTS_FOR_ONI] = PREFSMAN->m_bDancePointsForOni? 1:0;
m_iSelectedOption[0][AO_SELECT_GROUP] = PREFSMAN->m_bShowSelectGroup? 1:0;
m_iSelectedOption[0][AO_WHEEL_SECTIONS] = (int)PREFSMAN->m_MusicWheelUsesSections;
m_iSelectedOption[0][AO_TEN_FOOT_RED] = PREFSMAN->m_bTenFooterInRed? 1:0;
m_iSelectedOption[0][AO_COURSE_SORT] = (int)PREFSMAN->m_iCourseSortOrder;
m_iSelectedOption[0][AO_COURSE_MOVE_RANDOM] = PREFSMAN->m_bMoveRandomToEnd? 1:0;
m_iSelectedOption[0][AO_SHOW_TRANSLATIONS] = PREFSMAN->m_bShowNative? 0:1;
m_iSelectedOption[0][AO_SHOW_LYRICS] = PREFSMAN->m_bShowLyrics;
}
void ScreenAppearanceOptions::ExportOptions()
{
PREFSMAN->SaveGamePrefsToDisk();
PREFSMAN->SaveGlobalPrefsToDisk();
int iSelectedAnnouncer = m_iSelectedOption[0][AO_ANNOUNCER];
CString sNewAnnouncer = m_OptionRow[AO_ANNOUNCER].choices[iSelectedAnnouncer];
if( iSelectedAnnouncer == 0 )
sNewAnnouncer = "";
ANNOUNCER->SwitchAnnouncer( sNewAnnouncer );
int iSelectedTheme = m_iSelectedOption[0][AO_THEME];
CString sNewTheme = m_OptionRow[AO_THEME].choices[iSelectedTheme];
if( THEME->GetCurThemeName() != sNewTheme )
{
THEME->SwitchThemeAndLanguage( sNewTheme, THEME->GetCurLanguage() );
ApplyGraphicOptions(); // reset graphics to apply new window title and icon
SONGMAN->UpdateRankingCourses(); // update ranking courses
}
TEXTUREMAN->DoDelayedDelete(); // delete all textures that don't have references
int iSelectedSkin = m_iSelectedOption[0][AO_SKIN];
CString sNewSkin = m_OptionRow[AO_SKIN].choices[iSelectedSkin];
CString sModifiers = PREFSMAN->m_sDefaultModifiers;
PlayerOptions po;
po.FromString( sModifiers );
SongOptions so;
so.FromString( sModifiers );
po.m_sNoteSkin = sNewSkin;
CStringArray as;
if( po.GetString() != "" )
as.push_back( po.GetString() );
if( so.GetString() != "" )
as.push_back( so.GetString() );
PREFSMAN->m_sDefaultModifiers = join(", ",as);
PREFSMAN->m_bInstructions = !!m_iSelectedOption[0][AO_INSTRUCTIONS];
PREFSMAN->m_bShowDontDie = !!m_iSelectedOption[0][AO_CAUTION];
PREFSMAN->m_bShowSelectGroup = !!m_iSelectedOption[0][AO_SELECT_GROUP];
(int&)PREFSMAN->m_MusicWheelUsesSections = m_iSelectedOption[0][AO_WHEEL_SECTIONS];
PREFSMAN->m_bShowNative = !m_iSelectedOption[0][AO_SHOW_TRANSLATIONS];
PREFSMAN->m_bShowLyrics = !!m_iSelectedOption[0][AO_SHOW_LYRICS];
PREFSMAN->m_bDancePointsForOni = !!m_iSelectedOption[0][AO_DANCE_POINTS_FOR_ONI];
PREFSMAN->m_bTenFooterInRed = !!m_iSelectedOption[0][AO_TEN_FOOT_RED];
(int&)PREFSMAN->m_iCourseSortOrder = m_iSelectedOption[0][AO_COURSE_SORT];
PREFSMAN->m_bMoveRandomToEnd = !!m_iSelectedOption[0][AO_COURSE_MOVE_RANDOM];
PREFSMAN->SaveGamePrefsToDisk();
PREFSMAN->SaveGlobalPrefsToDisk();
}
void ScreenAppearanceOptions::GoToPrevState()
{
SCREENMAN->SetNewScreen( "ScreenOptionsMenu" );
}
void ScreenAppearanceOptions::GoToNextState()
{
PREFSMAN->SaveGamePrefsToDisk();
GoToPrevState();
}