From 2380638072a93204dda00985e78ab33e05e99b5d Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Sun, 28 Dec 2003 08:20:48 +0000 Subject: [PATCH] cleanup ScreenRanking generalize scrolling lists with ListDisplay --- .../Fonts/ScreenRanking category.redir | 1 + .../default/Fonts/ScreenRanking name.redir | 1 + .../default/Fonts/ScreenRanking points.redir | 1 + .../default/Fonts/ScreenRanking score.redir | 1 + .../Fonts/ScreenRanking song title.redir | 1 + .../Fonts/ScreenRanking steps score.redir | 1 + .../Fonts/ScreenRanking steps type.redir | 1 + .../default/Fonts/ScreenRanking time.redir | 1 + .../Fonts/_ScreenRanking common 16x16.png | Bin 0 -> 23017 bytes .../default/Fonts/_ScreenRanking common.ini | 261 ++++++ .../Graphics/ScreenRanking song frame.redir | 1 + stepmania/Themes/default/metrics.ini | 157 ++-- stepmania/src/Actor.h | 1 + stepmania/src/ActorUtil.cpp | 4 + stepmania/src/GameState.cpp | 5 + stepmania/src/GameState.h | 5 +- stepmania/src/ListDisplay.cpp | 159 ++++ stepmania/src/ListDisplay.h | 51 ++ stepmania/src/ScreenRanking.cpp | 769 ++++++++++-------- stepmania/src/ScreenRanking.h | 43 +- stepmania/src/StepMania.dsp | 31 +- 21 files changed, 1027 insertions(+), 468 deletions(-) create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking category.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking name.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking points.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking score.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking song title.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking steps score.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking steps type.redir create mode 100644 stepmania/Themes/default/Fonts/ScreenRanking time.redir create mode 100644 stepmania/Themes/default/Fonts/_ScreenRanking common 16x16.png create mode 100644 stepmania/Themes/default/Fonts/_ScreenRanking common.ini create mode 100644 stepmania/Themes/default/Graphics/ScreenRanking song frame.redir create mode 100644 stepmania/src/ListDisplay.cpp create mode 100644 stepmania/src/ListDisplay.h diff --git a/stepmania/Themes/default/Fonts/ScreenRanking category.redir b/stepmania/Themes/default/Fonts/ScreenRanking category.redir new file mode 100644 index 0000000000..ba41a9d72b --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking category.redir @@ -0,0 +1 @@ +_shared2 diff --git a/stepmania/Themes/default/Fonts/ScreenRanking name.redir b/stepmania/Themes/default/Fonts/ScreenRanking name.redir new file mode 100644 index 0000000000..58f4f9dfe6 --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking name.redir @@ -0,0 +1 @@ +_ScreenRanking common diff --git a/stepmania/Themes/default/Fonts/ScreenRanking points.redir b/stepmania/Themes/default/Fonts/ScreenRanking points.redir new file mode 100644 index 0000000000..58f4f9dfe6 --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking points.redir @@ -0,0 +1 @@ +_ScreenRanking common diff --git a/stepmania/Themes/default/Fonts/ScreenRanking score.redir b/stepmania/Themes/default/Fonts/ScreenRanking score.redir new file mode 100644 index 0000000000..58f4f9dfe6 --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking score.redir @@ -0,0 +1 @@ +_ScreenRanking common diff --git a/stepmania/Themes/default/Fonts/ScreenRanking song title.redir b/stepmania/Themes/default/Fonts/ScreenRanking song title.redir new file mode 100644 index 0000000000..ba41a9d72b --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking song title.redir @@ -0,0 +1 @@ +_shared2 diff --git a/stepmania/Themes/default/Fonts/ScreenRanking steps score.redir b/stepmania/Themes/default/Fonts/ScreenRanking steps score.redir new file mode 100644 index 0000000000..ba41a9d72b --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking steps score.redir @@ -0,0 +1 @@ +_shared2 diff --git a/stepmania/Themes/default/Fonts/ScreenRanking steps type.redir b/stepmania/Themes/default/Fonts/ScreenRanking steps type.redir new file mode 100644 index 0000000000..ba41a9d72b --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking steps type.redir @@ -0,0 +1 @@ +_shared2 diff --git a/stepmania/Themes/default/Fonts/ScreenRanking time.redir b/stepmania/Themes/default/Fonts/ScreenRanking time.redir new file mode 100644 index 0000000000..58f4f9dfe6 --- /dev/null +++ b/stepmania/Themes/default/Fonts/ScreenRanking time.redir @@ -0,0 +1 @@ +_ScreenRanking common diff --git a/stepmania/Themes/default/Fonts/_ScreenRanking common 16x16.png b/stepmania/Themes/default/Fonts/_ScreenRanking common 16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..6cc0d75096880cded3dfbbcebf07e84fda25d166 GIT binary patch literal 23017 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 NaOi-mLya9i`9D~G+ztQ$ literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Fonts/_ScreenRanking common.ini b/stepmania/Themes/default/Fonts/_ScreenRanking common.ini new file mode 100644 index 0000000000..6da65676fe --- /dev/null +++ b/stepmania/Themes/default/Fonts/_ScreenRanking common.ini @@ -0,0 +1,261 @@ +[Char Widths] +import=_20px fonts +LineSpacing=24 +Top=7 +Baseline=27 +0=17 +1=17 +2=17 +3=17 +4=17 +5=17 +6=17 +7=17 +8=17 +9=120 +10=0 +11=17 +12=17 +13=0 +14=17 +15=17 +16=17 +17=17 +18=17 +19=17 +20=17 +21=17 +22=17 +23=17 +24=17 +25=17 +26=17 +27=17 +28=0 +29=0 +30=0 +31=0 +32=9 +33=9 +34=14 +35=18 +36=18 +37=27 +38=24 +39=8 +40=11 +41=11 +42=15 +43=18 +44=9 +45=9 +46=9 +47=8 +48=18 +49=18 +50=18 +51=18 +52=18 +53=18 +54=18 +55=18 +56=18 +57=18 +58=9 +59=9 +60=18 +61=18 +62=18 +63=17 +64=20 +65=21 +66=21 +67=21 +68=21 +69=20 +70=18 +71=22 +72=22 +73=11 +74=18 +75=22 +76=18 +77=25 +78=22 +79=22 +80=20 +81=22 +82=21 +83=20 +84=20 +85=22 +86=21 +87=27 +88=21 +89=21 +90=20 +91=11 +92=8 +93=11 +94=18 +95=14 +96=9 +97=18 +98=18 +99=18 +100=18 +101=18 +102=11 +103=18 +104=18 +105=9 +106=9 +107=18 +108=9 +109=27 +110=18 +111=18 +112=18 +113=18 +114=12 +115=17 +116=12 +117=18 +118=17 +119=25 +120=18 +121=17 +122=15 +123=11 +124=8 +125=11 +126=18 +127=17 +128=18 +129=10 +130=8 +131=18 +132=14 +133=27 +134=18 +135=18 +136=9 +137=27 +138=20 +139=9 +140=27 +141=10 +142=20 +143=10 +144=10 +145=8 +146=8 +147=14 +148=14 +149=14 +150=14 +151=27 +152=9 +153=26 +154=17 +155=9 +156=27 +157=10 +158=15 +159=21 +160=9 +161=9 +162=18 +163=18 +164=18 +165=18 +166=8 +167=18 +168=9 +169=22 +170=11 +171=18 +172=18 +173=9 +174=22 +175=14 +176=11 +177=18 +178=11 +179=11 +180=9 +181=18 +182=23 +183=9 +184=9 +185=11 +186=11 +187=18 +188=27 +189=27 +190=27 +191=17 +192=21 +193=21 +194=21 +195=21 +196=21 +197=21 +198=27 +199=21 +200=20 +201=20 +202=20 +203=20 +204=11 +205=11 +206=11 +207=11 +208=21 +209=22 +210=22 +211=22 +212=22 +213=22 +214=22 +215=18 +216=22 +217=22 +218=22 +219=22 +220=22 +221=21 +222=20 +223=18 +224=18 +225=18 +226=18 +227=18 +228=18 +229=18 +230=27 +231=18 +232=18 +233=18 +234=18 +235=18 +236=9 +237=9 +238=9 +239=9 +240=18 +241=18 +242=18 +243=18 +244=18 +245=18 +246=18 +247=18 +248=18 +249=18 +250=18 +251=18 +252=18 +253=17 +254=18 +255=17 diff --git a/stepmania/Themes/default/Graphics/ScreenRanking song frame.redir b/stepmania/Themes/default/Graphics/ScreenRanking song frame.redir new file mode 100644 index 0000000000..04b2ead777 --- /dev/null +++ b/stepmania/Themes/default/Graphics/ScreenRanking song frame.redir @@ -0,0 +1 @@ +_blank \ No newline at end of file diff --git a/stepmania/Themes/default/metrics.ini b/stepmania/Themes/default/metrics.ini index 6e7d9191bd..86f97ea178 100644 --- a/stepmania/Themes/default/metrics.ini +++ b/stepmania/Themes/default/metrics.ini @@ -3434,67 +3434,81 @@ Unlock20X=250 Unlock20Y=325 [ScreenRanking] +StepsTypesToHide=dance-couple,dance-solo,pump-halfdouble +ShowCategories=1 +CoursesToShow=Courses/DDRMAX/NaokiStandard.crs,Courses/DDRMAX/ParanoiaBrothers.crs,Courses/Samples/PlayersBest1-4.crs +ShowAllStepsScores=0 +DifficultiesToShow=easy,medium,hard,challenge NextScreen=ScreenUnlock -CategoryX=517 -CategoryY=32 -CategoryWidth=222 -CategoryOnCommand=addx,640;sleep,0.0;bounceend,1;addx,-640 -CategoryOffCommand=sleep,0.0;linear,0.5;diffusealpha,0 + +SecondsPerPage=10 +PageFadeSeconds=1.0 +EmptyScoreName=STEP +NoScoreName=STEP + +RowSpacingX=0 +RowSpacingY=60 +ColSpacingX=0 +ColSpacingY=0 +StepsTypeColor1=0.6,0.6,1,1 +StepsTypeColor2=1,0.3,0.3,1 +StepsTypeColor3=0.3,1,0.3,1 +StepsTypeColor4=1.0,1,1.0,1 +StepsTypeColor5=1.0,1,1.0,1 + BannerX=517 BannerY=44 -BannerWidth=220 -BannerHeight=58 -BannerOnCommand=addx,640;sleep,0.0;bounceend,1;addx,-640 +BannerOnCommand=scaletoclipped,220,58;addx,640;sleep,0.0;bounceend,1;addx,-640 BannerOffCommand=sleep,0.0;linear,0.5;diffusealpha,0 BannerFrameX=0 BannerFrameY=0 BannerFrameOnCommand=hidden,1 BannerFrameOffCommand= -TypeX=520 -TypeY=60 -TypeOnCommand=addx,640;sleep,0.0;bounceend,1;addx,-640 -TypeOffCommand=sleep,0.0;linear,0.5;diffusealpha,0 -LineSpacingX=0 -LineSpacingY=60 -BulletsStartX=100 -BulletsStartY=140 -Bullets1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 -Bullets2OnCommand=addx,640;sleep,0.3;bounceend,1;addx,-640 -Bullets3OnCommand=addx,640;sleep,0.4;bounceend,1;addx,-640 -Bullets4OnCommand=addx,640;sleep,0.5;bounceend,1;addx,-640 -Bullets5OnCommand=addx,640;sleep,0.6;bounceend,1;addx,-640 -Bullets1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 -Bullets2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 -Bullets3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 -Bullets4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 -Bullets5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 -TextZoom=1.0 -TextSongZoom=0.7 -TextColor=0.8,0.8,1,1 -NamesStartX=180 -NamesStartY=140 -Names1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 -Names2OnCommand=addx,640;sleep,0.3;bounceend,1;addx,-640 -Names3OnCommand=addx,640;sleep,0.4;bounceend,1;addx,-640 -Names4OnCommand=addx,640;sleep,0.5;bounceend,1;addx,-640 -Names5OnCommand=addx,640;sleep,0.6;bounceend,1;addx,-640 -Names1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 -Names2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 -Names3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 -Names4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 -Names5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 -ScoresStartX=520 -ScoresStartY=140 -Scores1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 -Scores2OnCommand=addx,640;sleep,0.3;bounceend,1;addx,-640 -Scores3OnCommand=addx,640;sleep,0.4;bounceend,1;addx,-640 -Scores4OnCommand=addx,640;sleep,0.5;bounceend,1;addx,-640 -Scores5OnCommand=addx,640;sleep,0.6;bounceend,1;addx,-640 -Scores1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 -Scores2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 -Scores3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 -Scores4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 -Scores5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 +CategoryX=517 +CategoryY=32 +CategoryOnCommand=addx,640;sleep,0.0;bounceend,1;addx,-640 +CategoryOffCommand=sleep,0.0;linear,0.5;diffusealpha,0 +StepsTypeX=520 +StepsTypeY=60 +StepsTypeOnCommand=addx,640;sleep,0.0;bounceend,1;addx,-640 +StepsTypeOffCommand=sleep,0.0;linear,0.5;diffusealpha,0 + +BulletStartX=100 +BulletStartY=140 +Bullet1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 +Bullet2OnCommand=addx,640;sleep,0.3;bounceend,1;addx,-640 +Bullet3OnCommand=addx,640;sleep,0.4;bounceend,1;addx,-640 +Bullet4OnCommand=addx,640;sleep,0.5;bounceend,1;addx,-640 +Bullet5OnCommand=addx,640;sleep,0.6;bounceend,1;addx,-640 +Bullet1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 +Bullet2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 +Bullet3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 +Bullet4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 +Bullet5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 +NameStartX=180 +NameStartY=140 +Name1OnCommand=horizalign,left;addx,640;sleep,0.2;bounceend,1;addx,-640 +Name2OnCommand=horizalign,left;addx,640;sleep,0.3;bounceend,1;addx,-640 +Name3OnCommand=horizalign,left;addx,640;sleep,0.4;bounceend,1;addx,-640 +Name4OnCommand=horizalign,left;addx,640;sleep,0.5;bounceend,1;addx,-640 +Name5OnCommand=horizalign,left;addx,640;sleep,0.6;bounceend,1;addx,-640 +Name1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 +Name2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 +Name3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 +Name4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 +Name5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 +ScoreStartX=520 +ScoreStartY=140 +Score1OnCommand=horizalign,right;addx,640;sleep,0.2;bounceend,1;addx,-640 +Score2OnCommand=horizalign,right;addx,640;sleep,0.3;bounceend,1;addx,-640 +Score3OnCommand=horizalign,right;addx,640;sleep,0.4;bounceend,1;addx,-640 +Score4OnCommand=horizalign,right;addx,640;sleep,0.5;bounceend,1;addx,-640 +Score5OnCommand=horizalign,right;addx,640;sleep,0.6;bounceend,1;addx,-640 +Score1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 +Score2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 +Score3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 +Score4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 +Score5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 PointsStartX=380 PointsStartY=140 Points1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 @@ -3519,43 +3533,6 @@ Time2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 Time3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 Time4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 Time5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 -PercentStartX=170 -PercentStartY=140 -Percent1OnCommand=addx,640;sleep,0.2;bounceend,1;addx,-640 -Percent2OnCommand=addx,640;sleep,0.3;bounceend,1;addx,-640 -Percent3OnCommand=addx,640;sleep,0.4;bounceend,1;addx,-640 -Percent4OnCommand=addx,640;sleep,0.5;bounceend,1;addx,-640 -Percent5OnCommand=addx,640;sleep,0.6;bounceend,1;addx,-640 -Percent1OffCommand=sleep,0.2;linear,0.5;diffusealpha,0 -Percent2OffCommand=sleep,0.3;linear,0.5;diffusealpha,0 -Percent3OffCommand=sleep,0.4;linear,0.5;diffusealpha,0 -Percent4OffCommand=sleep,0.5;linear,0.5;diffusealpha,0 -Percent5OffCommand=sleep,0.6;linear,0.5;diffusealpha,0 -DifficultyStartX=170 -DifficultyStartY=96 -DifficultySpacingX=110 -DifficultySpacingY=0 -DifficultyOnCommand=addx,640;sleep,0.1;bounceend,1;addx,-640 -DifficultyOffCommand=sleep,0.1;linear,0.5;diffusealpha,0 -SecondsPerPage=5 -ShowCategories=1 -ShowSongScores=0 -NumSongsToShow=10 -CoursesToShow=Courses/DDRMAX/NaokiStandard.crs,Courses/DDRMAX/ParanoiaBrothers.crs,Courses/Samples/PlayersBest1-4.crs -NotesTypesToHide=dance-couple,dance-solo,pump-halfdouble -TextColor1=0.6,0.6,1,1 -TextColor2=1,0.3,0.3,1 -TextColor3=0.3,1,0.3,1 -EmptyScoreName=STEP -NoScoreName=STEP -DifficultiesToShow=easy,medium,hard,challenge -PageFadeSeconds=1.0 - -# Not all game types have NotesTypesToHide set, so add a few dummy colors -# to prevent a crash. -TextColor4=1.0,1,1.0,1 -TextColor5=1.0,1,1.0,1 - [ScreenSoundOptions] StyleIcon=0 diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index f9c10fe1f7..fd5bacecdc 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -262,6 +262,7 @@ public: // // other properties // + bool GetHidden() { return m_bHidden; } void SetHidden( bool b ) { m_bHidden = b; } void SetShadowLength( float fLength ); void EnableShadow( bool b ) { m_bShadow = b; } diff --git a/stepmania/src/ActorUtil.cpp b/stepmania/src/ActorUtil.cpp index 7b30af526d..dc242d9635 100644 --- a/stepmania/src/ActorUtil.cpp +++ b/stepmania/src/ActorUtil.cpp @@ -149,6 +149,10 @@ void UtilSetXY( Actor& actor, CString sClassName ) float UtilCommand( Actor& actor, CString sClassName, CString sCommandName ) { + // If Actor is hidden, it won't get updated or drawn, so don't bother tweening. + if( actor.GetHidden() ) + return 0; + float ret = actor.Command( "playcommand," + sCommandName ); // HACK: It's very often that we command things to TweenOffScreen diff --git a/stepmania/src/GameState.cpp b/stepmania/src/GameState.cpp index 372e689152..7b11d391b7 100644 --- a/stepmania/src/GameState.cpp +++ b/stepmania/src/GameState.cpp @@ -159,6 +159,8 @@ void GameState::Reset() void GameState::BeginGame() { m_timeGameStarted = time(NULL); + + m_vpsNamesThatWereFilled.clear(); } void GameState::EndGame() @@ -1176,6 +1178,9 @@ void GameState::StoreRankingName( PlayerNumber pn, CString name ) for( unsigned i=0; i &asFeatsOut ); - - /* Called by name entry screens: */ - void StoreRankingName( PlayerNumber pn, CString name ); + void StoreRankingName( PlayerNumber pn, CString name ); // Called by name entry screens + vector m_vpsNamesThatWereFilled; // filled on StoreRankingName, // // Arrow positioning diff --git a/stepmania/src/ListDisplay.cpp b/stepmania/src/ListDisplay.cpp new file mode 100644 index 0000000000..214ae853ee --- /dev/null +++ b/stepmania/src/ListDisplay.cpp @@ -0,0 +1,159 @@ +#include "global.h" +/* +----------------------------------------------------------------------------- + Class: ListDisplay + + Desc: See header. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "ListDisplay.h" +#include "RageUtil.h" +#include "GameConstantsAndTypes.h" +#include "PrefsManager.h" +#include "RageLog.h" +#include "PrefsManager.h" +#include "Course.h" +#include "SongManager.h" +#include +#include "ThemeManager.h" +#include "Steps.h" +#include "GameState.h" +#include "StyleDef.h" +#include "RageTexture.h" + + +ListDisplay::ListDisplay() +{ + m_iNumItemsToShow = 0; + m_fItemWidth = 0; + m_fItemHeight = 0; + m_fItemAtTopOfList = 0; + + m_quadMask.SetBlendMode( BLEND_NO_EFFECT ); // don't change color values + m_quadMask.SetUseZBuffer( true ); // we want to write to the Zbuffer +} + + +void ListDisplay::Load( + const vector &m_vpItems, + int iNumItemsToShow, + float fItemWidth, + float fItemHeight, + bool bLoop, + float fSecondsPerItem, + float fSecondsPauseBetweenItems, + bool bSlide ) +{ + ASSERT( iNumItemsToShow > 0 ); + ASSERT( fItemWidth > 0 ); + ASSERT( fItemHeight > 0 ); + ASSERT( fSecondsPerItem > 0 ); + ASSERT( fSecondsPauseBetweenItems >= 0 ); + + m_SubActors = m_vpItems; + m_iNumItemsToShow = iNumItemsToShow; + m_fItemWidth = fItemWidth; + m_fItemHeight = fItemHeight; + m_bLoop = bLoop; + m_fSecondsPerItem = fSecondsPerItem; + m_fSecondsPauseBetweenItems = fSecondsPauseBetweenItems; + m_bSlide = bSlide; + m_fItemAtTopOfList = m_bLoop ? 0 : -m_iNumItemsToShow; + m_fSecondsPauseCountdown = 0; + + RectF rectBarSize(-m_fItemWidth/2, -m_fItemHeight/2, + m_fItemWidth/2, m_fItemHeight/2); + m_quadMask.StretchTo( rectBarSize ); + m_quadMask.SetZ( 1 ); +} + +float ListDisplay::GetSecondsForCompleteScrollThrough() +{ + float fTotalItems = m_iNumItemsToShow + m_SubActors.size(); + return fTotalItems * (m_fSecondsPerItem + m_fSecondsPauseBetweenItems ); +} + +void ListDisplay::Update( float fDeltaTime ) +{ + ActorFrame::Update( fDeltaTime ); + + while( fDeltaTime > 0 ) + { + // handle pause + if( fDeltaTime > m_fSecondsPauseCountdown ) + { + fDeltaTime -= m_fSecondsPauseCountdown; + m_fSecondsPauseCountdown = 0; + } + else + { + m_fSecondsPauseCountdown -= fDeltaTime; + fDeltaTime = 0; + break; + } + + // handle scrolling + float fPercentUntilNextItem = (int)m_fItemAtTopOfList+1 - m_fItemAtTopOfList; + float fSecsUntilNextItem = fPercentUntilNextItem * m_fSecondsPerItem; + + if( fDeltaTime > fSecsUntilNextItem ) + { + fDeltaTime -= fSecsUntilNextItem; + m_fItemAtTopOfList += fPercentUntilNextItem; + } + else + { + m_fItemAtTopOfList += fDeltaTime / m_fSecondsPerItem; + fDeltaTime = 0; + break; + } + + if( m_bLoop ) + wrap( m_fItemAtTopOfList, m_SubActors.size() ); + } +} + +void ListDisplay::DrawPrimitives() +{ + if( m_SubActors.empty() ) + return; + + // write to z buffer so that top and bottom are clipped + float fIndexFullyOnScreenTop = -(m_iNumItemsToShow-1)/2.f; + float fIndexFullyOnScreenBottom = (m_iNumItemsToShow-1)/2.f; + float fIndexCompletelyOffScreenTop = fIndexFullyOnScreenTop - 1; + float fIndexCompletelyOffScreenBottom = fIndexFullyOnScreenBottom + 1; + + m_quadMask.SetY( fIndexCompletelyOffScreenTop * m_fItemHeight ); + m_quadMask.Draw(); + m_quadMask.SetY( fIndexCompletelyOffScreenBottom * m_fItemHeight ); + m_quadMask.Draw(); + + int iItemToDraw = (int)m_fItemAtTopOfList; + float fRemainder = m_fItemAtTopOfList - (int)m_fItemAtTopOfList; + float fIndex = fIndexFullyOnScreenTop - fRemainder; + float fY = (fIndex)*m_fItemHeight; + + for( int i=0; i= 0 && iItemToDraw < m_SubActors.size() ) + { + float fX = 0; + if( m_bSlide && fIndex>fIndexFullyOnScreenBottom-1 ) + fX = SCALE( fIndex, fIndexFullyOnScreenBottom, fIndexFullyOnScreenBottom-1.f, 640.f, 0.f ); + m_SubActors[iItemToDraw]->SetXY( roundf(fX), roundf(fY) ); + m_SubActors[iItemToDraw]->Draw(); + } + + iItemToDraw++; + if( m_bLoop ) + wrap( iItemToDraw, m_SubActors.size() ); + fY += m_fItemHeight; + fIndex += 1; + } +} + diff --git a/stepmania/src/ListDisplay.h b/stepmania/src/ListDisplay.h new file mode 100644 index 0000000000..e45614455f --- /dev/null +++ b/stepmania/src/ListDisplay.h @@ -0,0 +1,51 @@ +#ifndef ListDisplay_H +#define ListDisplay_H +/* +----------------------------------------------------------------------------- + Class: ListDisplay + + Desc: Holds course name and banner. + + Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. + Chris Danford +----------------------------------------------------------------------------- +*/ + +#include "ActorFrame.h" +#include "Quad.h" + +class ListDisplay : public ActorFrame +{ +public: + ListDisplay(); + + virtual void Update( float fDeltaTime ); + virtual void DrawPrimitives(); + + void Load( + const vector &m_vpItems, + int iNumItemsToShow, + float fItemWidth, + float fItemHeight, + bool bLoop, + float fSecondsPerItem, + float fSecondsPauseBetweenItems, + bool bSlide ); + + float GetSecondsForCompleteScrollThrough(); + +protected: + int m_iNumItemsToShow; + float m_fItemWidth; + float m_fItemHeight; + bool m_bLoop; + float m_fSecondsPerItem; + float m_fSecondsPauseBetweenItems; + bool m_bSlide; + + float m_fItemAtTopOfList; + float m_fSecondsPauseCountdown; + Quad m_quadMask; +}; + +#endif diff --git a/stepmania/src/ScreenRanking.cpp b/stepmania/src/ScreenRanking.cpp index 2d33e318b7..b3d1f59fb7 100644 --- a/stepmania/src/ScreenRanking.cpp +++ b/stepmania/src/ScreenRanking.cpp @@ -24,60 +24,57 @@ #include "ActorUtil.h" #include "ProfileManager.h" -static int g_iLastSongShown = 0; - -#define CATEGORY_WIDTH THEME->GetMetricF("ScreenRanking","CategoryWidth") -#define BANNER_WIDTH THEME->GetMetricF("ScreenRanking","BannerWidth") -#define BANNER_HEIGHT THEME->GetMetricF("ScreenRanking","BannerHeight") -#define LINE_SPACING_X THEME->GetMetricF("ScreenRanking","LineSpacingX") -#define LINE_SPACING_Y THEME->GetMetricF("ScreenRanking","LineSpacingY") -#define BULLETS_START_X THEME->GetMetricF("ScreenRanking","BulletsStartX") -#define BULLETS_START_Y THEME->GetMetricF("ScreenRanking","BulletsStartY") -#define BULLETS_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Bullets%dOnCommand",l+1)) -#define BULLETS_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Bullets%dOffCommand",l+1)) -#define TEXT_ZOOM THEME->GetMetricF("ScreenRanking","TextZoom") -#define TEXT_SONGZOOM THEME->GetMetricF("ScreenRanking","TextSongZoom") -#define TEXT_COLOR( i ) THEME->GetMetricC("ScreenRanking",ssprintf("TextColor%d",i+1)) -#define NAMES_START_X THEME->GetMetricF("ScreenRanking","NamesStartX") -#define NAMES_START_Y THEME->GetMetricF("ScreenRanking","NamesStartY") -#define NAMES_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Names%dOnCommand",l+1)) -#define NAMES_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Names%dOffCommand",l+1)) -#define SCORES_START_X THEME->GetMetricF("ScreenRanking","ScoresStartX") -#define SCORES_START_Y THEME->GetMetricF("ScreenRanking","ScoresStartY") -#define SCORES_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Scores%dOnCommand",l+1)) -#define SCORES_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Scores%dOffCommand",l+1)) -#define POINTS_START_X THEME->GetMetricF("ScreenRanking","PointsStartX") -#define POINTS_START_Y THEME->GetMetricF("ScreenRanking","PointsStartY") -#define POINTS_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Points%dOnCommand",l+1)) -#define POINTS_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Points%dOffCommand",l+1)) -#define TIME_START_X THEME->GetMetricF("ScreenRanking","TimeStartX") -#define TIME_START_Y THEME->GetMetricF("ScreenRanking","TimeStartY") -#define TIME_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Time%dOnCommand",l+1)) -#define TIME_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Time%dOffCommand",l+1)) -#define PERCENT_START_X THEME->GetMetricF("ScreenRanking","PercentStartX") -#define PERCENT_START_Y THEME->GetMetricF("ScreenRanking","PercentStartY") -#define PERCENT_ON_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Percent%dOnCommand",l+1)) -#define PERCENT_OFF_COMMAND( l ) THEME->GetMetric ("ScreenRanking",ssprintf("Percent%dOffCommand",l+1)) -#define PERCENT_DECIMAL_PLACES THEME->GetMetricI("ScreenRanking","PercentDecimalPlaces") -#define PERCENT_TOTAL_SIZE THEME->GetMetricI("ScreenRanking","PercentTotalSize") -#define DIFFICULTY_START_X THEME->GetMetricF("ScreenRanking","DifficultyStartX") -#define DIFFICULTY_START_Y THEME->GetMetricF("ScreenRanking","DifficultyStartY") -#define DIFFICULTY_SPACING_X THEME->GetMetricF("ScreenRanking","DifficultySpacingX") -#define DIFFICULTY_SPACING_Y THEME->GetMetricF("ScreenRanking","DifficultySpacingY") -#define DIFFICULTY_ON_COMMAND THEME->GetMetric ("ScreenRanking","DifficultyOnCommand") -#define DIFFICULTY_OFF_COMMAND THEME->GetMetric ("ScreenRanking","DifficultyOffCommand") +#define STEPS_TYPES_TO_HIDE THEME->GetMetric ("ScreenRanking","StepsTypesToHide") +#define SHOW_CATEGORIES THEME->GetMetricB("ScreenRanking","ShowCategories") +#define SHOW_ALL_STEPS_SCORES THEME->GetMetricB("ScreenRanking","ShowAllStepsScores") +#define DIFFICULTIES_TO_SHOW THEME->GetMetric ("ScreenRanking","DifficultiesToShow") +#define COURSES_TO_SHOW PREFSMAN->m_sCoursesToShowRanking #define SECONDS_PER_PAGE THEME->GetMetricF("ScreenRanking","SecondsPerPage") #define PAGE_FADE_SECONDS THEME->GetMetricF("ScreenRanking","PageFadeSeconds") -#define SHOW_CATEGORIES THEME->GetMetricB("ScreenRanking","ShowCategories") -#define SHOW_SONG_SCORES THEME->GetMetricB("ScreenRanking","ShowSongScores") -#define NUM_SONGS_TO_SHOW THEME->GetMetricI("ScreenRanking","NumSongsToShow") -#define NOTES_TYPES_TO_HIDE THEME->GetMetric ("ScreenRanking","NotesTypesToHide") +#define PERCENT_DECIMAL_PLACES THEME->GetMetricI("ScreenRanking","PercentDecimalPlaces") +#define PERCENT_TOTAL_SIZE THEME->GetMetricI("ScreenRanking","PercentTotalSize") #define EMPTY_SCORE_NAME THEME->GetMetric ("ScreenRanking","EmptyScoreName") #define NO_SCORE_NAME THEME->GetMetric ("ScreenRanking","NoScoreName") -#define DIFFICULTIES_TO_SHOW THEME->GetMetric ("ScreenRanking","DifficultiesToShow") -#define COURSES_TO_SHOW PREFSMAN->m_sCoursesToShowRanking +#define ROW_SPACING_X THEME->GetMetricF("ScreenRanking","RowSpacingX") +#define ROW_SPACING_Y THEME->GetMetricF("ScreenRanking","RowSpacingY") +#define COL_SPACING_X THEME->GetMetricF("ScreenRanking","ColSpacingX") +#define COL_SPACING_Y THEME->GetMetricF("ScreenRanking","ColSpacingY") +#define STEPS_TYPE_COLOR( i ) THEME->GetMetricC("ScreenRanking",ssprintf("StepsTypeColor%d",i+1)) +#define NUM_ROW_ITEMS_TO_SHOW THEME->GetMetricI("ScreenRanking","NumRowItemsToShow") + +#define BULLET_START_X THEME->GetMetricF("ScreenRanking","BulletStartX") +#define BULLET_START_Y THEME->GetMetricF("ScreenRanking","BulletStartY") +#define NAME_START_X THEME->GetMetricF("ScreenRanking","NameStartX") +#define NAME_START_Y THEME->GetMetricF("ScreenRanking","NameStartY") +#define SCORE_START_X THEME->GetMetricF("ScreenRanking","ScoreStartX") +#define SCORE_START_Y THEME->GetMetricF("ScreenRanking","ScoreStartY") +#define POINTS_START_X THEME->GetMetricF("ScreenRanking","PointsStartX") +#define POINTS_START_Y THEME->GetMetricF("ScreenRanking","PointsStartY") +#define TIME_START_X THEME->GetMetricF("ScreenRanking","TimeStartX") +#define TIME_START_Y THEME->GetMetricF("ScreenRanking","TimeStartY") +#define DIFFICULTY_START_X THEME->GetMetricF("ScreenRanking","DifficultyStartX") +#define DIFFICULTY_Y THEME->GetMetricF("ScreenRanking","DifficultyY") +#define SONG_TITLE_OFFSET_X THEME->GetMetricF("ScreenRanking","SongTitleOffsetX") +#define SONG_TITLE_OFFSET_Y THEME->GetMetricF("ScreenRanking","SongTitleOffsetY") +#define SONG_FRAME_OFFSET_X THEME->GetMetricF("ScreenRanking","SongFrameOffsetX") +#define SONG_FRAME_OFFSET_Y THEME->GetMetricF("ScreenRanking","SongFrameOffsetY") +#define STEPS_SCORE_OFFSET_START_X THEME->GetMetricF("ScreenRanking","StepsScoreOffsetStartX") +#define STEPS_SCORE_OFFSET_Y THEME->GetMetricF("ScreenRanking","StepsScoreOffsetY") + +#define BULLET_X(row) (BULLET_START_X+ROW_SPACING_X*row) +#define BULLET_Y(row) (BULLET_START_Y+ROW_SPACING_Y*row) +#define NAME_X(row) (NAME_START_X+ROW_SPACING_X*row) +#define NAME_Y(row) (NAME_START_Y+ROW_SPACING_Y*row) +#define SCORE_X(row) (SCORE_START_X+ROW_SPACING_X*row) +#define SCORE_Y(row) (SCORE_START_Y+ROW_SPACING_Y*row) +#define POINTS_X(row) (POINTS_START_X+ROW_SPACING_X*row) +#define POINTS_Y(row) (POINTS_START_Y+ROW_SPACING_Y*row) +#define TIME_X(row) (TIME_START_X+ROW_SPACING_X*row) +#define TIME_Y(row) (TIME_START_Y+ROW_SPACING_Y*row) +#define DIFFICULTY_X(col) (DIFFICULTY_START_X+COL_SPACING_X*col) +#define STEPS_SCORE_OFFSET_X(col) (STEPS_SCORE_OFFSET_START_X+COL_SPACING_X*col) const ScreenMessage SM_ShowNextPage = (ScreenMessage)(SM_User+67); const ScreenMessage SM_HidePage = (ScreenMessage)(SM_User+68); @@ -85,105 +82,147 @@ const ScreenMessage SM_HidePage = (ScreenMessage)(SM_User+68); ScreenRanking::ScreenRanking( CString sClassName ) : ScreenAttract( sClassName ) { - m_sprCategory.SetName( "Category" ); - this->AddChild( &m_sprCategory ); - - m_banner.SetName( "Banner" ); - this->AddChild( &m_banner ); - - m_sprBannerFrame.SetName( "BannerFrame" ); - this->AddChild( &m_sprBannerFrame ); - - m_textCategory.SetName( "Category" ); - m_textCategory.LoadFromFont( THEME->GetPathToF("ScreenRanking title") ); - m_textCategory.EnableShadow( false ); - this->AddChild( &m_textCategory ); - - m_sprType.SetName( "Type" ); - this->AddChild( &m_sprType ); - - - // make the list of difficulties to show - vector sShowDiffs; - split( DIFFICULTIES_TO_SHOW, ",", sShowDiffs, true ); - - for( vector::const_iterator iter = sShowDiffs.begin(); iter != sShowDiffs.end(); iter++ ) + // init Actors for category and course { - m_vDiffsToShow.push_back( StringToDifficulty( *iter ) ); - } - + m_Banner.SetName( "Banner" ); + m_Banner.SetHidden( true ); + this->AddChild( &m_Banner ); - for( int l=0; lGetPathToG("ScreenRanking bullets 1x5") ); - m_sprBullets[l].SetDiffuseAlpha( 0 ); - this->AddChild( &m_sprBullets[l] ); + m_sprBannerFrame.SetName( "BannerFrame" ); + m_sprBannerFrame.SetHidden( true ); + this->AddChild( &m_sprBannerFrame ); - m_textNames[l].LoadFromFont( THEME->GetPathToF("ScreenRanking letters") ); - m_textNames[l].SetDiffuseAlpha( 0 ); - this->AddChild( &m_textNames[l] ); + m_textCategory.SetName( "Category" ); + m_textCategory.LoadFromFont( THEME->GetPathToF("ScreenRanking category") ); + m_textCategory.EnableShadow( false ); + m_textCategory.SetHidden( true ); + this->AddChild( &m_textCategory ); - m_textScores[l].LoadFromFont( THEME->GetPathToF("ScreenRanking letters") ); - m_textScores[l].SetDiffuseAlpha( 0 ); - this->AddChild( &m_textScores[l] ); + m_textStepsType.SetName( "StepsType" ); + m_textStepsType.LoadFromFont( THEME->GetPathToF("ScreenRanking steps type") ); + m_textStepsType.EnableShadow( false ); + m_textStepsType.SetHidden( true ); + this->AddChild( &m_textStepsType ); - m_textPoints[l].LoadFromFont( THEME->GetPathToF("ScreenRanking letters") ); - m_textPoints[l].SetDiffuseAlpha( 0 ); - this->AddChild( &m_textPoints[l] ); - - m_textTime[l].LoadFromFont( THEME->GetPathToF("ScreenRanking letters") ); - m_textTime[l].SetDiffuseAlpha( 0 ); - this->AddChild( &m_textTime[l] ); - - if( PREFSMAN->m_sCoursesToShowRanking == "" ) - PREFSMAN->m_sCoursesToShowRanking = THEME->GetMetric("ScreenRanking","CoursesToShow"); - } - - - // init all the difficulty graphics - for( int d=0; dGetPathToG(("ScreenRanking difficulty 1x5")) ); - m_sprDiffHeaders[d].SetDiffuseAlpha( 0 ); - if( bShowThis ) - this->AddChild( &m_sprDiffHeaders[d] ); for( int l=0; lGetPathToF("ScreenRanking letters") ); - m_textPercent[l][d].SetDiffuseAlpha( 0 ); - if( bShowThis ) - this->AddChild( &m_textPercent[l][d] ); + m_sprBullets[l].SetName( ssprintf("Bullet%d",l+1) ); + m_sprBullets[l].Load( THEME->GetPathToG( ssprintf("ScreenRanking bullets 1x%d",NUM_RANKING_LINES) ) ); + m_sprBullets[l].SetState( l ); + m_sprBullets[l].StopAnimating(); + m_sprBullets[l].SetHidden( true ); + this->AddChild( &m_sprBullets[l] ); + + m_textNames[l].SetName( ssprintf("Name%d",l+1) ); + m_textNames[l].LoadFromFont( THEME->GetPathToF("ScreenRanking name") ); + m_textNames[l].SetHidden( true ); + this->AddChild( &m_textNames[l] ); + + m_textScores[l].SetName( ssprintf("Score%d",l+1) ); + m_textScores[l].LoadFromFont( THEME->GetPathToF("ScreenRanking score") ); + m_textScores[l].SetHidden( true ); + this->AddChild( &m_textScores[l] ); + + m_textPoints[l].SetName( ssprintf("Points%d",l+1) ); + m_textPoints[l].LoadFromFont( THEME->GetPathToF("ScreenRanking points") ); + m_textPoints[l].SetHidden( true ); + this->AddChild( &m_textPoints[l] ); + + m_textTime[l].SetName( ssprintf("Time%d",l+1) ); + m_textTime[l].LoadFromFont( THEME->GetPathToF("ScreenRanking time") ); + m_textTime[l].SetHidden( true ); + this->AddChild( &m_textTime[l] ); + + // TODO: Think of a better way to handle this + if( PREFSMAN->m_sCoursesToShowRanking == "" ) + PREFSMAN->m_sCoursesToShowRanking = THEME->GetMetric("ScreenRanking","CoursesToShow"); } } - - vector aNotesTypesToShow; - GAMEMAN->GetNotesTypesForGame( GAMESTATE->m_CurGame, aNotesTypesToShow ); - - // subtract hidden NotesTypes + // make the list of difficulties to show { - vector asNotesTypesToHide; - split( NOTES_TYPES_TO_HIDE, ",", asNotesTypesToHide, true ); - for( unsigned i=0; i sShowDiffs; + split( DIFFICULTIES_TO_SHOW, ",", sShowDiffs, true ); + + for( vector::const_iterator iter = sShowDiffs.begin(); iter != sShowDiffs.end(); iter++ ) { - StepsType nt = GameManager::StringToNotesType(asNotesTypesToHide[i]); - if( nt != STEPS_TYPE_INVALID ) + m_vDiffsToShow.push_back( StringToDifficulty( *iter ) ); + } + } + + // init Actors for all_steps + { + const unsigned num_songs = SONGMAN->GetAllSongs().size(); + for( int d=0; dGetPathToG(ssprintf("ScreenRanking difficulty 1x%d",NUM_DIFFICULTIES)) ); + m_sprDifficulty[d].SetHidden( true ); + this->AddChild( &m_sprDifficulty[d] ); + } + for( int s=0; sm_sprSongFrame.SetName( "SongFrame" ); + pStepsScoreRowItem->m_sprSongFrame.SetHidden( true ); + pStepsScoreRowItem->m_sprSongFrame.Load( THEME->GetPathToG("ScreenRanking song frame") ); + pStepsScoreRowItem->AddChild( &pStepsScoreRowItem->m_sprSongFrame ); + + pStepsScoreRowItem->m_textSongTitle.SetName( "SongTitle" ); + pStepsScoreRowItem->m_textSongTitle.SetHidden( true ); + pStepsScoreRowItem->m_textSongTitle.LoadFromFont( THEME->GetPathToF("ScreenRanking song title") ); + pStepsScoreRowItem->AddChild( &pStepsScoreRowItem->m_textSongTitle ); + + for( int d=0; d::iterator iter = find( aNotesTypesToShow.begin(), aNotesTypesToShow.end(), nt ); - if( iter != aNotesTypesToShow.end() ) - aNotesTypesToShow.erase( iter ); + pStepsScoreRowItem->m_textStepsScore[d].SetName( "StepsScore" ); + pStepsScoreRowItem->m_textStepsScore[d].LoadFromFont( THEME->GetPathToF("ScreenRanking steps score") ); + pStepsScoreRowItem->m_textStepsScore[d].SetHidden( true ); + pStepsScoreRowItem->AddChild( &pStepsScoreRowItem->m_textStepsScore[d] ); + } + + m_vpStepsScoreRowItem.push_back( pStepsScoreRowItem ); + } + + m_ListScoreRowItems.SetName( "ListScoreRowItems" ); + this->AddChild( &m_ListScoreRowItems ); + m_ListScoreRowItems.SetXY( CENTER_X, CENTER_Y ); + } + + // calculate which StepsTypes to show + vector aStepsTypesToShow; + { + GAMEMAN->GetNotesTypesForGame( GAMESTATE->m_CurGame, aStepsTypesToShow ); + + // subtract hidden StepsTypes + { + vector asStepsTypesToHide; + split( STEPS_TYPES_TO_HIDE, ",", asStepsTypesToHide, true ); + for( unsigned i=0; i::iterator iter = find( aStepsTypesToShow.begin(), aStepsTypesToShow.end(), nt ); + if( iter != aStepsTypesToShow.end() ) + aStepsTypesToShow.erase( iter ); + } } } } - + // // fill m_vPagesToShow + // if( SHOW_CATEGORIES ) { - for( unsigned i=0; i asCoursePaths; split( COURSES_TO_SHOW, ",", asCoursePaths, true ); - for( unsigned i=0; iGetCourseFromPath( asCoursePaths[c] ); if( pts.pCourse ) m_vPagesToShow.push_back( pts ); @@ -215,33 +254,18 @@ ScreenRanking::ScreenRanking( CString sClassName ) : ScreenAttract( sClassName ) } } - if( SHOW_SONG_SCORES ) + if( SHOW_ALL_STEPS_SCORES ) { vector vpSongs = SONGMAN->GetAllSongs(); if( !vpSongs.empty() ) { - for( unsigned i=0; iPostScreenMessage( SM_ShowNextPage, 0.5f ); } +ScreenRanking::~ScreenRanking() +{ + const unsigned num_songs = SONGMAN->GetAllSongs().size(); + + // delete dynamically allocated members + for( int s=0; s 0 ) { - SetPage( m_vPagesToShow[0] ); + float fSecsToShow = SetPage( m_vPagesToShow[0] ); m_vPagesToShow.erase( m_vPagesToShow.begin() ); - this->PostScreenMessage( SM_HidePage, SECONDS_PER_PAGE-PAGE_FADE_SECONDS ); + this->PostScreenMessage( SM_HidePage, fSecsToShow-PAGE_FADE_SECONDS ); } else { @@ -283,172 +312,230 @@ void ScreenRanking::HandleScreenMessage( const ScreenMessage SM ) ScreenAttract::HandleScreenMessage( SM ); } -void ScreenRanking::SetPage( PageToShow pts ) +float ScreenRanking::SetPage( PageToShow pts ) { - bool bShowNames=false, bShowScores=false, bShowPoints=false, bShowTime=false, bShowDifficulty=false, bShowPercent=false; + bool bBanner = false; + bool bBannerFrame = false; + bool bShowCategory = false; + bool bShowStepsType = false; + bool bShowBullets = false; + bool bShowNames = false; + bool bShowScores = false; + bool bShowPoints = false; + bool bShowTime = false; + bool bShowDifficulty = false; + bool bShowStepsScore = false; switch( pts.type ) { case PageToShow::TYPE_CATEGORY: + bBanner = false; + bBannerFrame = false; + bShowCategory = true; + bShowStepsType = true; + bShowBullets = true; bShowNames = true; bShowScores = true; bShowPoints = false; bShowTime = false; bShowDifficulty = false; - bShowPercent = false; + bShowStepsScore = false; break; case PageToShow::TYPE_COURSE: + bBanner = true; + bBannerFrame = true; + bShowCategory = false; + bShowStepsType = true; + bShowBullets = true; bShowNames = true; bShowScores = !pts.pCourse->IsOni(); bShowPoints = pts.pCourse->IsOni(); bShowTime = pts.pCourse->IsOni(); bShowDifficulty = false; - bShowPercent = false; + bShowStepsScore = false; break; - case PageToShow::TYPE_SONG: + case PageToShow::TYPE_ALL_STEPS: + bBanner = false; + bBannerFrame = false; + bShowCategory = false; + bShowStepsType = true; + bShowBullets = false; bShowNames = false; bShowScores = false; bShowPoints = false; bShowTime = false; bShowDifficulty = true; - bShowPercent = true; + bShowStepsScore = true; break; default: ASSERT(0); } - int l, d; - // Reset - m_sprCategory.Reset(); - SET_XY_AND_ON_COMMAND( m_sprCategory ); - m_banner.Reset(); - SET_XY_AND_ON_COMMAND( m_banner ); - m_sprBannerFrame.Reset(); - SET_XY_AND_ON_COMMAND( m_sprBannerFrame ); - m_textCategory.Reset(); - SET_XY_AND_ON_COMMAND( m_textCategory ); - m_sprType.Reset(); - SET_XY_AND_ON_COMMAND( m_sprType ); - - for( l=0; lGetAllSongs().size(); + for( vector::iterator dc_iter=m_vDiffsToShow.begin(); dc_iter!=m_vDiffsToShow.end(); dc_iter++ ) + { + m_sprDifficulty[*dc_iter].SetHidden( !bShowDifficulty ); + if( bShowDifficulty ) + { + m_sprDifficulty[*dc_iter].Reset(); + m_sprDifficulty[*dc_iter].StopAnimating(); + m_sprDifficulty[*dc_iter].SetState( *dc_iter ); + m_sprDifficulty[*dc_iter].SetXY( DIFFICULTY_X(*dc_iter), DIFFICULTY_Y ); + ON_COMMAND( m_sprDifficulty[*dc_iter] ); + } + } + m_ListScoreRowItems.SetHidden( !bShowStepsScore ); + if( bShowStepsScore ) + { + m_ListScoreRowItems.Reset(); + SET_XY_AND_ON_COMMAND( m_ListScoreRowItems ); + + vector vpActors; + for( int i=0; im_sprSongFrame.Reset(); + pStepsScoreRowItems->m_sprSongFrame.SetXY( SONG_FRAME_OFFSET_X, SONG_FRAME_OFFSET_Y ); + pStepsScoreRowItems->m_sprSongFrame.SetUseZBuffer( true ); + ON_COMMAND( pStepsScoreRowItems->m_sprSongFrame ); + + pStepsScoreRowItems->m_textSongTitle.Reset(); + pStepsScoreRowItems->m_textSongTitle.SetXY( SONG_TITLE_OFFSET_X, SONG_TITLE_OFFSET_Y ); + pStepsScoreRowItems->m_textSongTitle.SetUseZBuffer( true ); + ON_COMMAND( pStepsScoreRowItems->m_textSongTitle ); + + for( vector::iterator dc_iter=m_vDiffsToShow.begin(); dc_iter!=m_vDiffsToShow.end(); dc_iter++ ) + { + pStepsScoreRowItems->m_textStepsScore[*dc_iter].Reset(); + pStepsScoreRowItems->m_textStepsScore[*dc_iter].SetXY( STEPS_SCORE_OFFSET_X(*dc_iter), STEPS_SCORE_OFFSET_Y ); + pStepsScoreRowItems->m_textStepsScore[*dc_iter].SetUseZBuffer( true ); + pStepsScoreRowItems->m_textStepsScore[*dc_iter].SetDiffuse( STEPS_TYPE_COLOR(pts.colorIndex) ); + ON_COMMAND( pStepsScoreRowItems->m_textStepsScore[*dc_iter] ); + } + } + } + } + + // get ranking feat list + + + // // init page + // switch( pts.type ) { case PageToShow::TYPE_CATEGORY: { - m_sprCategory.Load( THEME->GetPathToG(ssprintf("ScreenRanking category %c", 'A'+pts.category)) ); - m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) ); + m_textCategory.SetText( ssprintf("Type %c", 'A'+pts.category) ); + m_textStepsType.SetText( GameManager::NotesTypeToString(pts.nt) ); for( int l=0; lm_CategoryDatas[MEMORY_CARD_MACHINE][pts.nt][pts.category].vHighScores.size() ) + { hs = PROFILEMAN->m_CategoryDatas[MEMORY_CARD_MACHINE][pts.nt][pts.category].vHighScores[l]; + CString *psName = &PROFILEMAN->m_CategoryDatas[MEMORY_CARD_MACHINE][pts.nt][pts.category].vHighScores[l].sName; + bRecentHighScore = find( GAMESTATE->m_vpsNamesThatWereFilled.begin(), GAMESTATE->m_vpsNamesThatWereFilled.end(), psName ) != GAMESTATE->m_vpsNamesThatWereFilled.end(); + } else - hs.sName = NO_SCORE_NAME; + { + hs.sName = NO_SCORE_NAME; + } if( hs.sName.empty() ) hs.sName = EMPTY_SCORE_NAME; m_textNames[l].SetText( hs.sName ); m_textScores[l].SetText( ssprintf("%09i",hs.iScore) ); - m_textNames[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - m_textScores[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - - bool bRecentHighScore = false; - // FIXME -// for( int p=0; pm_RankingNotesType && -// GAMESTATE->m_RankingCategory[p] == pts.category && -// GAMESTATE->m_iRankingIndex[p] == l; -// } + m_textNames[l].SetDiffuse( STEPS_TYPE_COLOR(pts.colorIndex) ); + m_textScores[l].SetDiffuse( STEPS_TYPE_COLOR(pts.colorIndex) ); if( bRecentHighScore ) { @@ -462,30 +549,26 @@ void ScreenRanking::SetPage( PageToShow pts ) } } } - break; + return SECONDS_PER_PAGE; case PageToShow::TYPE_COURSE: { - m_textCategory.SetDiffuseAlpha(0); - m_sprCategory.SetDiffuseAlpha(0); - CString path = THEME->GetPathToG("ScreenRanking category "+pts.pCourse->m_sName, true); - if( IsAFile(path) ) - { - m_sprCategory.Load( path ); - m_sprCategory.SetDiffuseAlpha(1); - } else { - m_textCategory.SetMaxWidth( CATEGORY_WIDTH ); - m_textCategory.SetText( pts.pCourse->m_sName ); - m_textCategory.SetDiffuseAlpha(1); - } + m_Banner.LoadFromCourse( pts.pCourse ); + m_textStepsType.SetText( GameManager::NotesTypeToString(pts.nt) ); - m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) ); for( int l=0; lm_MemCardDatas[pts.nt][MEMORY_CARD_MACHINE].vHighScores.size() ) + { hs = pts.pCourse->m_MemCardDatas[pts.nt][MEMORY_CARD_MACHINE].vHighScores[l]; + CString *psName = &pts.pCourse->m_MemCardDatas[pts.nt][MEMORY_CARD_MACHINE].vHighScores[l].sName; + bRecentHighScore = find( GAMESTATE->m_vpsNamesThatWereFilled.begin(), GAMESTATE->m_vpsNamesThatWereFilled.end(), psName ) != GAMESTATE->m_vpsNamesThatWereFilled.end(); + } else - hs.sName = NO_SCORE_NAME; + { + hs.sName = NO_SCORE_NAME; + } if( hs.sName.empty() ) hs.sName = EMPTY_SCORE_NAME; @@ -500,114 +583,100 @@ void ScreenRanking::SetPage( PageToShow pts ) m_textTime[l].SetText( "" ); m_textScores[l].SetText( ssprintf("%09d",hs.iScore) ); } - m_textNames[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - m_textPoints[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - m_textTime[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - m_textScores[l].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); - for( int p=0; pm_pRankingCourse && -// pts.nt == GAMESTATE->m_RankingNotesType && -// GAMESTATE->m_iRankingIndex[p] == l; - if( bHighlight ) - { - m_textNames[l].SetEffectGlowBlink(0.1f); - m_textScores[l].SetEffectGlowBlink(0.1f); - } - else - { - m_textNames[l].SetEffectNone(); - m_textScores[l].SetEffectNone(); - } + m_textNames[l].SetEffectGlowBlink(0.1f); + m_textScores[l].SetEffectGlowBlink(0.1f); + } + else + { + m_textNames[l].SetEffectNone(); + m_textScores[l].SetEffectNone(); } } } - break; - case PageToShow::TYPE_SONG: + return SECONDS_PER_PAGE; + case PageToShow::TYPE_ALL_STEPS: { - m_textCategory.SetDiffuseAlpha(0); - m_sprCategory.SetDiffuseAlpha(0); + m_textStepsType.SetText( GameManager::NotesTypeToString(pts.nt) ); - m_banner.LoadFromSong( pts.pSong ); - m_banner.ScaleToClipped( BANNER_WIDTH, BANNER_HEIGHT ); - m_banner.SetDiffuseAlpha(1); - - m_sprBannerFrame.Load( THEME->GetPathToG("ScreenRanking banner frame") ); - m_sprBannerFrame.SetDiffuseAlpha(1); - - m_textCategory.SetMaxWidth( CATEGORY_WIDTH ); - m_textCategory.SetText( pts.pSong->GetFullTranslitTitle() ); - m_textCategory.SetDiffuseAlpha(1); - - m_sprType.SetDiffuse( RageColor(1,1,1,1) ); - m_sprType.Load( THEME->GetPathToG("ScreenRanking type "+GameManager::NotesTypeToString(pts.nt)) ); - - for( DiffVectorCIter dIter = m_vDiffsToShow.begin(); dIter != m_vDiffsToShow.end(); dIter++ ) + const unsigned num_songs = SONGMAN->GetAllSongs().size(); + for( int s=0; sGetAllSongs()[s]; + StepsScoreRowItem *pStepsScoreRowItem = m_vpStepsScoreRowItem[s]; - Difficulty dc = (Difficulty)d; - Steps* pSteps = pts.pSong->GetStepsByDifficulty( pts.nt, dc ); + pStepsScoreRowItem->m_textSongTitle.SetText( pSong->GetFullDisplayTitle() ); - - if( pSteps == NULL ) - m_sprDiffHeaders[d].SetHidden( true ); - else - m_sprDiffHeaders[d].SetDiffuse( RageColor(1,1,1,1) ); + for( vector::iterator dc_iter = m_vDiffsToShow.begin(); dc_iter != m_vDiffsToShow.end(); dc_iter++ ) + { + Steps* pSteps = pSong->GetStepsByDifficulty( pts.nt, *dc_iter, false ); + BitmapText* pTextStepsScore = &pStepsScoreRowItem->m_textStepsScore[*dc_iter]; - for( int l=0; lSetHidden( true ); } else { Steps::MemCardData::HighScore hs; - if( l < (int)pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores.size() ) - hs = pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores[l]; + bool bRecentHighScore = false; + if( !pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores.empty() ) + { + hs = pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores[0]; + CString *psName = &pSteps->m_MemCardDatas[MEMORY_CARD_MACHINE].vHighScores[0].sName; + bRecentHighScore = find( GAMESTATE->m_vpsNamesThatWereFilled.begin(), GAMESTATE->m_vpsNamesThatWereFilled.end(), psName ) != GAMESTATE->m_vpsNamesThatWereFilled.end(); + } else - hs.sName = NO_SCORE_NAME; + { + hs.sName = NO_SCORE_NAME; + } if( hs.sName.empty() ) hs.sName = EMPTY_SCORE_NAME; CString s; s = hs.sName + "\n"; s += ssprintf( "%0*.*f%%", PERCENT_TOTAL_SIZE, PERCENT_DECIMAL_PLACES, hs.fPercentDP*100 ); - m_textPercent[l][d].SetText( s ); - m_textPercent[l][d].SetDiffuse( TEXT_COLOR(pts.colorIndex) ); + pTextStepsScore->SetText( s ); } } } } - break; + return m_ListScoreRowItems.GetSecondsForCompleteScrollThrough(); default: ASSERT(0); + return 0; } } void ScreenRanking::TweenPageOffScreen() { - int l, d; - - OFF_COMMAND( m_sprCategory ); - OFF_COMMAND( m_banner ); + OFF_COMMAND( m_Banner ); OFF_COMMAND( m_sprBannerFrame ); - OFF_COMMAND( m_sprType ); OFF_COMMAND( m_textCategory ); + OFF_COMMAND( m_textStepsType ); - for( l=0; lGetAllSongs().size(); + for( vector::iterator dc_iter=m_vDiffsToShow.begin(); dc_iter!=m_vDiffsToShow.end(); dc_iter++ ) + { + OFF_COMMAND( m_sprDifficulty[*dc_iter] ); + for( int s=0; s m_vpStepsScoreRowItem; // for all_steps + ListDisplay m_ListScoreRowItems; vector m_vPagesToShow; - vector m_vDiffsToShow; - - typedef vector::iterator DiffVectorIter; - typedef vector::const_iterator DiffVectorCIter; }; diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 46c9ee14ca..9e4da1f541 100644 --- a/stepmania/src/StepMania.dsp +++ b/stepmania/src/StepMania.dsp @@ -65,7 +65,7 @@ IntDir=.\../Debug6 TargetDir=\stepmania\stepmania\Program 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 # End Special Build Tool @@ -102,8 +102,8 @@ IntDir=.\Debug TargetDir=\stepmania\stepmania TargetName=default 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 @@ -143,7 +143,7 @@ IntDir=.\../Release6 TargetDir=\stepmania\stepmania\Program 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 # End Special Build Tool @@ -184,8 +184,8 @@ IntDir=.\StepMania___Xbox_Release TargetDir=\stepmania\stepmania TargetName=default 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 @@ -4007,6 +4007,25 @@ SOURCE=.\JukeboxMenu.h # End Source File # Begin Source File +SOURCE=.\ListDisplay.cpp + +!IF "$(CFG)" == "StepMania - Win32 Debug" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Debug" + +!ELSEIF "$(CFG)" == "StepMania - Win32 Release" + +!ELSEIF "$(CFG)" == "StepMania - Xbox Release" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\ListDisplay.h +# End Source File +# Begin Source File + SOURCE=.\MemoryCardDisplay.cpp !IF "$(CFG)" == "StepMania - Win32 Debug"