diff --git a/stepmania/Themes/default/Graphics/ScreenMiniMenu icon 3x2.redir b/stepmania/Themes/default/Graphics/ScreenMiniMenu icon 3x2.redir index 981679ace0..04b2ead777 100644 --- a/stepmania/Themes/default/Graphics/ScreenMiniMenu icon 3x2.redir +++ b/stepmania/Themes/default/Graphics/ScreenMiniMenu icon 3x2.redir @@ -1 +1 @@ -_option icon 3x2 \ No newline at end of file +_blank \ No newline at end of file diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 529d3e29f1..f8c3abf56a 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -4400,7 +4400,7 @@ Fallback=ScreenMiniMenu Fallback=Screen QuestionX=SCREEN_CENTER_X QuestionY=SCREEN_CENTER_Y-150 -QuestionOnCommand= +QuestionOnCommand=wrapwidthpixels,600 QuestionOffCommand= AnswerBoxX=SCREEN_CENTER_X AnswerBoxY=SCREEN_CENTER_Y-100 @@ -4411,4 +4411,43 @@ AnswerY=SCREEN_CENTER_Y-100 AnswerOnCommand= AnswerOffCommand= CursorOnCommand= -CursorOffCommand= \ No newline at end of file +CursorOffCommand= + +[ScreenPrompt] +Fallback=Screen +QuestionX=SCREEN_CENTER_X +QuestionY=SCREEN_CENTER_Y-60 +QuestionOnCommand=zoom,0.7;wrapwidthpixels,600 +QuestionOffCommand= +CursorOnCommand= +CursorOffCommand= +Answer1Of1X=SCREEN_CENTER_X +Answer1Of1Y=SCREEN_CENTER_Y+120 +Answer1Of1OnCommand= +Answer1Of1OffCommand= +Answer1Of1Text=OK +Answer1Of2X=SCREEN_CENTER_X-50 +Answer1Of2Y=SCREEN_CENTER_Y+120 +Answer1Of2OnCommand= +Answer1Of2OffCommand= +Answer1Of2Text=YES +Answer2Of2X=SCREEN_CENTER_X+50 +Answer2Of2Y=SCREEN_CENTER_Y+120 +Answer2Of2OnCommand= +Answer2Of2OffCommand= +Answer2Of2Text=NO +Answer1Of3X=SCREEN_CENTER_X-170 +Answer1Of3Y=SCREEN_CENTER_Y+120 +Answer1Of3OnCommand= +Answer1Of3OffCommand= +Answer1Of3Text=YES +Answer2Of3X=SCREEN_CENTER_X-20 +Answer2Of3Y=SCREEN_CENTER_Y+120 +Answer2Of3OnCommand= +Answer2Of3OffCommand= +Answer2Of3Text=NO +Answer3Of3X=SCREEN_CENTER_X+150 +Answer3Of3Y=SCREEN_CENTER_Y+120 +Answer3Of3OnCommand= +Answer3Of3OffCommand= +Answer3Of3Text=CANCEL diff --git a/stepmania/src/ScreenEditMenu.cpp b/stepmania/src/ScreenEditMenu.cpp index 22f670acf9..f23a2ca865 100644 --- a/stepmania/src/ScreenEditMenu.cpp +++ b/stepmania/src/ScreenEditMenu.cpp @@ -153,7 +153,7 @@ static bool ValidateCurrentStepsDescription( CString s, CString &sErrorOut ) { if( !GAMESTATE->m_pCurSong->IsEditDescriptionUnique(GAMESTATE->m_pCurSteps[0]->m_StepsType, s, GAMESTATE->m_pCurSteps[0]) ) { - sErrorOut = "The supplied name supplied conflicts with another edit. Please use a different name."; + sErrorOut = "The supplied name supplied conflicts with another edit.\n\nPlease use a different name."; return false; } } diff --git a/stepmania/src/ScreenPrompt.cpp b/stepmania/src/ScreenPrompt.cpp index 1468017464..fcb8bb22cd 100644 --- a/stepmania/src/ScreenPrompt.cpp +++ b/stepmania/src/ScreenPrompt.cpp @@ -8,14 +8,12 @@ #include "Style.h" #include "ThemeManager.h" #include "ScreenDimensions.h" - -#define QUESTION_X (SCREEN_CENTER_X) -#define QUESTION_Y (SCREEN_CENTER_Y - 60) - -#define PROMPT_X (SCREEN_CENTER_X) -#define PROMPT_Y (SCREEN_CENTER_Y + 120) +#include "ActorUtil.h" PromptAnswer ScreenPrompt::s_LastAnswer = ANSWER_YES; +bool ScreenPrompt::s_bCancelledLast = false; + +#define ANSWER_TEXT( elem ) THEME->GetMetric(m_sName,elem+"Text") //REGISTER_SCREEN_CLASS( ScreenPrompt ); ScreenPrompt::ScreenPrompt( @@ -26,12 +24,13 @@ ScreenPrompt::ScreenPrompt( void(*OnNo)(void*), void* pCallbackData ) : - Screen("ScreenPrompt") + Screen("ScreenPrompt") { m_bIsTransparent = true; // draw screens below us m_PromptType = type; m_Answer = defaultAnswer; + CLAMP( (int&)m_Answer, 0, m_PromptType ); m_pOnYes = OnYes; m_pOnNo = OnNo; m_pCallbackData = pCallbackData; @@ -42,61 +41,44 @@ void ScreenPrompt::Init() { Screen::Init(); - m_Background.LoadFromAniDir( THEME->GetPathB("ScreenPrompt","background") ); + m_Background.LoadFromAniDir( THEME->GetPathB(m_sName,"background") ); m_Background.PlayCommand("On"); this->AddChild( &m_Background ); - m_textQuestion.LoadFromFont( THEME->GetPathF("ScreenPrompt","question") ); + m_textQuestion.LoadFromFont( THEME->GetPathF(m_sName,"question") ); + m_textQuestion.SetName( "Question" ); m_textQuestion.SetText( m_sText ); - m_textQuestion.SetXY( QUESTION_X, QUESTION_Y ); + SET_XY_AND_ON_COMMAND( m_textQuestion ); this->AddChild( &m_textQuestion ); - m_rectAnswerBox.SetDiffuse( RageColor(0.5f,0.5f,1.0f,0.7f) ); - this->AddChild( &m_rectAnswerBox ); + m_sprCursor.Load( THEME->GetPathG(m_sName,"cursor") ); + m_sprCursor->SetName( "Cursor" ); + ON_COMMAND( m_sprCursor ); + this->AddChild( m_sprCursor ); - for( int i=0; iGetPathF("ScreenPrompt","answer") ); - m_textAnswer[i].SetY( PROMPT_Y ); + m_textAnswer[i].LoadFromFont( THEME->GetPathF(m_sName,"answer") ); + CString sElem = ssprintf("Answer%dOf%d", i+1, m_PromptType+1); + m_textAnswer[i].SetName( sElem ); + m_textAnswer[i].SetText( ANSWER_TEXT(sElem) ); this->AddChild( &m_textAnswer[i] ); - } - - switch( m_PromptType ) - { - case PROMPT_OK: - m_textAnswer[ANSWER_YES]. SetText( "OK" ); - m_textAnswer[ANSWER_YES]. SetX( PROMPT_X ); - break; - case PROMPT_YES_NO: - m_textAnswer[ANSWER_YES]. SetText( "YES" ); - m_textAnswer[ANSWER_NO]. SetText( "NO" ); - m_textAnswer[ANSWER_YES]. SetX( PROMPT_X-50 ); - m_textAnswer[ANSWER_NO]. SetX( PROMPT_X+50 ); - break; - case PROMPT_YES_NO_CANCEL: - m_textAnswer[ANSWER_YES]. SetText( "YES" ); - m_textAnswer[ANSWER_NO]. SetText( "NO" ); - m_textAnswer[ANSWER_CANCEL].SetText( "CANCEL" ); - m_textAnswer[ANSWER_YES]. SetX( PROMPT_X-120 ); - m_textAnswer[ANSWER_NO]. SetX( PROMPT_X-20 ); - m_textAnswer[ANSWER_CANCEL].SetX( PROMPT_X+150 ); - break; + SET_XY_AND_ON_COMMAND( m_textAnswer[i] ); } - m_rectAnswerBox.SetXY( m_textAnswer[m_Answer].GetX(), m_textAnswer[m_Answer].GetY() ); - m_rectAnswerBox.SetZoomX( m_textAnswer[m_Answer].GetUnzoomedWidth()+10.0f ); - m_rectAnswerBox.SetZoomY( 30 ); + PositionCursor(); - m_textAnswer[m_Answer].SetEffectGlowShift(); - - m_In.Load( THEME->GetPathB("ScreenPrompt","in") ); + m_In.Load( THEME->GetPathB(m_sName,"in") ); m_In.StartTransitioning(); this->AddChild( &m_In ); - m_Out.Load( THEME->GetPathB("ScreenPrompt","out") ); + m_Out.Load( THEME->GetPathB(m_sName,"out") ); this->AddChild( &m_Out ); + + m_Cancel.Load( THEME->GetPathB(m_sName,"cancel") ); + this->AddChild( &m_Cancel ); - m_sndChange.Load( THEME->GetPathS("ScreenPrompt","change"), true ); + m_sndChange.Load( THEME->GetPathS(m_sName,"change"), true ); } void ScreenPrompt::Update( float fDeltaTime ) @@ -156,12 +138,8 @@ void ScreenPrompt::Change( int dir ) m_textAnswer[m_Answer].SetEffectNone(); m_Answer = (PromptAnswer)(m_Answer+dir); ASSERT( m_Answer >= 0 && m_Answer < NUM_PROMPT_ANSWERS ); - m_textAnswer[m_Answer].SetEffectGlowShift(); - m_rectAnswerBox.StopTweening(); - m_rectAnswerBox.BeginTweening( 0.2f ); - m_rectAnswerBox.SetXY( m_textAnswer[m_Answer].GetX(), m_textAnswer[m_Answer].GetY() ); - m_rectAnswerBox.SetZoomX( m_textAnswer[m_Answer].GetUnzoomedWidth()+10.0f ); + PositionCursor(); m_sndChange.Play(); } @@ -180,23 +158,39 @@ void ScreenPrompt::MenuRight( PlayerNumber pn ) void ScreenPrompt::MenuStart( PlayerNumber pn ) { - m_Out.StartTransitioning( SM_DoneOpeningWipingRight ); + End( false ); +} - m_textQuestion.BeginTweening( 0.2f ); - m_textQuestion.SetDiffuse( RageColor(1,1,1,0) ); - - m_rectAnswerBox.BeginTweening( 0.2f ); - m_rectAnswerBox.SetDiffuse( RageColor(1,1,1,0) ); - - m_textAnswer[m_Answer].SetEffectNone(); - - for( int i=0; iPlayStartSound(); + m_Out.StartTransitioning( SM_DoneOpeningWipingRight ); } - SCREENMAN->PlayStartSound(); + OFF_COMMAND( m_textQuestion ); + OFF_COMMAND( m_sprCursor ); + for( int i=0; i<=m_PromptType; i++ ) + OFF_COMMAND( m_textAnswer[i] ); switch( m_Answer ) { @@ -210,14 +204,17 @@ void ScreenPrompt::MenuStart( PlayerNumber pn ) break; } - s_LastAnswer = m_Answer; + s_LastAnswer = bCancelled ? ANSWER_CANCEL : m_Answer; + s_bCancelledLast = bCancelled; } -void ScreenPrompt::MenuBack( PlayerNumber pn ) +void ScreenPrompt::PositionCursor() { - + BitmapText &bt = m_textAnswer[m_Answer]; + m_sprCursor->SetXY( bt.GetX(), bt.GetY() ); } + /* * (c) 2001-2004 Chris Danford * All rights reserved. diff --git a/stepmania/src/ScreenPrompt.h b/stepmania/src/ScreenPrompt.h index 4547b95a41..47bfef613d 100644 --- a/stepmania/src/ScreenPrompt.h +++ b/stepmania/src/ScreenPrompt.h @@ -32,6 +32,7 @@ public: virtual void HandleScreenMessage( const ScreenMessage SM ); static PromptAnswer s_LastAnswer; + static bool s_bCancelledLast; protected: bool CanGoLeft() { return m_Answer > 0; } @@ -56,10 +57,13 @@ protected: void MenuBack( PlayerNumber pn ); void MenuStart( PlayerNumber pn ); + void End( bool bCancelled ); + void PositionCursor(); + CString m_sText; BGAnimation m_Background; BitmapText m_textQuestion; - Quad m_rectAnswerBox; + AutoActor m_sprCursor; BitmapText m_textAnswer[NUM_PROMPT_ANSWERS]; PromptType m_PromptType; PromptAnswer m_Answer; @@ -67,8 +71,10 @@ protected: void(*m_pOnYes)(void*); void(*m_pOnNo)(void*); void* m_pCallbackData; + Transition m_In; Transition m_Out; + Transition m_Cancel; RageSound m_sndChange; };