Files
itgmania212121/stepmania/src/ScreenSongOptions.cpp
T
Glenn Maynard 5ad3b0b786 Readd optional song menu.
Three options:
  yes, to go directly to it without asking.  This is faster for people who use
the song options menu frequently
  no, to skip it completely; probably useful for coin mode where the song
opts menu may be inappropriate
  ask, to ask, for people (like me) who use that menu very infrequently
but still want it available
2003-04-21 22:36:45 +00:00

140 lines
4.3 KiB
C++

#include "global.h"
/*
-----------------------------------------------------------------------------
Class: ScreenSongOptions
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenSongOptions.h"
#include "RageUtil.h"
#include "RageSoundManager.h"
#include "ScreenManager.h"
#include "GameConstantsAndTypes.h"
#include "RageLog.h"
#include "GameState.h"
#include "ThemeManager.h"
#include "PrefsManager.h"
#define PREV_SCREEN( play_mode ) THEME->GetMetric ("ScreenSongOptions","PrevScreen"+Capitalize(PlayModeToString(play_mode)))
#define NEXT_SCREEN( play_mode ) THEME->GetMetric ("ScreenSongOptions","NextScreen"+Capitalize(PlayModeToString(play_mode)))
enum {
SO_LIFE = 0,
SO_DRAIN,
SO_BAT_LIVES,
SO_FAIL,
SO_ASSIST,
SO_RATE,
SO_AUTOSYNC,
NUM_SONG_OPTIONS_LINES
};
OptionRow g_SongOptionsLines[NUM_SONG_OPTIONS_LINES] = {
OptionRow( "Life\nType", "BAR","BATTERY" ),
OptionRow( "Bar\nDrain", "NORMAL","NO RECOVER","SUDDEN DEATH" ),
OptionRow( "Bat\nLives", "1","2","3","4","5","6","7","8","9","10" ),
OptionRow( "Fail", "ARCADE","END OF SONG","OFF" ),
OptionRow( "Assist\nTick", "OFF", "ON" ),
OptionRow( "Rate", "x0.7","x0.8","x0.9","x1.0","x1.1","x1.2","x1.3","x1.4","x1.5" ),
OptionRow( "Auto\nAdjust", "OFF", "ON" ),
};
/* Get the next screen we'll go to when finished. */
CString ScreenSongOptions::GetNextScreen()
{
return NEXT_SCREEN(GAMESTATE->m_PlayMode);
}
ScreenSongOptions::ScreenSongOptions() :
ScreenOptions("ScreenSongOptions",true)
{
LOG->Trace( "ScreenSongOptions::ScreenSongOptions()" );
Init( INPUTMODE_BOTH,
g_SongOptionsLines,
NUM_SONG_OPTIONS_LINES,
false, false );
/* If we're coming in from "press start for more options", we need a different
* fade in. XXX: this is a hack */
if(PREFSMAN->m_ShowSongOptions == PrefsManager::ASK)
{
m_Menu.m_In.Load( THEME->GetPathToB("ScreenSongOptions option in") );
m_Menu.m_In.StartTransitioning();
}
}
void ScreenSongOptions::ImportOptions()
{
SongOptions &so = GAMESTATE->m_SongOptions;
m_iSelectedOption[0][SO_LIFE] = so.m_LifeType;
m_iSelectedOption[0][SO_BAT_LIVES] = so.m_iBatteryLives-1;
m_iSelectedOption[0][SO_FAIL] = so.m_FailType;
m_iSelectedOption[0][SO_ASSIST] = so.m_bAssistTick;
m_iSelectedOption[0][SO_AUTOSYNC] = so.m_bAutoSync;
if( so.m_fMusicRate == 0.7f ) m_iSelectedOption[0][SO_RATE] = 0;
else if( so.m_fMusicRate == 0.8f ) m_iSelectedOption[0][SO_RATE] = 1;
else if( so.m_fMusicRate == 0.9f ) m_iSelectedOption[0][SO_RATE] = 2;
else if( so.m_fMusicRate == 1.0f ) m_iSelectedOption[0][SO_RATE] = 3;
else if( so.m_fMusicRate == 1.1f ) m_iSelectedOption[0][SO_RATE] = 4;
else if( so.m_fMusicRate == 1.2f ) m_iSelectedOption[0][SO_RATE] = 5;
else if( so.m_fMusicRate == 1.3f ) m_iSelectedOption[0][SO_RATE] = 6;
else if( so.m_fMusicRate == 1.4f ) m_iSelectedOption[0][SO_RATE] = 7;
else if( so.m_fMusicRate == 1.5f ) m_iSelectedOption[0][SO_RATE] = 8;
else m_iSelectedOption[0][SO_RATE] = 3;
}
void ScreenSongOptions::ExportOptions()
{
SongOptions &so = GAMESTATE->m_SongOptions;
so.m_LifeType = (SongOptions::LifeType)m_iSelectedOption[0][SO_LIFE];
so.m_DrainType = (SongOptions::DrainType)m_iSelectedOption[0][SO_DRAIN];
so.m_iBatteryLives = m_iSelectedOption[0][SO_BAT_LIVES]+1;
so.m_FailType = (SongOptions::FailType)m_iSelectedOption[0][SO_FAIL];
so.m_bAssistTick = !!m_iSelectedOption[0][SO_ASSIST];
so.m_bAutoSync = !!m_iSelectedOption[0][SO_AUTOSYNC];
switch( m_iSelectedOption[0][SO_RATE] )
{
case 0: so.m_fMusicRate = 0.7f; break;
case 1: so.m_fMusicRate = 0.8f; break;
case 2: so.m_fMusicRate = 0.9f; break;
case 3: so.m_fMusicRate = 1.0f; break;
case 4: so.m_fMusicRate = 1.1f; break;
case 5: so.m_fMusicRate = 1.2f; break;
case 6: so.m_fMusicRate = 1.3f; break;
case 7: so.m_fMusicRate = 1.4f; break;
case 8: so.m_fMusicRate = 1.5f; break;
default: ASSERT( false );
}
}
void ScreenSongOptions::GoToPrevState()
{
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen( SM_None );
else
SCREENMAN->SetNewScreen( PREV_SCREEN(GAMESTATE->m_PlayMode) );
}
void ScreenSongOptions::GoToNextState()
{
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( NEXT_SCREEN(GAMESTATE->m_PlayMode) );
}