ScreenPrompt cleanup

This commit is contained in:
Chris Danford
2005-03-23 06:13:28 +00:00
parent 322344473c
commit 7c6ed89975
5 changed files with 113 additions and 71 deletions
@@ -1 +1 @@
_option icon 3x2 _blank
+40 -1
View File
@@ -4400,7 +4400,7 @@ Fallback=ScreenMiniMenu
Fallback=Screen Fallback=Screen
QuestionX=SCREEN_CENTER_X QuestionX=SCREEN_CENTER_X
QuestionY=SCREEN_CENTER_Y-150 QuestionY=SCREEN_CENTER_Y-150
QuestionOnCommand= QuestionOnCommand=wrapwidthpixels,600
QuestionOffCommand= QuestionOffCommand=
AnswerBoxX=SCREEN_CENTER_X AnswerBoxX=SCREEN_CENTER_X
AnswerBoxY=SCREEN_CENTER_Y-100 AnswerBoxY=SCREEN_CENTER_Y-100
@@ -4412,3 +4412,42 @@ AnswerOnCommand=
AnswerOffCommand= AnswerOffCommand=
CursorOnCommand= CursorOnCommand=
CursorOffCommand= 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
+1 -1
View File
@@ -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]) ) 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; return false;
} }
} }
+63 -66
View File
@@ -8,14 +8,12 @@
#include "Style.h" #include "Style.h"
#include "ThemeManager.h" #include "ThemeManager.h"
#include "ScreenDimensions.h" #include "ScreenDimensions.h"
#include "ActorUtil.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)
PromptAnswer ScreenPrompt::s_LastAnswer = ANSWER_YES; 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 ); //REGISTER_SCREEN_CLASS( ScreenPrompt );
ScreenPrompt::ScreenPrompt( ScreenPrompt::ScreenPrompt(
@@ -26,12 +24,13 @@ ScreenPrompt::ScreenPrompt(
void(*OnNo)(void*), void(*OnNo)(void*),
void* pCallbackData void* pCallbackData
) : ) :
Screen("ScreenPrompt") Screen("ScreenPrompt")
{ {
m_bIsTransparent = true; // draw screens below us m_bIsTransparent = true; // draw screens below us
m_PromptType = type; m_PromptType = type;
m_Answer = defaultAnswer; m_Answer = defaultAnswer;
CLAMP( (int&)m_Answer, 0, m_PromptType );
m_pOnYes = OnYes; m_pOnYes = OnYes;
m_pOnNo = OnNo; m_pOnNo = OnNo;
m_pCallbackData = pCallbackData; m_pCallbackData = pCallbackData;
@@ -42,61 +41,44 @@ void ScreenPrompt::Init()
{ {
Screen::Init(); Screen::Init();
m_Background.LoadFromAniDir( THEME->GetPathB("ScreenPrompt","background") ); m_Background.LoadFromAniDir( THEME->GetPathB(m_sName,"background") );
m_Background.PlayCommand("On"); m_Background.PlayCommand("On");
this->AddChild( &m_Background ); 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.SetText( m_sText );
m_textQuestion.SetXY( QUESTION_X, QUESTION_Y ); SET_XY_AND_ON_COMMAND( m_textQuestion );
this->AddChild( &m_textQuestion ); this->AddChild( &m_textQuestion );
m_rectAnswerBox.SetDiffuse( RageColor(0.5f,0.5f,1.0f,0.7f) ); m_sprCursor.Load( THEME->GetPathG(m_sName,"cursor") );
this->AddChild( &m_rectAnswerBox ); m_sprCursor->SetName( "Cursor" );
ON_COMMAND( m_sprCursor );
this->AddChild( m_sprCursor );
for( int i=0; i<NUM_PROMPT_ANSWERS; i++ ) for( int i=0; i<=m_PromptType; i++ )
{ {
m_textAnswer[i].LoadFromFont( THEME->GetPathF("ScreenPrompt","answer") ); m_textAnswer[i].LoadFromFont( THEME->GetPathF(m_sName,"answer") );
m_textAnswer[i].SetY( PROMPT_Y ); 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] ); this->AddChild( &m_textAnswer[i] );
SET_XY_AND_ON_COMMAND( m_textAnswer[i] );
} }
switch( m_PromptType ) PositionCursor();
{
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;
}
m_rectAnswerBox.SetXY( m_textAnswer[m_Answer].GetX(), m_textAnswer[m_Answer].GetY() ); m_In.Load( THEME->GetPathB(m_sName,"in") );
m_rectAnswerBox.SetZoomX( m_textAnswer[m_Answer].GetUnzoomedWidth()+10.0f );
m_rectAnswerBox.SetZoomY( 30 );
m_textAnswer[m_Answer].SetEffectGlowShift();
m_In.Load( THEME->GetPathB("ScreenPrompt","in") );
m_In.StartTransitioning(); m_In.StartTransitioning();
this->AddChild( &m_In ); this->AddChild( &m_In );
m_Out.Load( THEME->GetPathB("ScreenPrompt","out") ); m_Out.Load( THEME->GetPathB(m_sName,"out") );
this->AddChild( &m_Out ); this->AddChild( &m_Out );
m_sndChange.Load( THEME->GetPathS("ScreenPrompt","change"), true ); m_Cancel.Load( THEME->GetPathB(m_sName,"cancel") );
this->AddChild( &m_Cancel );
m_sndChange.Load( THEME->GetPathS(m_sName,"change"), true );
} }
void ScreenPrompt::Update( float fDeltaTime ) void ScreenPrompt::Update( float fDeltaTime )
@@ -156,12 +138,8 @@ void ScreenPrompt::Change( int dir )
m_textAnswer[m_Answer].SetEffectNone(); m_textAnswer[m_Answer].SetEffectNone();
m_Answer = (PromptAnswer)(m_Answer+dir); m_Answer = (PromptAnswer)(m_Answer+dir);
ASSERT( m_Answer >= 0 && m_Answer < NUM_PROMPT_ANSWERS ); ASSERT( m_Answer >= 0 && m_Answer < NUM_PROMPT_ANSWERS );
m_textAnswer[m_Answer].SetEffectGlowShift();
m_rectAnswerBox.StopTweening(); PositionCursor();
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 );
m_sndChange.Play(); m_sndChange.Play();
} }
@@ -180,23 +158,39 @@ void ScreenPrompt::MenuRight( PlayerNumber pn )
void ScreenPrompt::MenuStart( PlayerNumber pn ) void ScreenPrompt::MenuStart( PlayerNumber pn )
{ {
m_Out.StartTransitioning( SM_DoneOpeningWipingRight ); End( false );
}
m_textQuestion.BeginTweening( 0.2f ); void ScreenPrompt::MenuBack( PlayerNumber pn )
m_textQuestion.SetDiffuse( RageColor(1,1,1,0) ); {
switch( m_PromptType )
m_rectAnswerBox.BeginTweening( 0.2f );
m_rectAnswerBox.SetDiffuse( RageColor(1,1,1,0) );
m_textAnswer[m_Answer].SetEffectNone();
for( int i=0; i<NUM_PROMPT_ANSWERS; i++ )
{ {
m_textAnswer[i].BeginTweening( 0.2f ); case PROMPT_OK:
m_textAnswer[i].SetDiffuse( RageColor(1,1,1,0) ); case PROMPT_YES_NO:
// don't allow cancel
break;
case PROMPT_YES_NO_CANCEL:
End( true );
break;
}
}
void ScreenPrompt::End( bool bCancelled )
{
if( bCancelled )
{
m_Cancel.StartTransitioning( SM_DoneOpeningWipingRight );
}
else
{
SCREENMAN->PlayStartSound();
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 ) switch( m_Answer )
{ {
@@ -210,14 +204,17 @@ void ScreenPrompt::MenuStart( PlayerNumber pn )
break; 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 * (c) 2001-2004 Chris Danford
* All rights reserved. * All rights reserved.
+7 -1
View File
@@ -32,6 +32,7 @@ public:
virtual void HandleScreenMessage( const ScreenMessage SM ); virtual void HandleScreenMessage( const ScreenMessage SM );
static PromptAnswer s_LastAnswer; static PromptAnswer s_LastAnswer;
static bool s_bCancelledLast;
protected: protected:
bool CanGoLeft() { return m_Answer > 0; } bool CanGoLeft() { return m_Answer > 0; }
@@ -56,10 +57,13 @@ protected:
void MenuBack( PlayerNumber pn ); void MenuBack( PlayerNumber pn );
void MenuStart( PlayerNumber pn ); void MenuStart( PlayerNumber pn );
void End( bool bCancelled );
void PositionCursor();
CString m_sText; CString m_sText;
BGAnimation m_Background; BGAnimation m_Background;
BitmapText m_textQuestion; BitmapText m_textQuestion;
Quad m_rectAnswerBox; AutoActor m_sprCursor;
BitmapText m_textAnswer[NUM_PROMPT_ANSWERS]; BitmapText m_textAnswer[NUM_PROMPT_ANSWERS];
PromptType m_PromptType; PromptType m_PromptType;
PromptAnswer m_Answer; PromptAnswer m_Answer;
@@ -67,8 +71,10 @@ protected:
void(*m_pOnYes)(void*); void(*m_pOnYes)(void*);
void(*m_pOnNo)(void*); void(*m_pOnNo)(void*);
void* m_pCallbackData; void* m_pCallbackData;
Transition m_In; Transition m_In;
Transition m_Out; Transition m_Out;
Transition m_Cancel;
RageSound m_sndChange; RageSound m_sndChange;
}; };