Files
itgmania212121/stepmania/src/ScreenPlayerOptions.cpp
T

269 lines
9.4 KiB
C++
Raw Normal View History

2003-02-16 04:01:45 +00:00
#include "global.h"
2002-05-20 08:59:37 +00:00
/*
-----------------------------------------------------------------------------
Class: ScreenPlayerOptions
2002-05-20 08:59:37 +00:00
Desc: Select a song.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
2002-05-20 08:59:37 +00:00
-----------------------------------------------------------------------------
*/
#include "ScreenPlayerOptions.h"
#include "RageUtil.h"
#include "ScreenManager.h"
#include "RageLog.h"
2002-07-23 01:41:40 +00:00
#include "GameState.h"
#include "ThemeManager.h"
#include "AnnouncerManager.h"
2003-02-17 12:19:42 +00:00
#include "NoteSkinManager.h"
2003-04-18 02:13:23 +00:00
#include "NoteFieldPositioning.h"
2002-05-20 08:59:37 +00:00
#define PREV_SCREEN( play_mode ) THEME->GetMetric ("ScreenPlayerOptions","PrevScreen"+Capitalize(PlayModeToString(play_mode)))
#define NEXT_SCREEN( play_mode ) THEME->GetMetric ("ScreenPlayerOptions","NextScreen"+Capitalize(PlayModeToString(play_mode)))
2002-05-20 08:59:37 +00:00
enum {
PO_SPEED = 0,
2003-01-25 11:05:12 +00:00
PO_ACCEL,
2002-05-20 08:59:37 +00:00
PO_EFFECT,
PO_APPEAR,
PO_TURN,
PO_TRANSFORM,
2002-05-20 08:59:37 +00:00
PO_SCROLL,
2003-02-17 12:19:42 +00:00
PO_NOTE_SKIN,
2002-05-27 08:23:27 +00:00
PO_HOLD_NOTES,
PO_OTHER,
2003-04-01 19:31:27 +00:00
PO_PERSPECTIVE,
2002-05-20 08:59:37 +00:00
NUM_PLAYER_OPTIONS_LINES
};
OptionRow g_PlayerOptionsLines[NUM_PLAYER_OPTIONS_LINES] = {
OptionRow( "Speed", "x0.25","x0.5","x0.75","x1","x1.5","x2","x3","x4","x5","x8","x12" ),
2003-04-01 19:31:27 +00:00
OptionRow( "Acceler\n-ation", "OFF","BOOST","BRAKE","WAVE","EXPAND","BOOMERANG" ),
OptionRow( "Effect", "OFF","DRUNK","DIZZY","MINI","FLIP","TORNADO" ),
OptionRow( "Appear\n-ance", "VISIBLE","HIDDEN","SUDDEN","STEALTH","BLINK" ),
OptionRow( "Turn", "OFF","MIRROR","LEFT","RIGHT","SHUFFLE","SUPER SHUFFLE" ),
OptionRow( "Trans\n-form", "OFF","LITTLE","WIDE","BIG","QUICK","SKIPPY" ),
OptionRow( "Scroll", "STANDARD","REVERSE" ),
OptionRow( "Note\nSkin", "" ),
OptionRow( "Holds", "OFF","ON" ),
2003-04-17 21:44:33 +00:00
OptionRow( "Other", "OFF","DARK","TIME SPACING" ),
2003-04-18 02:13:23 +00:00
OptionRow( "Perspec\n-tive", "" ),
2002-05-20 08:59:37 +00:00
};
ScreenPlayerOptions::ScreenPlayerOptions() :
2003-03-09 00:55:49 +00:00
ScreenOptions("ScreenPlayerOptions",true)
2002-05-20 08:59:37 +00:00
{
LOG->Trace( "ScreenPlayerOptions::ScreenPlayerOptions()" );
2002-05-20 08:59:37 +00:00
Init(
INPUTMODE_PLAYERS,
2002-05-20 08:59:37 +00:00
g_PlayerOptionsLines,
NUM_PLAYER_OPTIONS_LINES,
true, false );
2002-08-01 05:11:11 +00:00
2003-01-02 08:13:34 +00:00
SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("player options intro") );
2002-05-20 08:59:37 +00:00
}
void ScreenPlayerOptions::ImportOptions()
{
2003-02-17 12:19:42 +00:00
//
// fill in skin names
//
CStringArray arraySkinNames;
NOTESKIN->GetNoteSkinNames( arraySkinNames );
m_OptionRow[PO_NOTE_SKIN].choices.clear();
2003-02-17 12:19:42 +00:00
2003-04-18 21:32:55 +00:00
unsigned i;
for( i=0; i<arraySkinNames.size(); i++ )
2003-02-17 12:19:42 +00:00
{
arraySkinNames[i].MakeUpper();
m_OptionRow[PO_NOTE_SKIN].choices.push_back( arraySkinNames[i] );
2003-02-17 12:19:42 +00:00
}
2003-04-18 02:13:23 +00:00
m_OptionRow[PO_PERSPECTIVE].choices.clear();
m_OptionRow[PO_PERSPECTIVE].choices.push_back( "INCOMING" );
m_OptionRow[PO_PERSPECTIVE].choices.push_back( "OVERHEAD" );
m_OptionRow[PO_PERSPECTIVE].choices.push_back( "SPACE" );
CStringArray arrayPosNames;
GAMESTATE->m_Position->GetNamesForCurrentGame(arrayPosNames);
2003-04-18 21:32:55 +00:00
for( i=0; i<arrayPosNames.size(); i++ )
2003-04-18 02:13:23 +00:00
{
arrayPosNames[i].MakeUpper();
m_OptionRow[PO_PERSPECTIVE].choices.push_back( arrayPosNames[i] );
}
2003-02-17 12:19:42 +00:00
2002-05-20 08:59:37 +00:00
for( int p=0; p<NUM_PLAYERS; p++ )
{
2002-07-23 01:41:40 +00:00
PlayerOptions &po = GAMESTATE->m_PlayerOptions[p];
2002-05-20 08:59:37 +00:00
if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 0.25f ) m_iSelectedOption[p][PO_SPEED] = 0;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 0.5f ) m_iSelectedOption[p][PO_SPEED] = 1;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 0.75f ) m_iSelectedOption[p][PO_SPEED] = 2;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 1.0f ) m_iSelectedOption[p][PO_SPEED] = 3;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 1.5f ) m_iSelectedOption[p][PO_SPEED] = 4;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 2.0f ) m_iSelectedOption[p][PO_SPEED] = 5;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 3.0f ) m_iSelectedOption[p][PO_SPEED] = 6;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 5.0f ) m_iSelectedOption[p][PO_SPEED] = 7;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 4.0f ) m_iSelectedOption[p][PO_SPEED] = 8;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 8.0f ) m_iSelectedOption[p][PO_SPEED] = 9;
else if( /*!po.m_bUseScrollBPM &&*/ po.m_fScrollSpeed == 12.0f ) m_iSelectedOption[p][PO_SPEED] = 10;
// else if( po.m_bUseScrollBPM && po.m_fScrollBPM == 200 ) m_iSelectedOption[p][PO_SPEED] = 8;
// else if( po.m_bUseScrollBPM && po.m_fScrollBPM == 300 ) m_iSelectedOption[p][PO_SPEED] = 9;
// else if( po.m_bUseScrollBPM && po.m_fScrollBPM == 450 ) m_iSelectedOption[p][PO_SPEED] = 10;
else m_iSelectedOption[p][PO_SPEED] = 3;
2003-01-25 11:05:12 +00:00
m_iSelectedOption[p][PO_ACCEL] = po.GetFirstAccel()+1;
m_iSelectedOption[p][PO_EFFECT] = po.GetFirstEffect()+1;
m_iSelectedOption[p][PO_APPEAR] = po.GetFirstAppearance()+1;
m_iSelectedOption[p][PO_TURN] = po.m_Turn;
m_iSelectedOption[p][PO_TRANSFORM] = po.m_Transform;
m_iSelectedOption[p][PO_SCROLL] = po.m_fReverseScroll==1 ? 1 : 0 ;
2003-02-17 12:19:42 +00:00
// highlight currently selected skin
m_iSelectedOption[p][PO_NOTE_SKIN] = -1;
for( unsigned j=0; j<m_OptionRow[PO_NOTE_SKIN].choices.size(); j++ )
2003-02-17 12:19:42 +00:00
{
if( 0==stricmp(m_OptionRow[PO_NOTE_SKIN].choices[j], NOTESKIN->GetCurNoteSkinName((PlayerNumber)p)) )
2003-02-17 12:19:42 +00:00
{
m_iSelectedOption[p][PO_NOTE_SKIN] = j;
2003-02-17 12:19:42 +00:00
break;
}
}
if( m_iSelectedOption[p][PO_NOTE_SKIN] == -1 )
m_iSelectedOption[p][PO_NOTE_SKIN] = 0;
2002-05-27 08:23:27 +00:00
m_iSelectedOption[p][PO_HOLD_NOTES] = po.m_bHoldNotes ? 1 : 0;
if( po.m_fDark==1 )
m_iSelectedOption[p][PO_OTHER] = 1;
else if( po.m_bTimeSpacing )
m_iSelectedOption[p][PO_OTHER] = 2;
else
m_iSelectedOption[p][PO_OTHER] = 0;
2003-04-18 02:13:23 +00:00
/* Default: */
m_iSelectedOption[p][PO_PERSPECTIVE] = 1;
if(po.m_fPerspectiveTilt == -1)
m_iSelectedOption[p][PO_PERSPECTIVE] = 0;
else if(po.m_fPerspectiveTilt == 1)
m_iSelectedOption[p][PO_PERSPECTIVE] = 2;
else /* po.m_fPerspectiveTilt == 0 */
{
vector<CString> &choices = m_OptionRow[PO_PERSPECTIVE].choices;
for(unsigned n = 3; n < choices.size(); ++n)
if(!choices[n].CompareNoCase(po.m_sPositioning))
m_iSelectedOption[p][PO_PERSPECTIVE] = n;
}
po.Init();
2002-05-20 08:59:37 +00:00
}
}
void ScreenPlayerOptions::ExportOptions()
{
for( int p=0; p<NUM_PLAYERS; p++ )
{
2002-07-23 01:41:40 +00:00
PlayerOptions &po = GAMESTATE->m_PlayerOptions[p];
po.Init();
2002-05-20 08:59:37 +00:00
switch( m_iSelectedOption[p][PO_SPEED] )
{
case 0: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 0.25f; break;
case 1: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 0.5f; break;
case 2: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 0.75f; break;
case 3: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 1.0f; break;
case 4: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 1.5f; break;
case 5: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 2.0f; break;
case 6: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 3.0f; break;
case 7: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 4.0f; break;
case 8: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 5.0f; break;
case 9: /*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 8.0f; break;
case 10:/*po.m_bUseScrollBPM = false;*/ po.m_fScrollSpeed = 12.0f; break;
// case 9: po.m_bUseScrollBPM = true; po.m_fScrollBPM = 200; break;
// case 10: po.m_bUseScrollBPM = true; po.m_fScrollBPM = 300; break;
// case 11:po.m_bUseScrollBPM = true; po.m_fScrollBPM = 450; break;
default: ASSERT(0);
2002-05-20 08:59:37 +00:00
}
if( m_iSelectedOption[p][PO_ACCEL] != 0 )
po.SetOneAccel( (PlayerOptions::Accel)(m_iSelectedOption[p][PO_ACCEL]-1) );
if( m_iSelectedOption[p][PO_EFFECT] != 0 )
po.SetOneEffect( (PlayerOptions::Effect)(m_iSelectedOption[p][PO_EFFECT]-1) );
if( m_iSelectedOption[p][PO_APPEAR] != 0 )
po.SetOneAppearance( (PlayerOptions::Appearance)(m_iSelectedOption[p][PO_APPEAR]-1) );
2002-05-20 08:59:37 +00:00
po.m_Turn = (PlayerOptions::Turn)m_iSelectedOption[p][PO_TURN];
po.m_Transform = (PlayerOptions::Transform)m_iSelectedOption[p][PO_TRANSFORM];
po.m_fReverseScroll = (m_iSelectedOption[p][PO_SCROLL] == 1) ? 1.f : 0.f;
2003-02-17 12:19:42 +00:00
int iSelectedSkin = m_iSelectedOption[p][PO_NOTE_SKIN];
CString sNewSkin = m_OptionRow[PO_NOTE_SKIN].choices[iSelectedSkin];
2003-02-17 12:19:42 +00:00
NOTESKIN->SwitchNoteSkin( (PlayerNumber)p, sNewSkin );
2003-04-01 19:31:27 +00:00
po.m_bHoldNotes = (m_iSelectedOption[p][PO_HOLD_NOTES] == 1);
po.m_fDark = (m_iSelectedOption[p][PO_OTHER] == 1) ? 1.f : 0.f;
po.m_bTimeSpacing = (m_iSelectedOption[p][PO_OTHER] == 2);
2003-04-18 02:13:23 +00:00
switch(m_iSelectedOption[p][PO_PERSPECTIVE])
{
case 0: po.m_fPerspectiveTilt = -1; break;
case 2: po.m_fPerspectiveTilt = 1; break;
default:po.m_fPerspectiveTilt = 0; break;
}
if(m_iSelectedOption[p][PO_PERSPECTIVE] > 2)
{
const int choice = m_iSelectedOption[p][PO_PERSPECTIVE];
po.m_sPositioning = m_OptionRow[PO_PERSPECTIVE].choices[choice];
}
2002-05-20 08:59:37 +00:00
}
}
void ScreenPlayerOptions::GoToPrevState()
{
2003-02-19 05:46:09 +00:00
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
else
SCREENMAN->SetNewScreen( PREV_SCREEN(GAMESTATE->m_PlayMode) );
2002-05-20 08:59:37 +00:00
}
void ScreenPlayerOptions::GoToNextState()
{
2003-02-19 05:46:09 +00:00
if( GAMESTATE->m_bEditing )
SCREENMAN->PopTopScreen();
2003-03-30 18:12:57 +00:00
else if( PREFSMAN->m_bShowSongOptions )
2003-02-12 15:56:01 +00:00
SCREENMAN->SetNewScreen( "ScreenSongOptions" );
else
SCREENMAN->SetNewScreen( "ScreenStage" );
2002-05-20 08:59:37 +00:00
}
2003-03-11 08:52:45 +00:00
void ScreenPlayerOptions::Update( float fDelta )
{
ScreenOptions::Update( fDelta );
}
2002-05-20 08:59:37 +00:00
2003-03-11 08:52:45 +00:00
void ScreenPlayerOptions::DrawPrimitives()
{
ScreenOptions::DrawPrimitives();
}
void ScreenPlayerOptions::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
{
ScreenOptions::Input( DeviceI, type, GameI, MenuI, StyleI );
}
void ScreenPlayerOptions::HandleScreenMessage( const ScreenMessage SM )
{
ScreenOptions::HandleScreenMessage( SM );
}