diff --git a/stepmania/Themes/default/Fonts/MusicList titles 16x16.png b/stepmania/Themes/default/Fonts/MusicList titles 16x16.png new file mode 100644 index 0000000000..0b91d1e11f Binary files /dev/null and b/stepmania/Themes/default/Fonts/MusicList titles 16x16.png differ diff --git a/stepmania/Themes/default/Fonts/MusicList titles [extras].png b/stepmania/Themes/default/Fonts/MusicList titles [extras].png new file mode 100644 index 0000000000..5c43323bd5 Binary files /dev/null and b/stepmania/Themes/default/Fonts/MusicList titles [extras].png differ diff --git a/stepmania/Themes/default/Fonts/MusicList titles.ini b/stepmania/Themes/default/Fonts/MusicList titles.ini new file mode 100644 index 0000000000..1ff67f4393 --- /dev/null +++ b/stepmania/Themes/default/Fonts/MusicList titles.ini @@ -0,0 +1,267 @@ +[main] +import=_20px fonts +Baseline=27 +Top=7 +0=15 +1=15 +2=15 +3=15 +4=15 +5=15 +6=15 +7=15 +8=15 +9=88 +10=0 +11=15 +12=15 +13=0 +14=15 +15=15 +16=15 +17=15 +18=15 +19=15 +20=15 +21=15 +22=15 +23=15 +24=15 +25=15 +26=15 +27=15 +28=0 +29=0 +30=0 +31=0 +32=5 +33=8 +34=10 +35=17 +36=15 +37=18 +38=15 +39=6 +40=9 +41=9 +42=8 +43=14 +44=5 +45=8 +46=6 +47=11 +48=14 +49=11 +50=14 +51=14 +52=13 +53=14 +54=15 +55=11 +56=14 +57=15 +58=6 +59=6 +60=14 +61=14 +62=14 +63=14 +64=20 +65=13 +66=15 +67=15 +68=15 +69=11 +70=11 +71=15 +72=15 +73=8 +74=9 +75=14 +76=11 +77=19 +78=15 +79=15 +80=14 +81=15 +82=14 +83=14 +84=13 +85=15 +86=13 +87=21 +88=13 +89=13 +90=11 +91=8 +92=11 +93=8 +94=13 +95=15 +96=9 +97=14 +98=14 +99=13 +100=14 +101=14 +102=8 +103=14 +104=14 +105=8 +106=8 +107=13 +108=8 +109=20 +110=14 +111=14 +112=14 +113=14 +114=10 +115=13 +116=9 +117=14 +118=11 +119=17 +120=11 +121=12 +122=10 +123=10 +124=8 +125=10 +126=14 +127=15 +128=14 +129=9 +130=5 +131=12 +132=10 +133=15 +134=15 +135=15 +136=9 +137=27 +138=14 +139=6 +140=18 +141=9 +142=11 +143=9 +144=9 +145=5 +146=5 +147=10 +148=10 +149=10 +150=14 +151=26 +152=9 +153=21 +154=13 +155=6 +156=20 +157=9 +158=10 +159=13 +160=5 +161=8 +162=14 +163=14 +164=15 +165=13 +166=8 +167=13 +168=9 +169=21 +170=9 +171=10 +172=14 +173=8 +174=21 +175=15 +176=10 +177=14 +178=9 +179=9 +180=9 +181=13 +182=15 +183=9 +184=9 +185=7 +186=9 +187=10 +188=17 +189=17 +190=18 +191=14 +192=13 +193=13 +194=13 +195=13 +196=13 +197=13 +198=19 +199=15 +200=11 +201=11 +202=11 +203=11 +204=8 +205=8 +206=8 +207=8 +208=15 +209=15 +210=15 +211=15 +212=15 +213=15 +214=15 +215=14 +216=15 +217=15 +218=15 +219=15 +220=15 +221=13 +222=14 +223=15 +224=14 +225=14 +226=14 +227=14 +228=14 +229=14 +230=20 +231=13 +232=14 +233=14 +234=14 +235=14 +236=8 +237=8 +238=8 +239=8 +240=14 +241=14 +242=14 +243=14 +244=14 +245=14 +246=14 +247=14 +248=14 +249=14 +250=14 +251=14 +252=14 +253=12 +254=14 +255=12 + +[extras] +Baseline=26 +Top=7 + +0=13 +map flipped-a=0 diff --git a/stepmania/Themes/default/Graphics/GroupList bar.png b/stepmania/Themes/default/Graphics/GroupList bar.png new file mode 100644 index 0000000000..209c5a2559 Binary files /dev/null and b/stepmania/Themes/default/Graphics/GroupList bar.png differ diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 5679c27f6a..7bd18f6666 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -205,33 +205,43 @@ NextScreenOni=ScreenInstructions NextScreenBattle=ScreenInstructions [ScreenSelectGroup] -FrameX=180 -FrameY=160 -BannerX=182 -BannerY=158 +FrameOnCommand=x,180;y,160 +FrameOffCommand= +BannerOnCommand=x,182;y,158 +BannerOffCommand= BannerWidth=288 BannerHeight=92 -NumberX=116 -NumberY=224 -ExplanationX=110 -ExplanationY=66 -ButtonX=504 -ButtonSelectedX=470 -ButtonStartY=66 -ButtonSpacingY=26 -ContentsX=320 -ContentsY=260 -TitlesStartX=20 -TitlesStartY=276 -TitlesWidth=146 -TitlesSpacingX=150 -TitlesColumns=4 -TitlesRows=10 -TitlesZoom=0.5 +NumberOnCommand=x,116;y,224;horizalign,right;shadowlength,0 +NumberOffCommand= +ExplanationOnCommand=x,110;y,66 +ExplanationOffCommand= +ContentsOnCommand=x,320;y,260 +ContentsOffCommand= +GroupListOnCommand=x,504;y,200 +GroupListOffCommand= +MusicListOnCommand=x,20;y,276 +MusicListOffCommand= HelpText=Use &LEFT; &RIGHT; to select, then press START TimerSeconds=40 NextScreen=ScreenInstructions +[GroupList] +StartX=0 +StartY=-136 +SpacingX=0 +SpacingY=26 +GainFocusCommand=stoptweening;glowshift;linear,0.2;x,-40 +LoseFocusCommand=stoptweening;stopeffect;linear,0.2;x,0 + +[MusicList] +NumColumns=4 +NumRows=10 +StartX= +StartY= +SpacingX=150 +CropWidth=146 +InitCommand=horizalign,left;vertalign,top;shadowlength,2;zoom,0.5; + [ScreenInstructions] NextScreenArcade=ScreenSelectMusic NextScreenOni=ScreenSelectCourse @@ -357,7 +367,7 @@ HelpText=Use &LEFT; &RIGHT; to select, then press START TimerSeconds=60 [ScreenStage] -StageType=0 // 0 for MAX, 1 for Pump, 2 for EZ2 +NextScreen=ScreenGameplay [ScreenGameplay] SongSelectScreen=ScreenSelectMusic @@ -726,24 +736,6 @@ BrightGhostComboThreshold=100 StartDrawingAtPixels=-60 StopDrawingAtPixels=350 -[GameState] -StageColorDemo=0.3,1.0,0.3,1 // green -StageColor1=0.3,0.8,1.0,1 // light blue -StageColor2=0.2,1,0.2,1 // green -StageColor3=0.8,0.2,0.8,1 // light purple -StageColor4=0.3,1.0,0.3,1 // green -StageColor5=0.4,0.4,0.9,1 // light blue -StageColorFinal=1.0,0.1,0.1,1 // red -StageColorExtra1=1.0,1.0,0.3,1 // yellow -StageColorExtra2=1.0,1.0,0.3,1 // yellow -StageColorOni=0.3,1.0,0.3,1 // green -StageColorNonstop=0.3,1.0,0.3,1 // green -StageColorEndless=0.3,1.0,0.3,1 // green -StageTextDemo=Demo -StageTextFinal=Final -StageTextExtra1=Extra -StageTextExtra2=Extra2 - [BPMDisplay] NormalColor=1.0,0.5,0.0,1 // orange ChangeColor=0.6,0.0,0.0,1 // dark red diff --git a/stepmania/src/Background.cpp b/stepmania/src/Background.cpp index 5550379b31..823342a907 100644 --- a/stepmania/src/Background.cpp +++ b/stepmania/src/Background.cpp @@ -53,7 +53,7 @@ Background::Background() m_pFadingBGA = NULL; m_fSecsLeftInFade = 0; - m_BGADanger.LoadFromAniDir( THEME->GetPathTo("BGAnimations","gameplay danger") ); + m_BGADanger.LoadFromAniDir( THEME->GetPathTo("BGAnimations","ScreenGameplay danger") ); m_quadBGBrightness.StretchTo( RECT_BACKGROUND ); m_quadBGBrightness.SetDiffuse( RageColor(0,0,0,1-PREFSMAN->m_fBGBrightness) ); diff --git a/stepmania/src/Banner.cpp b/stepmania/src/Banner.cpp index dfd573625c..1217de30f4 100644 --- a/stepmania/src/Banner.cpp +++ b/stepmania/src/Banner.cpp @@ -22,7 +22,7 @@ Banner::Banner() m_bScrolling = false; m_fPercentScrolling = 0; - LoadFallback(); +// LoadFallback(); } bool Banner::Load( RageTextureID ID ) diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index bbdf7f4d3c..72d956b6e6 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -18,7 +18,6 @@ #include "InputMapper.h" #include "song.h" #include "RageLog.h" -#include "ThemeManager.h" #include "RageUtil.h" #include "SongManager.h" #include "Notes.h" @@ -29,20 +28,6 @@ GameState* GAMESTATE = NULL; // global and accessable from anywhere in our program -#define STAGE_COLOR_DEMO THEME->GetMetricC("GameState","StageColorDemo") -#define STAGE_COLOR( i ) THEME->GetMetricC("GameState",ssprintf("StageColor%d",i+1)) -#define STAGE_COLOR_FINAL THEME->GetMetricC("GameState","StageColorFinal") -#define STAGE_COLOR_EXTRA1 THEME->GetMetricC("GameState","StageColorExtra1") -#define STAGE_COLOR_EXTRA2 THEME->GetMetricC("GameState","StageColorExtra2") -#define STAGE_COLOR_NONSTOP THEME->GetMetricC("GameState","StageColorNonstop") -#define STAGE_COLOR_ONI THEME->GetMetricC("GameState","StageColorOni") -#define STAGE_COLOR_ENDLESS THEME->GetMetricC("GameState","StageColorEndless") -#define STAGE_TEXT_DEMO THEME->GetMetric("GameState","StageTextDemo") -#define STAGE_TEXT_FINAL THEME->GetMetric("GameState","StageTextFinal") -#define STAGE_TEXT_EXTRA1 THEME->GetMetric("GameState","StageTextExtra1") -#define STAGE_TEXT_EXTRA2 THEME->GetMetric("GameState","StageTextExtra2") - - GameState::GameState() { m_CurGame = GAME_DANCE; @@ -181,43 +166,12 @@ bool GameState::IsExtraStage2() CString GameState::GetStageText() { - if( m_bDemonstrationOrJukebox ) return STAGE_TEXT_DEMO; - else if( IsFinalStage() ) return STAGE_TEXT_FINAL; - else if( IsExtraStage() ) return STAGE_TEXT_EXTRA1; - else if( IsExtraStage2() ) return STAGE_TEXT_EXTRA2; - - - int iStageNo = m_iCurrentStageIndex+1; - - CString sNumberSuffix; - if( ( (iStageNo/10) % 10 ) == 1 ) // in the teens (e.g. 19, 213) - { - sNumberSuffix = "th"; - } - else // not in the teens - { - const int iLastDigit = iStageNo%10; - switch( iLastDigit ) - { - case 1: sNumberSuffix = "st"; break; - case 2: sNumberSuffix = "nd"; break; - case 3: sNumberSuffix = "rd"; break; - default:sNumberSuffix = "th"; break; - } - } - return ssprintf( "%d%s", iStageNo, sNumberSuffix.GetString() ); -} - -RageColor GameState::GetStageColor() -{ - if( m_bDemonstrationOrJukebox ) return STAGE_COLOR_DEMO; - else if( m_PlayMode==PLAY_MODE_NONSTOP ) return STAGE_COLOR_NONSTOP; - else if( m_PlayMode==PLAY_MODE_ONI ) return STAGE_COLOR_ONI; - else if( m_PlayMode==PLAY_MODE_ENDLESS ) return STAGE_COLOR_ENDLESS; - else if( IsFinalStage() ) return STAGE_COLOR_FINAL; - else if( IsExtraStage() ) return STAGE_COLOR_EXTRA1; - else if( IsExtraStage2() ) return STAGE_COLOR_EXTRA2; - else return STAGE_COLOR( min(m_iCurrentStageIndex,4) ); + if( m_bDemonstrationOrJukebox ) return "demo"; + else if( PREFSMAN->m_bEventMode ) return "event"; + else if( IsFinalStage() ) return "final"; + else if( IsExtraStage() ) return "extra1"; + else if( IsExtraStage2() ) return "extra2"; + else return ssprintf("%d",m_iCurrentStageIndex+1); } int GameState::GetCourseSongIndex() diff --git a/stepmania/src/GameState.h b/stepmania/src/GameState.h index cc0946cbf1..beee5a0198 100644 --- a/stepmania/src/GameState.h +++ b/stepmania/src/GameState.h @@ -83,7 +83,6 @@ public: bool IsExtraStage(); bool IsExtraStage2(); CString GetStageText(); - RageColor GetStageColor(); int GetCourseSongIndex(); diff --git a/stepmania/src/GroupList.cpp b/stepmania/src/GroupList.cpp index ed64924d70..e802faca47 100644 --- a/stepmania/src/GroupList.cpp +++ b/stepmania/src/GroupList.cpp @@ -6,35 +6,36 @@ /* If this actor is used anywhere other than SelectGroup, we * can add a setting that changes which metric group we pull * settings out of, so it can be configured separately. */ -#define BUTTON_X THEME->GetMetricF("ScreenSelectGroup","ButtonX") -#define BUTTON_START_Y THEME->GetMetricF("ScreenSelectGroup","ButtonStartY") -#define BUTTON_SPACING_Y THEME->GetMetricF("ScreenSelectGroup","ButtonSpacingY") -#define BUTTON_SELECTED_X THEME->GetMetricF("ScreenSelectGroup","ButtonSelectedX") +#define START_X THEME->GetMetricF("GroupList","StartX") +#define START_Y THEME->GetMetricF("GroupList","StartY") +#define SPACING_X THEME->GetMetricF("GroupList","SpacingX") +#define SPACING_Y THEME->GetMetricF("GroupList","SpacingY") +#define GAIN_FOCUS_COMMAND THEME->GetMetric ("GroupList","GainFocusCommand") +#define LOSE_FOCUS_COMMAND THEME->GetMetric ("GroupList","LoseFocusCommand") + GroupList::GroupList() { m_iSelection = m_iTop = 0; } -void GroupList::DoneAddingGroups() +void GroupList::Load( const CStringArray& asGroupNames ) { - unsigned i; + m_asLabels = asGroupNames; - for( i=0; iGetPathTo("Graphics","GroupList button") ); - m_sprButton[i].SetXY( BUTTON_X, BUTTON_START_Y + i*BUTTON_SPACING_Y ); + float fX = START_X + i*SPACING_X; + float fY = START_Y + i*SPACING_Y; + + m_sprButton[i].Load( THEME->GetPathTo("Graphics","GroupList bar") ); + m_sprButton[i].SetXY( fX, fY ); this->AddChild( &m_sprButton[i] ); - this->AddChild( &m_screenLabels[i] ); - } - for( i=0; iGetPathTo("Fonts","GroupList label") ); - m_screenLabels[i].SetXY( BUTTON_X, BUTTON_START_Y + i*BUTTON_SPACING_Y ); + m_screenLabels[i].SetXY( fX, fY ); m_screenLabels[i].SetShadowLength( 2 ); - - CString sGroupName = m_textLabels[i]; + this->AddChild( &m_screenLabels[i] ); } SetLabels(); @@ -43,9 +44,9 @@ void GroupList::DoneAddingGroups() void GroupList::SetLabels() { - for( unsigned i=0; iShortenGroupName( label ) ); float fTextWidth = (float)m_screenLabels[i].GetWidestLineWidthInSourcePixels(); float fButtonWidth = m_sprButton[i].GetZoomedWidth(); @@ -67,13 +68,8 @@ void GroupList::BeforeChange() { int iSel = m_iSelection-m_iTop; - m_sprButton[iSel].BeginTweening( 0.2f ); - m_sprButton[iSel].SetTweenX( BUTTON_X ); - m_sprButton[iSel].SetEffectNone(); - - m_screenLabels[iSel].BeginTweening( 0.2f ); - m_screenLabels[iSel].SetTweenX( BUTTON_X ); - m_screenLabels[iSel].SetEffectNone(); + m_sprButton[iSel].Command( LOSE_FOCUS_COMMAND ); + m_screenLabels[iSel].Command( LOSE_FOCUS_COMMAND ); } @@ -81,15 +77,8 @@ void GroupList::AfterChange() { int iSel = m_iSelection-m_iTop; - m_sprButton[iSel].StopTweening(); - m_sprButton[iSel].BeginTweening( 0.2f ); - m_sprButton[iSel].SetTweenX( BUTTON_SELECTED_X ); - m_sprButton[iSel].SetEffectGlowShift(); - - m_screenLabels[iSel].StopTweening(); - m_screenLabels[iSel].BeginTweening( 0.2f ); - m_screenLabels[iSel].SetTweenX( BUTTON_SELECTED_X ); - m_screenLabels[iSel].SetEffectGlowShift(); + m_sprButton[iSel].Command( GAIN_FOCUS_COMMAND ); + m_screenLabels[iSel].Command( GAIN_FOCUS_COMMAND ); } void GroupList::Up() @@ -97,7 +86,7 @@ void GroupList::Up() BeforeChange(); if( m_iSelection == 0 ) - SetSelection(m_textLabels.size()-1); + SetSelection(m_asLabels.size()-1); else SetSelection(m_iSelection-1); @@ -108,27 +97,22 @@ void GroupList::Down() { BeforeChange(); - SetSelection((m_iSelection+1) % m_textLabels.size()); + SetSelection((m_iSelection+1) % m_asLabels.size()); AfterChange(); } -void GroupList::AddGroup(CString name) -{ - m_textLabels.push_back(name); -} - void GroupList::SetSelection( unsigned sel ) { BeforeChange(); m_iSelection=sel; - if( m_textLabels.size() <= MAX_GROUPS_ONSCREEN || + if( m_asLabels.size() <= MAX_GROUPS_ONSCREEN || sel <= MAX_GROUPS_ONSCREEN/2 ) m_iTop = 0; - else if ( sel >= m_textLabels.size() - MAX_GROUPS_ONSCREEN/2 ) - m_iTop = m_textLabels.size() - MAX_GROUPS_ONSCREEN; + else if ( sel >= m_asLabels.size() - MAX_GROUPS_ONSCREEN/2 ) + m_iTop = m_asLabels.size() - MAX_GROUPS_ONSCREEN; else m_iTop = sel - MAX_GROUPS_ONSCREEN/2; @@ -143,37 +127,37 @@ void GroupList::SetSelection( unsigned sel ) void GroupList::TweenOnScreen() { - for( unsigned i=0; i m_textLabels; + vector m_asLabels; /* Currently selected label. */ unsigned m_iSelection; @@ -26,11 +26,10 @@ public: void SetSelection(unsigned sel); int GetSelection() const { return m_iSelection; } - CString GetSelectionName() const { return m_textLabels[m_iSelection]; } + CString GetSelectionName() const { return m_asLabels[m_iSelection]; } void Up(); void Down(); - void AddGroup(CString name); - void DoneAddingGroups(); + void Load( const CStringArray& asGroupNames ); void TweenOffScreen(); void TweenOnScreen(); }; diff --git a/stepmania/src/MusicList.cpp b/stepmania/src/MusicList.cpp index ca2b4ae78f..da6d4ab593 100644 --- a/stepmania/src/MusicList.cpp +++ b/stepmania/src/MusicList.cpp @@ -5,26 +5,23 @@ /* If this actor is used anywhere other than SelectGroup, we * can add a setting that changes which metric group we pull * settings out of, so it can be configured separately. */ -#define TITLES_START_X THEME->GetMetricF("ScreenSelectGroup","TitlesStartX") -#define TITLES_WIDTH THEME->GetMetricF("ScreenSelectGroup","TitlesWidth") -#define TITLES_SPACING_X THEME->GetMetricF("ScreenSelectGroup","TitlesSpacingX") -#define TITLES_START_Y THEME->GetMetricF("ScreenSelectGroup","TitlesStartY") -#define TITLES_COLUMNS THEME->GetMetricI("ScreenSelectGroup","TitlesColumns") -#define TITLES_ROWS THEME->GetMetricI("ScreenSelectGroup","TitlesRows") -#define TITLES_ZOOM THEME->GetMetricF("ScreenSelectGroup","TitlesZoom") +#define NUM_COLUMNS THEME->GetMetricI("MusicList","NumColumns") +#define NUM_ROWS THEME->GetMetricI("MusicList","NumRows") +#define START_X THEME->GetMetricF("MusicList","StartX") +#define START_Y THEME->GetMetricF("MusicList","StartY") +#define SPACING_X THEME->GetMetricF("MusicList","SpacingX") +#define CROP_WIDTH THEME->GetMetricF("MusicList","CropWidth") +#define INIT_COMMAND THEME->GetMetric ("MusicList","InitCommand") MusicList::MusicList() { CurGroup = 0; - for( int i=0; iGetPathTo("Fonts","small titles") ); - m_textTitles[i].SetXY( TITLES_START_X + i*TITLES_SPACING_X, TITLES_START_Y ); - m_textTitles[i].SetHorizAlign( Actor::align_left ); - m_textTitles[i].SetVertAlign( Actor::align_top ); - m_textTitles[i].SetShadowLength( 2 ); - m_textTitles[i].SetZoom( TITLES_ZOOM ); + m_textTitles[i].LoadFromFont( THEME->GetPathTo("Fonts","MusicList titles") ); + m_textTitles[i].SetXY( START_X + i*SPACING_X, START_Y ); + m_textTitles[i].Command( INIT_COMMAND ); this->AddChild( &m_textTitles[i] ); } } @@ -41,18 +38,18 @@ void MusicList::AddSongsToGroup(const vector &Songs) m_ContentsText[group].m_iNumSongsInGroup = Songs.size(); - for( int c=0; c= Songs.size() ) continue; - if( c == TITLES_COLUMNS-1 && r == TITLES_ROWS-1 && Songs.size() != unsigned(TITLES_COLUMNS*TITLES_ROWS) ) + if( c == NUM_COLUMNS-1 && r == NUM_ROWS-1 && Songs.size() != unsigned(NUM_COLUMNS*NUM_ROWS) ) { - sText += ssprintf( "%d more.....", Songs.size() - TITLES_COLUMNS * TITLES_ROWS + 1 ); + sText += ssprintf( "%d more.....", Songs.size() - NUM_COLUMNS * NUM_ROWS + 1 ); continue; } @@ -83,16 +80,16 @@ void MusicList::SetGroupNo(int group) { CurGroup = group; - for( int c=0; cAddChild( &m_BannerWithFrame[0] ); - m_textStage.LoadFromFont( THEME->GetPathTo("Fonts","evaluation stage") ); - m_textStage.EnableShadow( false ); - m_textStage.SetXY( STAGE_X, STAGE_Y ); - m_textStage.SetZoom( 0.5f ); - m_textStage.SetText( GAMESTATE->GetStageText() + " Stage" ); - this->AddChild( &m_textStage ); + m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenEvaluation "+GAMESTATE->GetStageText()) ); + m_sprStage.SetXY( STAGE_X, STAGE_Y ); + this->AddChild( &m_sprStage ); for( int p=0; pIsPlayerEnabled(p) ) continue; // skip - m_DifficultyIcon[p].Load( THEME->GetPathTo("graphics","evaluation difficulty icons 1x5") ); + m_DifficultyIcon[p].Load( THEME->GetPathTo("graphics","ScreenEvaluation difficulty icons 1x5") ); m_DifficultyIcon[p].SetFromNotes( (PlayerNumber)p, GAMESTATE->m_pCurNotes[p] ); m_DifficultyIcon[p].SetXY( DIFFICULTY_ICON_X(p), DIFFICULTY_ICON_Y(p) ); this->AddChild( &m_DifficultyIcon[p] ); @@ -580,9 +577,9 @@ void ScreenEvaluation::TweenOnScreen() m_BannerWithFrame[i].SetTweenY( fOriginalY ); } - fOriginalY = m_textStage.GetY(); - m_textStage.BeginTweening( MENU_ELEMENTS_TWEEN_TIME, Actor::TWEEN_ACCELERATE ); - m_textStage.SetTweenY( fOriginalY ); + fOriginalY = m_sprStage.GetY(); + m_sprStage.BeginTweening( MENU_ELEMENTS_TWEEN_TIME, Actor::TWEEN_ACCELERATE ); + m_sprStage.SetTweenY( fOriginalY ); for( p=0; pGetPathTo("Fonts","gameplay stage") ); - m_textStageNumber.EnableShadow( false ); - m_textStageNumber.SetXY( STAGE_X, STAGE_Y(bExtra) ); - m_textStageNumber.SetText( GAMESTATE->GetStageText() ); - m_textStageNumber.SetDiffuse( GAMESTATE->GetStageColor() ); + m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenGameplay stage "+GAMESTATE->GetStageText()) ); + m_sprStage.SetXY( STAGE_X, STAGE_Y(bExtra) ); for( p=0; pGetStageColor() ); // light blue + m_textCourseSongNumber[p].SetDiffuse( RageColor(0,0.5f,1,1) ); // light blue } switch( GAMESTATE->m_PlayMode ) { case PLAY_MODE_ARCADE: case PLAY_MODE_BATTLE: - this->AddChild( &m_textStageNumber ); + this->AddChild( &m_sprStage ); break; case PLAY_MODE_NONSTOP: case PLAY_MODE_ONI: @@ -495,7 +492,6 @@ ScreenGameplay::ScreenGameplay( bool bDemonstration ) m_announcer1000Combo.Load( ANNOUNCER->GetPathTo("ScreenGameplay 1000 combo") ); m_announcerComboStopped.Load( ANNOUNCER->GetPathTo("ScreenGameplay combo stopped") ); m_soundAssistTick.Load( THEME->GetPathTo("Sounds","ScreenGameplay assist tick") ); - m_soundToasty.Load( THEME->GetPathTo("Sounds","ScreenGameplay toasty") ); } // @@ -607,8 +603,6 @@ void ScreenGameplay::LoadNextSong() break; } - m_textStageNumber.SetText( GAMESTATE->GetStageText() ); - m_textSongOptions.SetText( GAMESTATE->m_SongOptions.GetString() ); for( p=0; pm_bEasterEggs ) { m_Toasty.StartTransitioning(); - m_soundToasty.Play(); } break; @@ -1548,10 +1541,10 @@ void ScreenGameplay::TweenOnScreen() unsigned i, p; vector apActorsInLifeFrame; - apActorsInLifeFrame.push_back( &m_sprLifeFrame ); + apActorsInLifeFrame.push_back( &m_sprLifeFrame ); for( p=0; pPlayMusic( THEME->GetPathTo("Sounds","ScreenInstructions music") ); @@ -147,6 +147,6 @@ void ScreenInstructions::MenuStart( PlayerNumber pn ) m_Menu.StartTransitioning( SM_GoToNextScreen ); m_sprHowToPlay.StopTweening(); - m_sprHowToPlay.BeginTweening( 0.3f, Actor::TWEEN_DECELERATE ); + m_sprHowToPlay.BeginTweening( 0.3f, Actor::TWEEN_ACCELERATE ); m_sprHowToPlay.SetTweenX( SCREEN_RIGHT+m_sprHowToPlay.GetUnzoomedWidth()/2 ); } diff --git a/stepmania/src/ScreenSelectGroup.cpp b/stepmania/src/ScreenSelectGroup.cpp index 6fc551179c..027b12b5ac 100644 --- a/stepmania/src/ScreenSelectGroup.cpp +++ b/stepmania/src/ScreenSelectGroup.cpp @@ -25,21 +25,25 @@ #include -#define FRAME_X THEME->GetMetricF("ScreenSelectGroup","FrameX") -#define FRAME_Y THEME->GetMetricF("ScreenSelectGroup","FrameY") -#define BANNER_X THEME->GetMetricF("ScreenSelectGroup","BannerX") -#define BANNER_Y THEME->GetMetricF("ScreenSelectGroup","BannerY") -#define BANNER_WIDTH THEME->GetMetricF("ScreenSelectGroup","BannerWidth") -#define BANNER_HEIGHT THEME->GetMetricF("ScreenSelectGroup","BannerHeight") -#define NUMBER_X THEME->GetMetricF("ScreenSelectGroup","NumberX") -#define NUMBER_Y THEME->GetMetricF("ScreenSelectGroup","NumberY") -#define EXPLANATION_X THEME->GetMetricF("ScreenSelectGroup","ExplanationX") -#define EXPLANATION_Y THEME->GetMetricF("ScreenSelectGroup","ExplanationY") -#define CONTENTS_X THEME->GetMetricF("ScreenSelectGroup","ContentsX") -#define CONTENTS_Y THEME->GetMetricF("ScreenSelectGroup","ContentsY") -#define HELP_TEXT THEME->GetMetric("ScreenSelectGroup","HelpText") -#define TIMER_SECONDS THEME->GetMetricI("ScreenSelectGroup","TimerSeconds") -#define NEXT_SCREEN THEME->GetMetric("ScreenSelectGroup","NextScreen") +#define FRAME_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","FrameOnCommand") +#define FRAME_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","FrameOffCommand") +#define BANNER_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","BannerOnCommand") +#define BANNER_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","BannerOffCommand") +#define BANNER_WIDTH THEME->GetMetricF("ScreenSelectGroup","BannerWidth") +#define BANNER_HEIGHT THEME->GetMetricF("ScreenSelectGroup","BannerHeight") +#define NUMBER_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","NumberOnCommand") +#define NUMBER_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","NumberOffCommand") +#define EXPLANATION_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","ExplanationOnCommand") +#define EXPLANATION_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","ExplanationOffCommand") +#define CONTENTS_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","ContentsOnCommand") +#define CONTENTS_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","ContentsOffCommand") +#define MUSIC_LIST_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","MusicListOnCommand") +#define MUSIC_LIST_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","MusicListOffCommand") +#define GROUP_LIST_ON_COMMAND THEME->GetMetric ("ScreenSelectGroup","GroupListOnCommand") +#define GROUP_LIST_OFF_COMMAND THEME->GetMetric ("ScreenSelectGroup","GroupListOnCommand") +#define HELP_TEXT THEME->GetMetric ("ScreenSelectGroup","HelpText") +#define TIMER_SECONDS THEME->GetMetricI("ScreenSelectGroup","TimerSeconds") +#define NEXT_SCREEN THEME->GetMetric ("ScreenSelectGroup","NextScreen") ScreenSelectGroup::ScreenSelectGroup() @@ -68,11 +72,6 @@ ScreenSelectGroup::ScreenSelectGroup() // style (such as solo) are omitted. Bear with me! // -- dro kulix - // Chris: - // This is excellent! I'm going to move the filtering of songs - // that can't be played by current style to be the first action. - // This will simply the code a bit, and fix a weird case that - // causes a crash when there are duplicate song names. vector aAllSongs; SONGMAN->GetSongs( aAllSongs ); @@ -124,33 +123,31 @@ ScreenSelectGroup::ScreenSelectGroup() m_bChosen = false; m_sprExplanation.Load( THEME->GetPathTo("Graphics","ScreenSelectGroup explanation") ); - m_sprExplanation.SetXY( EXPLANATION_X, EXPLANATION_Y ); + m_sprExplanation.Command( EXPLANATION_ON_COMMAND ); this->AddChild( &m_sprExplanation ); // these guys get loaded SetSong and TweenToSong - m_Banner.SetXY( BANNER_X, BANNER_Y ); + m_Banner.SetXY( 640, 240 ); m_Banner.SetCroppedSize( BANNER_WIDTH, BANNER_HEIGHT ); this->AddChild( &m_Banner ); m_sprFrame.Load( THEME->GetPathTo("Graphics","ScreenSelectGroup frame") ); - m_sprFrame.SetXY( FRAME_X, FRAME_Y ); + m_sprFrame.Command( FRAME_ON_COMMAND ); this->AddChild( &m_sprFrame ); m_textNumber.LoadFromNumbers( THEME->GetPathTo("Numbers","ScreenSelectGroup numbers") ); - m_textNumber.SetXY( NUMBER_X, NUMBER_Y ); - m_textNumber.SetHorizAlign( Actor::align_right ); - m_textNumber.EnableShadow( false ); + m_textNumber.Command( NUMBER_ON_COMMAND ); this->AddChild( &m_textNumber ); m_sprContents.Load( THEME->GetPathTo("Graphics","ScreenSelectGroup contents") ); - m_sprContents.SetXY( CONTENTS_X, CONTENTS_Y ); + m_sprContents.Command( CONTENTS_ON_COMMAND ); this->AddChild( &m_sprContents ); + m_MusicList.Command( MUSIC_LIST_ON_COMMAND ); this->AddChild( &m_MusicList ); - for( i=0; i < asGroupNames.size(); ++i ) - m_GroupList.AddGroup( asGroupNames[i] ); - m_GroupList.DoneAddingGroups(); + m_GroupList.Load( asGroupNames ); + m_GroupList.Command( GROUP_LIST_ON_COMMAND ); this->AddChild( &m_GroupList ); @@ -285,48 +282,26 @@ void ScreenSelectGroup::MenuBack( PlayerNumber pn ) void ScreenSelectGroup::TweenOffScreen() { - m_sprExplanation.BeginTweening( 0.8f ); - m_sprExplanation.BeginTweening( 0.5f, TWEEN_BOUNCE_BEGIN ); - m_sprExplanation.SetTweenX( EXPLANATION_X-400 ); - - Actor* pActorsInGroupInfoFrame[] = { &m_sprFrame, &m_Banner, &m_textNumber }; - const int iNumActorsInGroupInfoFrame = sizeof(pActorsInGroupInfoFrame) / sizeof(Actor*); - for( int i=0; iBeginTweening( 0.9f ); - pActorsInGroupInfoFrame[i]->BeginTweening( 0.5f, TWEEN_BOUNCE_BEGIN ); - pActorsInGroupInfoFrame[i]->SetTweenX( pActorsInGroupInfoFrame[i]->GetX()-400 ); - } - - m_sprContents.BeginTweening( 0.7f ); - m_sprContents.BeginTweening( 0.5f, TWEEN_DECELERATE ); - m_sprContents.SetTweenY( CONTENTS_Y+400 ); - + m_sprExplanation.Command( EXPLANATION_OFF_COMMAND ); + m_sprFrame.Command( FRAME_OFF_COMMAND ); + m_Banner.Command( BANNER_OFF_COMMAND ); + m_textNumber.Command( NUMBER_OFF_COMMAND ); + m_sprContents.Command( CONTENTS_OFF_COMMAND ); + m_MusicList.Command( MUSIC_LIST_OFF_COMMAND ); + m_GroupList.Command( GROUP_LIST_OFF_COMMAND ); m_MusicList.TweenOffScreen(); m_GroupList.TweenOffScreen(); } void ScreenSelectGroup::TweenOnScreen() { - m_sprExplanation.SetX( EXPLANATION_X-400 ); - m_sprExplanation.BeginTweening( 0.5f, TWEEN_BOUNCE_END ); - m_sprExplanation.SetTweenX( EXPLANATION_X ); - - Actor* pActorsInGroupInfoFrame[] = { &m_sprFrame, &m_Banner, &m_textNumber }; - const int iNumActorsInGroupInfoFrame = sizeof(pActorsInGroupInfoFrame) / sizeof(Actor*); - for( int i=0; iGetX(); - pActorsInGroupInfoFrame[i]->SetX( fOriginalX-400 ); - pActorsInGroupInfoFrame[i]->BeginTweening( 0.5f, TWEEN_BOUNCE_END ); - pActorsInGroupInfoFrame[i]->SetTweenX( fOriginalX ); - } - - m_sprContents.SetY( CONTENTS_Y+400 ); - m_sprContents.BeginTweening( 0.5f, TWEEN_DECELERATE ); // sleep - m_sprContents.BeginTweening( 0.5f, TWEEN_DECELERATE ); - m_sprContents.SetTweenY( CONTENTS_Y ); - + m_sprExplanation.Command( EXPLANATION_ON_COMMAND ); + m_sprFrame.Command( FRAME_ON_COMMAND ); + m_Banner.Command( BANNER_ON_COMMAND ); + m_textNumber.Command( NUMBER_ON_COMMAND ); + m_sprContents.Command( CONTENTS_ON_COMMAND ); + m_MusicList.Command( MUSIC_LIST_ON_COMMAND ); + m_GroupList.Command( GROUP_LIST_ON_COMMAND ); m_MusicList.TweenOnScreen(); m_GroupList.TweenOnScreen(); } diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 787b05dda0..78b9837031 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -110,10 +110,9 @@ ScreenSelectMusic::ScreenSelectMusic() m_BPMDisplay.SetZoom( BPM_ZOOM ); this->AddChild( &m_BPMDisplay ); - m_StageDisplay.SetZoom( STAGE_ZOOM ); - m_StageDisplay.SetXY( STAGE_X, STAGE_Y ); - m_StageDisplay.Refresh(); - this->AddChild( &m_StageDisplay ); + m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic stage "+GAMESTATE->GetStageText()) ); + m_sprStage.SetXY( STAGE_X, STAGE_Y ); + this->AddChild( &m_sprStage ); m_sprCDTitle.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic fallback cdtitle") ); m_sprCDTitle.EnableShadow( false ); @@ -262,7 +261,7 @@ void ScreenSelectMusic::TweenOnScreen() m_sprBannerFrame.FadeOn( 0, "bounce left", TWEEN_TIME ); m_Banner.FadeOn( 0, "bounce left", TWEEN_TIME ); m_BPMDisplay.FadeOn( 0, "bounce left", TWEEN_TIME ); - m_StageDisplay.FadeOn( 0, "bounce left", TWEEN_TIME ); + m_sprStage.FadeOn( 0, "bounce left", TWEEN_TIME ); m_sprCDTitle.FadeOn( 0, "bounce left", TWEEN_TIME ); for( p=0; pm_pCurSong = pSong; - m_StageDisplay.Refresh(); + m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic stage "+GAMESTATE->GetStageText()) ); int pn; for( pn = 0; pn < NUM_PLAYERS; ++pn) diff --git a/stepmania/src/ScreenSelectMusic.h b/stepmania/src/ScreenSelectMusic.h index 306b536abe..3f8c3829e7 100644 --- a/stepmania/src/ScreenSelectMusic.h +++ b/stepmania/src/ScreenSelectMusic.h @@ -22,7 +22,6 @@ #include "DifficultyIcon.h" #include "DifficultyMeter.h" #include "OptionIconRow.h" -#include "StageDisplay.h" class ScreenSelectMusic : public Screen @@ -64,7 +63,7 @@ protected: Sprite m_sprBannerFrame; FadingBanner m_Banner; BPMDisplay m_BPMDisplay; - StageDisplay m_StageDisplay; + Sprite m_sprStage; Sprite m_sprCDTitle; Sprite m_sprDifficultyFrame[NUM_PLAYERS]; DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; diff --git a/stepmania/src/ScreenStage.cpp b/stepmania/src/ScreenStage.cpp index 27de9c314f..1a39d6d47f 100644 --- a/stepmania/src/ScreenStage.cpp +++ b/stepmania/src/ScreenStage.cpp @@ -27,7 +27,11 @@ #include "RageDisplay.h" -#define NEXT_SCREEN THEME->GetMetric("ScreenStage","NextScreen") +#define NEXT_SCREEN THEME->GetMetric ("ScreenStage","NextScreen") + +const ScreenMessage SM_LoadPrepedScreen = (ScreenMessage)(SM_User+0); + +/* #define STAGE_TYPE THEME->GetMetricI("ScreenStage","StageType") enum StageType // for use with the metric above { @@ -39,10 +43,6 @@ enum StageType // for use with the metric above StageType g_StageType; // cache for STAGE_TYPE because it's slow to look up -const ScreenMessage SM_StartFadingOut = ScreenMessage(SM_User + 1); -const ScreenMessage SM_DoneFadingIn = ScreenMessage(SM_User + 2); - - enum StageMode { MODE_NORMAL, @@ -53,484 +53,498 @@ enum StageMode MODE_ONI, MODE_ENDLESS }; +*/ ScreenStage::ScreenStage() { SOUNDMAN->StopMusic(); - g_StageType = (StageType)STAGE_TYPE; + m_Background.LoadFromAniDir( THEME->GetPathTo("BGAnimations","ScreenStage "+GAMESTATE->GetStageText()) ); + this->AddChild( &m_Background ); + m_In.Load( THEME->GetPathTo("BGAnimations","ScreenStage in") ); + this->AddChild( &m_In ); - StageMode stage_mode; - if( GAMESTATE->m_PlayMode == PLAY_MODE_NONSTOP ) stage_mode = MODE_NONSTOP; - else if( GAMESTATE->m_PlayMode == PLAY_MODE_ONI ) stage_mode = MODE_ONI; - else if( GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS ) stage_mode = MODE_ENDLESS; - else if( GAMESTATE->IsExtraStage() ) stage_mode = MODE_EXTRA1; - else if( GAMESTATE->IsExtraStage2() ) stage_mode = MODE_EXTRA2; - else if( GAMESTATE->IsFinalStage() ) stage_mode = MODE_FINAL; - else stage_mode = MODE_NORMAL; + m_Out.Load( THEME->GetPathTo("BGAnimations","ScreenStage out") ); + this->AddChild( &m_Out ); - - // - // Play announcer - // - switch( stage_mode ) - { - case MODE_NORMAL: - { - const int iStageNo = GAMESTATE->GetStageIndex()+1; - switch( iStageNo ) - { - case 1: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 1") ); break; - case 2: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 2") ); break; - case 3: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 3") ); break; - case 4: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 4") ); break; - case 5: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 5") ); break; - default: ; break; // play nothing - } - } - break; - case MODE_FINAL: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage final") ); break; - case MODE_EXTRA1: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage extra1") ); break; - case MODE_EXTRA2: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage extra2") ); break; - case MODE_NONSTOP: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage nonstop") ); break; - case MODE_ONI: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage oni") ); break; - case MODE_ENDLESS: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage endless") ); break; - default: ASSERT(0); - } - - - - // - // Init common graphics - // - this->AddChild( &m_sprSongBackground ); // add background first so it draws bottom-most - //this->AddChild( &m_quadMask ); // add quad mask before stage so that it will block out the stage sprites + m_In.StartTransitioning( SM_LoadPrepedScreen ); + float fStartFadingOutSeconds = m_Background.GetLengthSeconds() - m_Out.GetLengthSeconds(); + this->SendScreenMessage( SM_BeginFadingOut, fStartFadingOutSeconds ); - int i; - for( i=0; i<4; i++ ) - { - m_sprNumbers[i].Load( THEME->GetPathTo("Graphics","ScreenStage parts 5x3") ); - - if( g_StageType != STAGE_TYPE_EZ2 ) // DONT DIFFUSE COLORS FOR EZ2. Coz we actually set the color in the .png - m_sprNumbers[i].SetDiffuse( GAMESTATE->GetStageColor() ); - - m_sprNumbers[i].StopAnimating(); - } - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage stage") ); // we may load a different graphic into here later - m_sprStage.SetDiffuse( GAMESTATE->GetStageColor() ); + //g_StageType = (StageType)STAGE_TYPE; - - switch( stage_mode ) - { - case MODE_NORMAL: - { - const int iStageNo = GAMESTATE->GetStageIndex()+1; - - CString sStageNo = ssprintf("%d", iStageNo); - - // Set frame of numbers - int i; - for( i=0; iGetPathTo("Graphics","ScreenStage final") ); - break; - case MODE_EXTRA1: - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage extra1") ); - break; - case MODE_EXTRA2: - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage extra2") ); - break; - case MODE_NONSTOP: - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage nonstop") ); - break; - case MODE_ONI: - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage oni") ); - break; - case MODE_ENDLESS: - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage endless") ); - break; - default: - ASSERT(0); - } - m_frameStage.AddChild( &m_sprStage ); - - - - // - // Init dance-specific graphics - // - if( g_StageType == STAGE_TYPE_MAX ) - { - const float fStageHeight = m_sprStage.GetUnzoomedHeight(); - - const float fStageOffScreenY = CENTER_Y+fStageHeight; - - /* The quadMask masks out draws via Z; it doesn't actually erase - * anything, so make it transparent. */ - m_quadMask.SetDiffuse( RageColor(0,0,0,0) ); - m_quadMask.StretchTo( RectI(SCREEN_LEFT, int(roundf(fStageOffScreenY-fStageHeight/2)), - SCREEN_RIGHT, int(roundf(fStageOffScreenY+fStageHeight/2))) ); - /* Put the quad mask on top, so draws to the Stage will be "under" it. */ - m_quadMask.SetZ( 1 ); - - m_frameStage.SetXY( CENTER_X, fStageOffScreenY ); - m_frameStage.BeginTweening(0.8f, Actor::TWEEN_DECELERATE ); - m_frameStage.SetTweenY( CENTER_Y ); - - this->AddChild( &m_quadMask ); // add quad mask before stage so that it will block out the stage sprites - this->AddChild( &m_frameStage ); - } - - - // - // Init pump-sepecific graphics - // - if( g_StageType == STAGE_TYPE_PUMP ) - { - const Song* pSong = GAMESTATE->m_pCurSong; - m_sprSongBackground.Load( (pSong && pSong->HasBackground()) ? pSong->GetBackgroundPath() : THEME->GetPathTo("Graphics","fallback background") ); - m_sprSongBackground.StretchTo( RectI(SCREEN_LEFT,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); - - /* Move the stage numbers downward, so they don't overlay the - * center of the image. */ - m_frameStage.SetXY( CENTER_X, CENTER_Y+160 ); - m_frameStage.SetZoom( 0.5f ); - - /* Why are we adding this in three different places? It's added at the - * end of each case ... */ - this->AddChild( &m_frameStage ); - } - - - // - // Init ez2-specific graphics - // - if( g_StageType == STAGE_TYPE_EZ2 ) - { - ///////////////////////////////////////////////// - // START moving the numbers how ez2 wants them // - ///////////////////////////////////////////////// - - for( i=0; i<4; i++ ) - { - // float fOffsetX = SCALE(i, 0, iNumChars-1, -(iNumChars-1)/2.0f*fFrameWidth, (iNumChars-1)/2.0f*fFrameWidth); - - m_sprNumbers[i].SetXY( CENTER_X - 170 + (90 * i), CENTER_Y ); - m_sprNumbers[i].SetY( CENTER_Y ); - m_sprNumbers[i].ZoomToWidth( 200.0f ); // make the numbers that appear really big - m_sprNumbers[i].ZoomToHeight( 200.0f); // so they can 'shrink' onto the screen - m_sprNumbers[i].SetZoom( 20.0f ); // make it really really big on-screen - m_sprNumbers[i].SetRotationZ( 10 ); // make this thing rotated - - m_sprNumbers[i].BeginTweening(0.8f, Actor::TWEEN_ACCELERATE ); - m_sprNumbers[i].SetTweenZoom( 3.0f ); // shrink it down to it's proper size - m_sprNumbers[i].SetTweenRotationZ( 0 ); // make it rotate into place - } + //StageMode stage_mode; + //if( GAMESTATE->m_PlayMode == PLAY_MODE_NONSTOP ) stage_mode = MODE_NONSTOP; + //else if( GAMESTATE->m_PlayMode == PLAY_MODE_ONI ) stage_mode = MODE_ONI; + //else if( GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS ) stage_mode = MODE_ENDLESS; + //else if( GAMESTATE->IsExtraStage() ) stage_mode = MODE_EXTRA1; + //else if( GAMESTATE->IsExtraStage2() ) stage_mode = MODE_EXTRA2; + //else if( GAMESTATE->IsFinalStage() ) stage_mode = MODE_FINAL; + //else stage_mode = MODE_NORMAL; - // m_frameStage.SetXY( CENTER_X, CENTER_Y ); - /////////////////////////// - // Start Ez2 Backgrounds // - /////////////////////////// - - // Background Blocks rotate their way in + SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage "+GAMESTATE->GetStageText()) ); - int bg_modeoffset=0; // used to shuffle some graphics if we're in FINAL rather than normal stage - float element_y_offsets=0.0f; // used to shuffle some graphics if we're in FINAL rather than nornal stage - if (stage_mode == MODE_FINAL) // if we're in final redefine those offsets - { - element_y_offsets = 25.0f; - bg_modeoffset = 4; // shuffle graphics +4 in the elements file for FINAL graphics. - } +// switch( stage_mode ) +// { +// case MODE_NORMAL: +// { +// const int iStageNo = GAMESTATE->GetStageIndex()+1; +// switch( iStageNo ) +// { +// case 1: break; +// case 2: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 2") ); break; +// case 3: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 3") ); break; +// case 4: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 4") ); break; +// case 5: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 5") ); break; +// case 6: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage 6") ); break; +// default: ; break; // play nothing +// } +// } +// break; +// case MODE_FINAL: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage final") ); break; +// case MODE_EXTRA1: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage extra1") ); break; +// case MODE_EXTRA2: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage extra2") ); break; +// case MODE_NONSTOP: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage nonstop") ); break; +// case MODE_ONI: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage oni") ); break; +// case MODE_ENDLESS: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("stage endless") ); break; +// default: ASSERT(0); +// } +// +// +// // +// // Init common graphics +// // +// this->AddChild( &m_sprSongBackground ); // add background first so it draws bottom-most +// this->AddChild( &m_quadMask ); // add quad mask before stage so that it will block out the stage sprites +// +// int i; +// for( i=0; i<4; i++ ) +// { +// m_sprNumbers[i].Load( THEME->GetPathTo("Graphics","ScreenStage parts 5x3") ); +// +// if( g_StageType != STAGE_TYPE_EZ2 ) // DONT DIFFUSE COLORS FOR EZ2. Coz we actually set the color in the .png +// m_sprNumbers[i].SetDiffuse( GAMESTATE->GetStageColor() ); +// +// m_sprNumbers[i].StopAnimating(); +// } +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage stage") ); // we may load a different graphic into here later +// m_sprStage.SetDiffuse( GAMESTATE->GetStageColor() ); +// +// +// +// switch( stage_mode ) +// { +// case MODE_NORMAL: +// { +// const int iStageNo = GAMESTATE->GetStageIndex()+1; +// +// CString sStageNo = ssprintf("%d", iStageNo); +// +// // Set frame of numbers +// int i; +// for( i=0; iGetPathTo("Graphics","ScreenStage final") ); +// break; +// case MODE_EXTRA1: +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage extra1") ); +// break; +// case MODE_EXTRA2: +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage extra2") ); +// break; +// case MODE_NONSTOP: +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage nonstop") ); +// break; +// case MODE_ONI: +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage oni") ); +// break; +// case MODE_ENDLESS: +// m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenStage endless") ); +// break; +// default: +// ASSERT(0); +// } +// m_frameStage.AddChild( &m_sprStage ); +// +// +// +// // +// // Init dance-specific graphics +// // +// if( g_StageType == STAGE_TYPE_MAX ) +// { +// const float fStageHeight = m_sprStage.GetUnzoomedHeight(); +// +// const float fStageOffScreenY = CENTER_Y+fStageHeight; +// +// // The quadMask masks out draws via Z; it doesn't actually erase +// // anything, so make it transparent. +// m_quadMask.SetDiffuse( RageColor(0,0,0,0) ); +// m_quadMask.StretchTo( RectI(SCREEN_LEFT, int(roundf(fStageOffScreenY-fStageHeight/2)), +// SCREEN_RIGHT, int(roundf(fStageOffScreenY+fStageHeight/2))) ); +// // Put the quad mask on top, so draws to the Stage will be "under" it. +// m_quadMask.SetZ( 1 ); +// +// m_frameStage.SetXY( CENTER_X, fStageOffScreenY ); +// m_frameStage.BeginTweening(0.8f, Actor::TWEEN_DECELERATE ); +// m_frameStage.SetTweenY( CENTER_Y ); +// +// this->AddChild( &m_quadMask ); // add quad mask before stage so that it will block out the stage sprites +// this->AddChild( &m_frameStage ); +// } +// +// +// // +// // Init pump-sepecific graphics +// // +// if( g_StageType == STAGE_TYPE_PUMP ) +// { +// const Song* pSong = GAMESTATE->m_pCurSong; +// m_sprSongBackground.Load( (pSong && pSong->HasBackground()) ? pSong->GetBackgroundPath() : THEME->GetPathTo("Graphics","fallback background") ); +// m_sprSongBackground.StretchTo( RectI(SCREEN_LEFT,SCREEN_TOP,SCREEN_RIGHT,SCREEN_BOTTOM) ); +// +// /* Move the stage numbers downward, so they don't overlay the +// * center of the image. */ +// m_frameStage.SetXY( CENTER_X, CENTER_Y+160 ); +// m_frameStage.SetZoom( 0.5f ); +// +// /* Why are we adding this in three different places? It's added at the +// * end of each case ... */ +// this->AddChild( &m_frameStage ); +// } +// +// +// // +// // Init ez2-specific graphics +// // +// if( g_StageType == STAGE_TYPE_EZ2 ) +// { +// ///////////////////////////////////////////////// +// // START moving the numbers how ez2 wants them // +// ///////////////////////////////////////////////// +// +// for( i=0; i<4; i++ ) +// { +// // float fOffsetX = SCALE(i, 0, iNumChars-1, -(iNumChars-1)/2.0f*fFrameWidth, (iNumChars-1)/2.0f*fFrameWidth); +// +// m_sprNumbers[i].SetXY( CENTER_X - 170 + (90 * i), CENTER_Y ); +// m_sprNumbers[i].SetY( CENTER_Y ); +// m_sprNumbers[i].ZoomToWidth( 200.0f ); // make the numbers that appear really big +// m_sprNumbers[i].ZoomToHeight( 200.0f); // so they can 'shrink' onto the screen +// m_sprNumbers[i].SetZoom( 20.0f ); // make it really really big on-screen +// m_sprNumbers[i].SetRotationZ( 10 ); // make this thing rotated +// +// m_sprNumbers[i].BeginTweening(0.8f, Actor::TWEEN_ACCELERATE ); +// m_sprNumbers[i].SetTweenZoom( 3.0f ); // shrink it down to it's proper size +// m_sprNumbers[i].SetTweenRotationZ( 0 ); // make it rotate into place +// } +// +// // m_frameStage.SetXY( CENTER_X, CENTER_Y ); +// +// /////////////////////////// +// // Start Ez2 Backgrounds // +// /////////////////////////// +// +// // Background Blocks rotate their way in +// +// int bg_modeoffset=0; // used to shuffle some graphics if we're in FINAL rather than normal stage +// float element_y_offsets=0.0f; // used to shuffle some graphics if we're in FINAL rather than nornal stage +// if (stage_mode == MODE_FINAL) // if we're in final redefine those offsets +// { +// element_y_offsets = 25.0f; +// bg_modeoffset = 4; // shuffle graphics +4 in the elements file for FINAL graphics. +// } +// +// for (i=0; i<3; i++) // Load In The Background Graphics +// { +// m_sprbg[i].Load( THEME->GetPathTo("Graphics","stage elements") ); +// m_sprbg[i].StopAnimating(); +// m_sprbg[i].SetState( i+bg_modeoffset ); // We wanna use i to load in an element from the graphicmap OR the offset will +// // give us alternative locations if we're in final +// } +// +// // Final mode is a little more special than our regular normal stage screen +// // it has FOUR background elements. +// // so if we should actually be on final stage +// // setup this extra background element +// +// if (stage_mode == MODE_FINAL) +// { +// m_sprbgxtra.Load( THEME->GetPathTo("Graphics","stage elements") ); // get the graphic +// m_sprbgxtra.StopAnimating(); +// m_sprbgxtra.SetState( bg_modeoffset ); // use the first element of the offset for this graphic +// m_sprbgxtra.SetXY( CENTER_X-30, CENTER_Y+180); // set it's initial XY coordinates +// m_sprbgxtra.ZoomToHeight( 30 ); // set it's height and width. As we're only dealing with solid color +// m_sprbgxtra.ZoomToWidth( SCREEN_WIDTH + 50 ); // stretching shouldn't be a concern. +// m_sprbgxtra.SetRotationZ( -20 ); // rotate this graphic +// m_sprbgxtra.BeginTweening(0.3f); // start tweening +// m_sprbgxtra.SetTweenRotationZ( 0 ); // set the rotation we want it to finally appear as +// } +// +// +// if (stage_mode == MODE_FINAL) +// m_sprbg[0].SetXY( CENTER_X-30, CENTER_Y-160); +// else +// m_sprbg[0].SetXY( CENTER_X, CENTER_Y+150); +// // Fairly high in normal, "squashed" in final. +// if (stage_mode == MODE_FINAL) +// m_sprbg[0].ZoomToHeight( 30 ); +// else +// m_sprbg[0].ZoomToHeight( 100 ); +// +// m_sprbg[0].ZoomToWidth( SCREEN_WIDTH + 50 ); // no matter what... it's this wide +// m_sprbg[0].SetRotationZ( -20 ); // and is initially this rotation +// m_sprbg[0].BeginTweening(0.3f); // start tweening +// m_sprbg[0].SetTweenRotationZ( 0 ); // and set the rotation to where we want it to end up +// +// m_sprbg[1].SetXY( CENTER_X-(SCREEN_WIDTH/2)-20, CENTER_Y+element_y_offsets); +// m_sprbg[1].ZoomToHeight( SCREEN_HEIGHT - 140 ); +// m_sprbg[1].ZoomToWidth( 130 ); +// m_sprbg[1].SetRotationZ( -20 ); +// m_sprbg[1].BeginTweening(0.3f); +// m_sprbg[1].SetTweenRotationZ( 0 ); +// +// m_sprbg[2].SetXY( CENTER_X+430, CENTER_Y+element_y_offsets); +// m_sprbg[2].ZoomToHeight( SCREEN_HEIGHT - 140 ); +// m_sprbg[2].ZoomToWidth( SCREEN_WIDTH + 50 ); +// m_sprbg[2].SetRotationZ( -20 ); +// m_sprbg[2].BeginTweening(0.3f); +// m_sprbg[2].SetTweenX( CENTER_X ); +// m_sprbg[2].SetTweenRotationZ( 0 ); +// +// for (i = 3; i >= 0; i--) // add them backwards +// AddChild( &m_sprbg[i] ); +// +// if (stage_mode == MODE_FINAL) // if we're in FINAL add that extra background element mentioned earlier. +// AddChild( &m_sprbgxtra ); +// +// +// ///////////////////////// +// // END Ez2 Backgrounds // +// ///////////////////////// +// +// +// ////////////////////////////// +// // START stage description // +// // and gamename tag display // +// ////////////////////////////// +// +// // scroll in the name of the game ("ez2dancer ukmove" on arcade) across the top of the screen +// +// for (i=0; i<2; i++) // specify the font file. +// { +// m_ez2ukm[i].LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); +// m_ez2ukm[i].EnableShadow( false ); +// m_stagedesc[i].LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); +// m_stagedesc[i].EnableShadow( false ); +// } +// +// m_ez2ukm[0].SetXY( CENTER_X-400, CENTER_Y-220 ); // set the intiial UKMOVE positions +// m_ez2ukm[1].SetXY( CENTER_X+400, CENTER_Y+220 ); +// +// +// m_stagedesc[0].SetXY( CENTER_X-400, CENTER_Y-150+element_y_offsets ); // set the intiial desc positions +// m_stagedesc[1].SetXY( CENTER_X+400, CENTER_Y+70+element_y_offsets ); +// +// if (stage_mode == MODE_FINAL) +// { +// m_stagedesc[1].SetY( CENTER_Y+140.0f ); // description text is in a different Y location on final stage +// } +// +// for (i=0; i<2; i++) // initialize the UK MOVE text and positions +// { +// m_ez2ukm[i].SetText( "STEPMANIA EZ2 MOVE" ); // choose something better if you like ;) +// m_ez2ukm[i].SetDiffuse( RageColor(1,1,1,1) ); // it's white +// m_ez2ukm[i].BeginTweening(0.5f); // start it tweening +// if (stage_mode == MODE_FINAL) +// { +// m_stagedesc[i].SetText( "FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL" ); // this is the desc text for final stage +// m_stagedesc[i].SetDiffuse( RageColor(1.0f/225.0f*227.0f,1.0f/225.0f*228.0f,1/225.0f*255.0f,1) ); // it's blueish +// } +// else +// { +// m_stagedesc[i].SetText( "NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT" ); // normal stages use this text +// m_stagedesc[i].SetDiffuse( RageColor(1.0f/225.0f*166.0f,1.0f/225.0f*83.0f,1/225.0f*16.0f,1) ); // it's orangey +// } +// m_stagedesc[i].BeginTweening(0.5f); // start tweening the descriptions +// +// } +// +// m_ez2ukm[0].SetTweenX(CENTER_X+90); // set their new locations +// m_ez2ukm[1].SetTweenX(CENTER_X-160); +// m_stagedesc[0].SetTweenX(CENTER_X+10); // set their new locations +// m_stagedesc[1].SetTweenX(CENTER_X-100); +// +// for (i=0; i<2; i++) // add the actors +// { +// AddChild( &m_ez2ukm[i] ); +// AddChild( &m_stagedesc[i] ); +// } +// +// ////////////////////////////// +// // END stage description // +// // and gamename tag display // +// ////////////////////////////// +// +// ////////////////////////////// +// // START scrolling blobs // +// ////////////////////////////// +// +// +// // 20 Scrolling Blobs come in one at a time from either side at the bottom in the following code: +// +// // there are two sets of blobs, each with 20 elements in them +// // they don't just scroll all together at the same time. +// // theres an effect as if the'res a long line of them and they 'bump' into each other when the first one stops +// // so take a careful look at the starting position and the final tween positions of these critters. +// +// for( int j=0; j<2; j++) // 2 sets..... +// { +// for (i=0; i<20; i++) // 20 blobs... +// { +// m_sprScrollingBlobs[j][i].Load( THEME->GetPathTo("Graphics","stage elements") ); // load the graphics +// m_sprScrollingBlobs[j][i].StopAnimating(); +// m_sprScrollingBlobs[j][i].SetState( 3+bg_modeoffset ); // shuffle the state according to offset +// // (final uses different blobs) +// if (j == 0) // if it's the first set +// { +// m_sprScrollingBlobs[j][i].SetXY( CENTER_X-(SCREEN_WIDTH/2)-500-((i*i)*4), CENTER_Y + 135 ); // starting position +// if (stage_mode == MODE_FINAL) +// { +// m_sprScrollingBlobs[j][i].SetY( CENTER_Y-160); // different Y position for FINAL stage +// } +// } +// else // if it's the second set +// { +// m_sprScrollingBlobs[j][i].SetXY( CENTER_X+(SCREEN_WIDTH/2)+500-((i*i)*4), CENTER_Y+170 ); // starting position +// if (stage_mode == MODE_FINAL) +// { +// m_sprScrollingBlobs[j][i].SetY( CENTER_Y+180 ); // different Y position for FINAL stage +// } +// } +// +// m_sprScrollingBlobs[j][i].BeginTweening(0.2f * i / 7); // start them tweening, different delay for each blob +// if (j == 0) // set 1 +// m_sprScrollingBlobs[j][i].SetTweenX(CENTER_X-(SCREEN_WIDTH/2)+30+(i*30.0f)); // keep them at equal distance when they arrive +// else // set 2 +// m_sprScrollingBlobs[j][i].SetTweenX(CENTER_X+(SCREEN_WIDTH/2)+30-70-(i*30.0f)); +// +// AddChild( &m_sprScrollingBlobs[j][i] ); +// } +// } +// +// ////////////////////////////// +// // END scrolling blobs // +// ////////////////////////////// +// +// ////////////////////////////// +// // START stage name // +// ////////////////////////////// +// +// // in this bit we write the stage name onto the screen +// // basically instead of 1st 2nd 3rd e.t.c. +// // ez2dancer spells it fully +// // The First Stage.... The Second Stage +// // this is what this bit implements +// +// +// // write the stage name +// m_stagename.LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); +// m_stagename.EnableShadow( false ); +// +// m_stagename.SetXY( CENTER_X+400, CENTER_Y-30+element_y_offsets ); // set initial position +// +// const int iStageNo = GAMESTATE->GetStageIndex()+1; +// switch (iStageNo) // from the stage number figure out which text to use +// { +// case 0: m_stagename.SetText( "THE NEXT STAGE" ); break; +// case 1: m_stagename.SetText( "THE FIRST STAGE" ); break; +// case 2: m_stagename.SetText( "THE SECOND STAGE" ); break; +// case 3: m_stagename.SetText( "THE THIRD STAGE" ); break; +// case 4: m_stagename.SetText( "THE FOURTH STAGE" ); break; +// case 5: m_stagename.SetText( "THE FIFTH STAGE" ); break; +// case 6: m_stagename.SetText( "THE SIXTH STAGE" ); break; +// case 7: m_stagename.SetText( "THE SEVENTH STAGE" ); break; +// case 8: case 9: m_stagename.SetText("THE NEXT STAGE"); break; +// default: m_stagename.SetText( "" ); break; // make this text disappear. +// } +// +// m_stagename.SetDiffuse( RageColor(1.0f/225.0f*166.0f,1.0f/225.0f*83.0f,1/225.0f*16.0f,1) ); // orangey colour +// +// if (stage_mode == MODE_FINAL) // if we're final stage +// { +// m_stagename.SetDiffuse( RageColor(1.0f/225.0f*227.0f,1.0f/225.0f*228.0f,1/225.0f*255.0f,1) ); // blueish colour +// m_stagename.SetText( "THE FINAL STAGE" ); +// } +// +// m_stagename.BeginTweening(0.5f); // start tweening them to their new home +// +// m_stagename.SetTweenX(CENTER_X+70); // set their new locations +// AddChild( &m_stagename ); //add the actor +// +// this->AddChild( &m_frameStage ); +// +// ////////////////////////////// +// // END stage name // +// ////////////////////////////// +// +// m_sprStage.SetZoom( 0 ); // hide this element for Ez2 :) +// } +// +// this->AddChild( &m_Fade ); // fade should draw last, on top of everything else +// m_Fade.SetOpened(); +//*/ - for (i=0; i<3; i++) // Load In The Background Graphics - { - m_sprbg[i].Load( THEME->GetPathTo("Graphics","stage elements") ); - m_sprbg[i].StopAnimating(); - m_sprbg[i].SetState( i+bg_modeoffset ); // We wanna use i to load in an element from the graphicmap OR the offset will - // give us alternative locations if we're in final - } - - // Final mode is a little more special than our regular normal stage screen - // it has FOUR background elements. - // so if we should actually be on final stage - // setup this extra background element - - if (stage_mode == MODE_FINAL) - { - m_sprbgxtra.Load( THEME->GetPathTo("Graphics","stage elements") ); // get the graphic - m_sprbgxtra.StopAnimating(); - m_sprbgxtra.SetState( bg_modeoffset ); // use the first element of the offset for this graphic - m_sprbgxtra.SetXY( CENTER_X-30, CENTER_Y+180); // set it's initial XY coordinates - m_sprbgxtra.ZoomToHeight( 30 ); // set it's height and width. As we're only dealing with solid color - m_sprbgxtra.ZoomToWidth( SCREEN_WIDTH + 50 ); // stretching shouldn't be a concern. - m_sprbgxtra.SetRotationZ( -20 ); // rotate this graphic - m_sprbgxtra.BeginTweening(0.3f); // start tweening - m_sprbgxtra.SetTweenRotationZ( 0 ); // set the rotation we want it to finally appear as - } - - - if (stage_mode == MODE_FINAL) - m_sprbg[0].SetXY( CENTER_X-30, CENTER_Y-160); - else - m_sprbg[0].SetXY( CENTER_X, CENTER_Y+150); - // Fairly high in normal, "squashed" in final. - if (stage_mode == MODE_FINAL) - m_sprbg[0].ZoomToHeight( 30 ); - else - m_sprbg[0].ZoomToHeight( 100 ); - - m_sprbg[0].ZoomToWidth( SCREEN_WIDTH + 50 ); // no matter what... it's this wide - m_sprbg[0].SetRotationZ( -20 ); // and is initially this rotation - m_sprbg[0].BeginTweening(0.3f); // start tweening - m_sprbg[0].SetTweenRotationZ( 0 ); // and set the rotation to where we want it to end up - - m_sprbg[1].SetXY( CENTER_X-(SCREEN_WIDTH/2)-20, CENTER_Y+element_y_offsets); - m_sprbg[1].ZoomToHeight( SCREEN_HEIGHT - 140 ); - m_sprbg[1].ZoomToWidth( 130 ); - m_sprbg[1].SetRotationZ( -20 ); - m_sprbg[1].BeginTweening(0.3f); - m_sprbg[1].SetTweenRotationZ( 0 ); - - m_sprbg[2].SetXY( CENTER_X+430, CENTER_Y+element_y_offsets); - m_sprbg[2].ZoomToHeight( SCREEN_HEIGHT - 140 ); - m_sprbg[2].ZoomToWidth( SCREEN_WIDTH + 50 ); - m_sprbg[2].SetRotationZ( -20 ); - m_sprbg[2].BeginTweening(0.3f); - m_sprbg[2].SetTweenX( CENTER_X ); - m_sprbg[2].SetTweenRotationZ( 0 ); - - for (i = 3; i >= 0; i--) // add them backwards - AddChild( &m_sprbg[i] ); - - if (stage_mode == MODE_FINAL) // if we're in FINAL add that extra background element mentioned earlier. - AddChild( &m_sprbgxtra ); - - - ///////////////////////// - // END Ez2 Backgrounds // - ///////////////////////// - - - ////////////////////////////// - // START stage description // - // and gamename tag display // - ////////////////////////////// - - // scroll in the name of the game ("ez2dancer ukmove" on arcade) across the top of the screen - - for (i=0; i<2; i++) // specify the font file. - { - m_ez2ukm[i].LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); - m_ez2ukm[i].EnableShadow( false ); - m_stagedesc[i].LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); - m_stagedesc[i].EnableShadow( false ); - } - - m_ez2ukm[0].SetXY( CENTER_X-400, CENTER_Y-220 ); // set the intiial UKMOVE positions - m_ez2ukm[1].SetXY( CENTER_X+400, CENTER_Y+220 ); - - - m_stagedesc[0].SetXY( CENTER_X-400, CENTER_Y-150+element_y_offsets ); // set the intiial desc positions - m_stagedesc[1].SetXY( CENTER_X+400, CENTER_Y+70+element_y_offsets ); - - if (stage_mode == MODE_FINAL) - { - m_stagedesc[1].SetY( CENTER_Y+140.0f ); // description text is in a different Y location on final stage - } - - for (i=0; i<2; i++) // initialize the UK MOVE text and positions - { - m_ez2ukm[i].SetText( "STEPMANIA EZ2 MOVE" ); // choose something better if you like ;) - m_ez2ukm[i].SetDiffuse( RageColor(1,1,1,1) ); // it's white - m_ez2ukm[i].BeginTweening(0.5f); // start it tweening - if (stage_mode == MODE_FINAL) - { - m_stagedesc[i].SetText( "FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL FINAL" ); // this is the desc text for final stage - m_stagedesc[i].SetDiffuse( RageColor(1.0f/225.0f*227.0f,1.0f/225.0f*228.0f,1/225.0f*255.0f,1) ); // it's blueish - } - else - { - m_stagedesc[i].SetText( "NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT NEXT" ); // normal stages use this text - m_stagedesc[i].SetDiffuse( RageColor(1.0f/225.0f*166.0f,1.0f/225.0f*83.0f,1/225.0f*16.0f,1) ); // it's orangey - } - m_stagedesc[i].BeginTweening(0.5f); // start tweening the descriptions - - } - - m_ez2ukm[0].SetTweenX(CENTER_X+90); // set their new locations - m_ez2ukm[1].SetTweenX(CENTER_X-160); - m_stagedesc[0].SetTweenX(CENTER_X+10); // set their new locations - m_stagedesc[1].SetTweenX(CENTER_X-100); - - for (i=0; i<2; i++) // add the actors - { - AddChild( &m_ez2ukm[i] ); - AddChild( &m_stagedesc[i] ); - } - - ////////////////////////////// - // END stage description // - // and gamename tag display // - ////////////////////////////// - - ////////////////////////////// - // START scrolling blobs // - ////////////////////////////// - - - // 20 Scrolling Blobs come in one at a time from either side at the bottom in the following code: - - // there are two sets of blobs, each with 20 elements in them - // they don't just scroll all together at the same time. - // theres an effect as if the'res a long line of them and they 'bump' into each other when the first one stops - // so take a careful look at the starting position and the final tween positions of these critters. - - for( int j=0; j<2; j++) // 2 sets..... - { - for (i=0; i<20; i++) // 20 blobs... - { - m_sprScrollingBlobs[j][i].Load( THEME->GetPathTo("Graphics","stage elements") ); // load the graphics - m_sprScrollingBlobs[j][i].StopAnimating(); - m_sprScrollingBlobs[j][i].SetState( 3+bg_modeoffset ); // shuffle the state according to offset - // (final uses different blobs) - if (j == 0) // if it's the first set - { - m_sprScrollingBlobs[j][i].SetXY( CENTER_X-(SCREEN_WIDTH/2)-500-((i*i)*4), CENTER_Y + 135 ); // starting position - if (stage_mode == MODE_FINAL) - { - m_sprScrollingBlobs[j][i].SetY( CENTER_Y-160); // different Y position for FINAL stage - } - } - else // if it's the second set - { - m_sprScrollingBlobs[j][i].SetXY( CENTER_X+(SCREEN_WIDTH/2)+500-((i*i)*4), CENTER_Y+170 ); // starting position - if (stage_mode == MODE_FINAL) - { - m_sprScrollingBlobs[j][i].SetY( CENTER_Y+180 ); // different Y position for FINAL stage - } - } - - m_sprScrollingBlobs[j][i].BeginTweening(0.2f * i / 7); // start them tweening, different delay for each blob - if (j == 0) // set 1 - m_sprScrollingBlobs[j][i].SetTweenX(CENTER_X-(SCREEN_WIDTH/2)+30+(i*30.0f)); // keep them at equal distance when they arrive - else // set 2 - m_sprScrollingBlobs[j][i].SetTweenX(CENTER_X+(SCREEN_WIDTH/2)+30-70-(i*30.0f)); - - AddChild( &m_sprScrollingBlobs[j][i] ); - } - } - - ////////////////////////////// - // END scrolling blobs // - ////////////////////////////// - - ////////////////////////////// - // START stage name // - ////////////////////////////// - - // in this bit we write the stage name onto the screen - // basically instead of 1st 2nd 3rd e.t.c. - // ez2dancer spells it fully - // The First Stage.... The Second Stage - // this is what this bit implements - - - // write the stage name - m_stagename.LoadFromFont( THEME->GetPathTo("Fonts","Stage ez2") ); - m_stagename.EnableShadow( false ); - - m_stagename.SetXY( CENTER_X+400, CENTER_Y-30+element_y_offsets ); // set initial position - - const int iStageNo = GAMESTATE->GetStageIndex()+1; - switch (iStageNo) // from the stage number figure out which text to use - { - case 0: m_stagename.SetText( "THE NEXT STAGE" ); break; - case 1: m_stagename.SetText( "THE FIRST STAGE" ); break; - case 2: m_stagename.SetText( "THE SECOND STAGE" ); break; - case 3: m_stagename.SetText( "THE THIRD STAGE" ); break; - case 4: m_stagename.SetText( "THE FOURTH STAGE" ); break; - case 5: m_stagename.SetText( "THE FIFTH STAGE" ); break; - case 6: m_stagename.SetText( "THE SIXTH STAGE" ); break; - case 7: m_stagename.SetText( "THE SEVENTH STAGE" ); break; - case 8: case 9: m_stagename.SetText("THE NEXT STAGE"); break; - default: m_stagename.SetText( "" ); break; // make this text disappear. - } - - m_stagename.SetDiffuse( RageColor(1.0f/225.0f*166.0f,1.0f/225.0f*83.0f,1/225.0f*16.0f,1) ); // orangey colour - - if (stage_mode == MODE_FINAL) // if we're final stage - { - m_stagename.SetDiffuse( RageColor(1.0f/225.0f*227.0f,1.0f/225.0f*228.0f,1/225.0f*255.0f,1) ); // blueish colour - m_stagename.SetText( "THE FINAL STAGE" ); - } - - m_stagename.BeginTweening(0.5f); // start tweening them to their new home - - m_stagename.SetTweenX(CENTER_X+70); // set their new locations - AddChild( &m_stagename ); //add the actor - - this->AddChild( &m_frameStage ); - - ////////////////////////////// - // END stage name // - ////////////////////////////// - - m_sprStage.SetZoom( 0 ); // hide this element for Ez2 :) - } - - this->AddChild( &m_Fade ); // fade should draw last, on top of everything else - m_Fade.SetOpened(); - - this->SendScreenMessage( SM_DoneFadingIn, 1.0f ); - this->SendScreenMessage( SM_StartFadingOut, 4.0f ); + //this->SendScreenMessage( SM_DoneFadingIn, 1.0f ); + //this->SendScreenMessage( SM_StartFadingOut, 4.0f ); } void ScreenStage::Update( float fDeltaTime ) @@ -540,26 +554,32 @@ void ScreenStage::Update( float fDeltaTime ) void ScreenStage::DrawPrimitives() { - // Enable Zbuffering for the mask in the dance mode - if( g_StageType == STAGE_TYPE_MAX ) - DISPLAY->EnableZBuffer(); + //// Enable Zbuffering for the mask in the dance mode + //if( g_StageType == STAGE_TYPE_MAX ) + // DISPLAY->EnableZBuffer(); Screen::DrawPrimitives(); - if( g_StageType == STAGE_TYPE_MAX ) - DISPLAY->DisableZBuffer(); + //if( g_StageType == STAGE_TYPE_MAX ) + // DISPLAY->DisableZBuffer(); } void ScreenStage::HandleScreenMessage( const ScreenMessage SM ) { switch( SM ) { - case SM_StartFadingOut: - m_Fade.CloseWipingRight( SM_GoToNextScreen ); + case SM_LoadPrepedScreen: + SCREENMAN->PrepNewScreen( NEXT_SCREEN ); break; - case SM_DoneFadingIn: - SCREENMAN->PrepNewScreen( "ScreenGameplay" ); + case SM_BeginFadingOut: + m_Out.StartTransitioning( SM_GoToNextScreen ); break; + //case SM_StartFadingOut: + // m_Fade.CloseWipingRight( SM_GoToNextScreen ); + // break; + //case SM_DoneFadingIn: + // SCREENMAN->PrepNewScreen( "ScreenGameplay" ); + // break; case SM_GoToNextScreen: SCREENMAN->LoadPreppedScreen(); /* use prepped */ break; diff --git a/stepmania/src/ScreenStage.h b/stepmania/src/ScreenStage.h index d1b2cb55d9..f65694ba25 100644 --- a/stepmania/src/ScreenStage.h +++ b/stepmania/src/ScreenStage.h @@ -10,10 +10,7 @@ */ #include "Screen.h" -#include "ActorFrame.h" -#include "Actor.h" -#include "TransitionFade.h" -#include "song.h" +#include "TransitionBGAnimation.h" class ScreenStage : public Screen { @@ -26,12 +23,15 @@ public: private: - // Common Elements + // Ez2 and Pump Stage screens should be re-implemented as BGAnimations + +/* + // Common Elements Sprite m_sprNumbers[4]; // up to 3 numbers and suffix Sprite m_sprStage; // "Stage", "Final Stage", etc. - /* A frame for m_sprNumbers and m_sprStage, so they can be - * manipulated as a unit. */ + // A frame for m_sprNumbers and m_sprStage, so they can be + // manipulated as a unit. ActorFrame m_frameStage; // Ez2 Elements @@ -48,8 +48,9 @@ private: Sprite m_sprSongBackground; Quad m_quadMask; // write this into ZBuffer as a mask - - TransitionFade m_Fade; +*/ + TransitionBGAnimation m_In, m_Out; + BGAnimation m_Background; protected: diff --git a/stepmania/src/Sprite.cpp b/stepmania/src/Sprite.cpp index f1b4e104da..c198c49f9e 100644 --- a/stepmania/src/Sprite.cpp +++ b/stepmania/src/Sprite.cpp @@ -141,6 +141,9 @@ void Sprite::UnloadTexture() bool Sprite::LoadFromTexture( RageTextureID ID ) { + if( m_pTexture && m_pTexture->GetID()==ID ) // don't do anything if this texture is already loaded + return true; + UnloadTexture(); m_pTexture = TEXTUREMAN->LoadTexture( ID ); diff --git a/stepmania/src/Sprite.h b/stepmania/src/Sprite.h index 6a800c19b6..83530a3669 100644 --- a/stepmania/src/Sprite.h +++ b/stepmania/src/Sprite.h @@ -60,7 +60,7 @@ public: virtual void SetState( int iNewState ); int GetNumStates() { return m_iNumStates; }; - CString GetTexturePath() { ASSERT(m_pTexture); return m_pTexture->GetID().filename; }; + CString GetTexturePath() { return m_pTexture==NULL ? "" : m_pTexture->GetID().filename; }; void SetCustomTextureRect( const RectF &new_texcoord_frect ); void SetCustomTextureCoords( float fTexCoords[8] ); diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 3fb4a56bc3..17da0a9bd3 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -57,10 +57,10 @@ LINK32=link.exe # SUBTRACT LINK32 /verbose /pdb:none # Begin Special Build Tool IntDir=.\../Release6 -TargetDir=\stepmania +TargetDir=\stepmania\stepmania TargetName=StepMania SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -92,10 +92,10 @@ LINK32=link.exe # SUBTRACT LINK32 /verbose /profile /pdb:none /incremental:no /nodefaultlib # Begin Special Build Tool IntDir=.\../Debug6 -TargetDir=\stepmania +TargetDir=\stepmania\stepmania TargetName=StepMania-debug SOURCE="$(InputPath)" -PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ +PreLink_Cmds=disasm\verinc cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ PostBuild_Cmds=disasm\mapconv $(IntDir)\$(TargetName).map $(TargetDir)\StepMania.vdi ia32.vdi # End Special Build Tool @@ -1228,14 +1228,6 @@ SOURCE=.\SnapDisplay.h # End Source File # Begin Source File -SOURCE=.\StageDisplay.cpp -# End Source File -# Begin Source File - -SOURCE=.\StageDisplay.h -# End Source File -# Begin Source File - SOURCE=.\TextBanner.cpp # End Source File # Begin Source File diff --git a/stepmania/src/StepMania.vcproj b/stepmania/src/StepMania.vcproj index 012ef52757..fa2d036140 100644 --- a/stepmania/src/StepMania.vcproj +++ b/stepmania/src/StepMania.vcproj @@ -1196,12 +1196,6 @@ cl /Zl /nologo /c verstub.cpp /Fo$(IntDir)\ - - - -