From 080a92450c895d44fad1d9b988486117fe0642a3 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 10 Mar 2003 00:16:49 +0000 Subject: [PATCH] SelectGroup animations converted to commands ScreenStage animations converted to TransitionBGAnimations Changed all Stage BitmapTexts to Sprites --- .../default/Fonts/MusicList titles 16x16.png | Bin 0 -> 22339 bytes .../Fonts/MusicList titles [extras].png | Bin 0 -> 331 bytes .../Themes/default/Fonts/MusicList titles.ini | 267 +++++ .../Themes/default/Graphics/GroupList bar.png | Bin 0 -> 5710 bytes stepmania/Themes/default/metrics.ini | 72 +- stepmania/src/Background.cpp | 2 +- stepmania/src/Banner.cpp | 2 +- stepmania/src/GameState.cpp | 58 +- stepmania/src/GameState.h | 1 - stepmania/src/GroupList.cpp | 88 +- stepmania/src/GroupList.h | 7 +- stepmania/src/MusicList.cpp | 43 +- stepmania/src/RageTexture.cpp | 13 + stepmania/src/RageTexture.h | 1 + stepmania/src/ScreenEvaluation.cpp | 19 +- stepmania/src/ScreenEvaluation.h | 2 +- stepmania/src/ScreenGameplay.cpp | 19 +- stepmania/src/ScreenGameplay.h | 3 +- stepmania/src/ScreenInstructions.cpp | 4 +- stepmania/src/ScreenSelectGroup.cpp | 107 +- stepmania/src/ScreenSelectMusic.cpp | 13 +- stepmania/src/ScreenSelectMusic.h | 3 +- stepmania/src/ScreenStage.cpp | 974 +++++++++--------- stepmania/src/ScreenStage.h | 19 +- stepmania/src/Sprite.cpp | 3 + stepmania/src/Sprite.h | 2 +- stepmania/src/StepMania.dsp | 16 +- stepmania/src/StepMania.vcproj | 6 - 28 files changed, 961 insertions(+), 783 deletions(-) create mode 100644 stepmania/Themes/default/Fonts/MusicList titles 16x16.png create mode 100644 stepmania/Themes/default/Fonts/MusicList titles [extras].png create mode 100644 stepmania/Themes/default/Fonts/MusicList titles.ini create mode 100644 stepmania/Themes/default/Graphics/GroupList bar.png 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 0000000000000000000000000000000000000000..0b91d1e11f8f967a71698c843aecd90ca3a8818b GIT binary patch literal 22339 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 Sem*nMGYp=telF{r5}E*PcWiM0 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..209c5a25591d257c1b4527ce42942f71dc32291e GIT binary patch literal 5710 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 literal 0 HcmV?d00001 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)\ - - - -