From a9f187c3dec0ba4648edb4ac534f5bae48d12e79 Mon Sep 17 00:00:00 2001 From: Chris Danford Date: Mon, 24 Mar 2003 21:37:13 +0000 Subject: [PATCH] add scripting support to ScreenSelectMusic and ScreenEvaluation --- .../ScreenEvaluationStage background.redir | 1 + .../BGAnimations/ScreenSelectStyle in.redir | 1 + .../ScreenEvaluation banner frame.png | Bin 0 -> 2692 bytes .../Graphics/ScreenEvaluation try extra1.png | Bin 0 -> 3315 bytes .../Graphics/ScreenEvaluation try extra2.png | Bin 0 -> 4076 bytes .../ScreenEvaluationStage footer.redir | 1 + .../Sounds/ScreenEvaluation try extra2.redir | 1 + stepmania/Themes/default/metrics.ini | 477 +++++++---- stepmania/src/Actor.cpp | 137 ++-- stepmania/src/Actor.h | 4 +- stepmania/src/MusicWheel.cpp | 3 +- stepmania/src/Screen.cpp | 5 +- stepmania/src/ScreenEvaluation.cpp | 753 +++++++++--------- stepmania/src/ScreenEvaluation.h | 69 +- stepmania/src/ScreenGameplay.cpp | 4 +- stepmania/src/ScreenSelectMusic.cpp | 289 +++---- stepmania/src/StepMania.dsp | 16 +- stepmania/src/ThemeManager.cpp | 6 + stepmania/src/ThemeManager.h | 1 + 19 files changed, 954 insertions(+), 814 deletions(-) create mode 100644 stepmania/Themes/default/BGAnimations/ScreenEvaluationStage background.redir create mode 100644 stepmania/Themes/default/BGAnimations/ScreenSelectStyle in.redir create mode 100644 stepmania/Themes/default/Graphics/ScreenEvaluation banner frame.png create mode 100644 stepmania/Themes/default/Graphics/ScreenEvaluation try extra1.png create mode 100644 stepmania/Themes/default/Graphics/ScreenEvaluation try extra2.png create mode 100644 stepmania/Themes/default/Graphics/ScreenEvaluationStage footer.redir create mode 100644 stepmania/Themes/default/Sounds/ScreenEvaluation try extra2.redir diff --git a/stepmania/Themes/default/BGAnimations/ScreenEvaluationStage background.redir b/stepmania/Themes/default/BGAnimations/ScreenEvaluationStage background.redir new file mode 100644 index 0000000000..e80b2145da --- /dev/null +++ b/stepmania/Themes/default/BGAnimations/ScreenEvaluationStage background.redir @@ -0,0 +1 @@ +_shared background fade in \ No newline at end of file diff --git a/stepmania/Themes/default/BGAnimations/ScreenSelectStyle in.redir b/stepmania/Themes/default/BGAnimations/ScreenSelectStyle in.redir new file mode 100644 index 0000000000..0f6547301b --- /dev/null +++ b/stepmania/Themes/default/BGAnimations/ScreenSelectStyle in.redir @@ -0,0 +1 @@ +_options to options \ No newline at end of file diff --git a/stepmania/Themes/default/Graphics/ScreenEvaluation banner frame.png b/stepmania/Themes/default/Graphics/ScreenEvaluation banner frame.png new file mode 100644 index 0000000000000000000000000000000000000000..59557db20d61e20ab6347b1d0cc9425dbfde2bd1 GIT binary patch literal 2692 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 literal 0 HcmV?d00001 diff --git a/stepmania/Themes/default/Graphics/ScreenEvaluation try extra2.png b/stepmania/Themes/default/Graphics/ScreenEvaluation try extra2.png new file mode 100644 index 0000000000000000000000000000000000000000..2346c202eac4db7b3edc8f3f256bec018e054204 GIT binary patch literal 4076 zcmV004R=004l4008;_004mK004C`008P>0026d000+nm#LZ5000kn zNklcJ~_gt_3ZKX-qnbFMM zj^oCXrB9M&`_DYjf4ubl9KUJcsHXo;ojP@jqVMM**)OnhomZX2x#R%O%QxM>X*ST~ zo2Cw|s3PASbV2$WoPFK8ELM}7g{~VI=f^q5-_O@#i=IXs1~M7Fz}kb1YPpR@{fTaW zFazlVpf}^h<0j;>PmI6D*vrEU0;1l&I+(5_H>+H(ZyMuyaehnMtuy@noE!lFMVHc$ z{w7|&5kxJ4+Zyc;Y9L((@oa1)pubZ$#?^-QQVF6ROt%T5ZvoTH=zmmZX&F~*+1xoW z{ZwA=07TcK7ci9uF=;wI9*^@d3@_BdR7~@bD0N|5A^l&)* zuwP))JYf3CynK`Vwg{rR{CFVcKolm~<#L(t_xsE}kH=%4rilaAUkRp*m-V8^x7$r5 z;5h=MFMk7GYx)A}K)R0HEOfnISCh+tEaSd_Gwl1~M7PkptHI zlBxJ;UcOO=FZ=>oaQXu}xng@BNGTA7$poEw9(a$Kj1TR4!v{@{YpGmX9!iR;l}`uK z_2g#NlQra`G5qKA`L8p)H{-vI@5h)$NW zixE=@<2DhA_lG^pP5U6JKZ$SC@_iR$`MzlM(}Os_*T!-^Ipj*p7n2o?AuwxD#mfTR zn(=`EPwmzpt$fc>wzXVJkz`mpq0#MOj6bS&7X~~dK{P!`dLxP^#IRo)75N;T2KlS( z&l2gkh(_T-((Kcp`bz9`V1?^*&vMf~mT0Gy?7)CvMxU8;Ta#-J@Q2a>Yn)7wWm*Sw zIy^PJyq3!bE%?BJQsc_2I6Qo7ny2zcgz)@h;EX~;vtbP@FZ z&r0R*j6uGX>&}*^MKp@74K$?l8@7pTPHw>Cq!Si;2T!;ZwI=%77+p)ykYrUl_TbD& z0R$BcIC*&w;={qR`=S#3n%mYgs+E>fN=%7vpJzSER0zBzdEBsGfB_b<+jry~bL!}p3ytP{JsI`3H7Q+b(OpV4 zVjsqBC&;~Zh?KEO4&ZI^>cI(sadN2`=o5ekSyOZwyvO?AvfQ*h)&d;GHwviXyEI#NToX>MH3O?_YKIZ{01((;t|sYz*J${;Bf zCs%lv%3xrId+TzOcx)kQX~mkF%AH?Np;VcgY$?~8!Yz20bLceH)iCcZ(Q<9k8J6aa z=7W|OX?KO!hBVeuRYff(yWsYZ!bbcw5)vb{DGI5dQW%_&p)X5u2c;AsEbl%tAre2% zjt%0RA=2;+Gw9%Ka7K>uQfrE5I56ep3g1cnZa&t%$SwbN3sH_K2iUp8D1mM{evLya zMcG@BtHvf-3h^}2mL-zW@^TG6Se)b(En14=0(F$tIe704?Jp&ej@D{KLg|lXUR&~h zN>FIIod8R%fsj0tUK#O@3WGdp%dM%6<2lc`Xq4hTHYqgg;TpxWfo>a(?J8OHATT2hWg|Vji1O26< z8I5tpw&v8zH5t{EJ;{rt7(2t-6lq<$#sQ+%A6xJ;nh)H3#pZ})x8Gn}Ngbe^_u%%U z2&C31GNCh8`D;l*Xwp-b{w>iiHCZ_WW<6XSb2O+(Fhz|VkaE!|_uZwp=iv*Nf-h56 z8so*K(Do#^8Y5k^Ma5#kENMwDtywEq55e5!=7XkK2-?(~7aqaONIpp4h3SxFi{D^d z$@bPIkw)zgB9L05$b`c|QfyNyW^AmLzuM|VjUdVi5^=b=!yv0~ z4oOB3`|gzb;e<}{vh?&gzHnQJEI{hm)i>EJcpg*lKtg$p>jCgw-jq^xsfNNn2>K9gW(5MFHuAO$y0#DwUmku<)7_ zU-f>x%p!QG3PP_uC z#28J=NV74#Ha%dOxV2thZPAM5=8&8>T5m5uDTd>vW)G^SaDz*UdnTm!=ja^vP*2?{AKTAmJ-#w?w}WtFj)m(hIi=s4$0 zlupu0I{M?pE~%~{sQsh{QptEro}Xr7SSm-Ul#ONLN@-)y;o^u_dYKJ3hftF>PXlRz zG@p2yNVi7Gq_w)r1H5m0m0LtniFcDbAv@ERRE-b0KU??+;{}^g@{)U}!2#rI8&>kS zhL_QN;B*Mf97siEmI~j7I=U5Nf%IAng!#LY=Zq;Dmny{87c9nH>fd^b2}7f{U`4z6 zSF`u6JhxO6>3UMMns-Vs&T)YEZLf0k7L~LHQ3lK&wa#mWTn8;5sdIQOH4z#>;L@!U z2$$dI<>eZD;AB;Pn`Xc1+O{=6$5?aTbZ~nXNJq~pAn+q#=s~dXF*St{oUy=!VOb29 zCOTCd0>6zXXL7>+SZ+Dlb_mo)j1Z#vC}4gK2ms{~vn*m1@KCz1pP@-Ipv6GZ%@(O z+`<*;czL-7AFTHsTl;>kcQcHB*K(0gNF^imi zX$2zO%_Lr4uE_^Uhthet#%x2Vj#`7P==N+q1+^a3Vj||3#CrA$V$o$yg z;R-J9`?2v_yf-S9C6#{H6tz&wWt8i4W=;~?y4-3Fi1#Wq?-6j8+d4{TwnDCMnWjtR zt&vizl)SW4!OP2c@S%(f;s2l`=_Dm%wjoqUtwC0Fd)D#JCi(%}!t(rG@6dP+(34U$?d=be(sKPEYu9O)Er7qy+>Wu$AL(NTqoU84`}Xki9ehaN3bHE4=Eycg z>Zo~FL3Df8UKGZIG-A0BQq@&Xm|zHcti1QHZ>g9Z^{O!qdj%`lx9SS>kr|eh_FI)2g^dar6(6qN^ z8v=E7i*!>1sTNF~^jy|T)&$a9(0EkFc*6#H4B*SN;@x4TdAN7Ey<1LIat*XC7?559 z9rMFdjP}^Ftg$FJo!Vo)1O&UscSU(_!e*L)G@JC7#uNK66X%ykdk~EUK532dMvd|q zz?a)nRPty6qFrt(Fr1w4tpxzX3NmHazOnW8O1dDG-CkZ^qCtp@F!NNcw7y9!nTRwFP+aFNIP}v)ajFflr8=NfW)@8DYv&xoyQ$WJ9X;R>DPm4>$^BR zbs+83sZ*y8rX55(kap_SsZ%EuOfMB%f3Cf-r~_%IPMtb+`VUkG<<_>hZEx#9+No2g ePMtdaQu+s;$Oz)<+q&lf0000IsWindowed() ) MessageBox(NULL, sError, "Actor::Command", MB_OK); #endif + } + + if( iMaxIndexAccessed != (int)asTokens.size()-1 ) + { + CString sError = ssprintf( "Wrong number of parameters in command '%s'. Expected %d but there are %d.", join(",",asTokens).GetString(), iMaxIndexAccessed+1, (int)asTokens.size() ); + LOG->Warn( sError ); +#if defined(WIN32) // XXX arch? + if( DISPLAY->IsWindowed() ) + MessageBox(NULL, sError, "Actor::Command", MB_OK); +#endif } } } diff --git a/stepmania/src/Actor.h b/stepmania/src/Actor.h index 96be1ee6b7..20682f784a 100644 --- a/stepmania/src/Actor.h +++ b/stepmania/src/Actor.h @@ -99,8 +99,8 @@ public: virtual float GetUnzoomedHeight() { return m_size.y; } virtual float GetZoomedWidth() { return m_size.x * DestTweenState().scale.x; } virtual float GetZoomedHeight() { return m_size.y * DestTweenState().scale.y; } -// virtual void SetWidth( float width ) { DestTweenState().size.x = width; } -// virtual void SetHeight( float height ) { DestTweenState().size.y = height; } + virtual void SetWidth( float width ) { m_size.x = width; } + virtual void SetHeight( float height ) { m_size.y = height; } virtual float GetZoom() { return DestTweenState().scale.x; } // not accurate in some cases virtual float GetZoomX() { return DestTweenState().scale.x; } diff --git a/stepmania/src/MusicWheel.cpp b/stepmania/src/MusicWheel.cpp index 78b81585b4..c1344b8303 100644 --- a/stepmania/src/MusicWheel.cpp +++ b/stepmania/src/MusicWheel.cpp @@ -1173,7 +1173,8 @@ void MusicWheel::Move(int n) { if(n) { - m_fLockedWheelVelocity = LOCKED_INITIAL_VELOCITY; + int iSign = n/abs(n); + m_fLockedWheelVelocity = iSign*LOCKED_INITIAL_VELOCITY; m_soundLocked.Play(); } return; diff --git a/stepmania/src/Screen.cpp b/stepmania/src/Screen.cpp index a666ce81d4..bff146189b 100644 --- a/stepmania/src/Screen.cpp +++ b/stepmania/src/Screen.cpp @@ -279,8 +279,9 @@ Screen* Screen::Create( CString sClassName ) else if( 0==stricmp(sClassName, "ScreenCaution") ) ret = new ScreenCaution; else if( 0==stricmp(sClassName, "ScreenEdit") ) ret = new ScreenEdit; else if( 0==stricmp(sClassName, "ScreenEditMenu") ) ret = new ScreenEditMenu; - else if( 0==stricmp(sClassName, "ScreenEvaluation") ) ret = new ScreenEvaluation; - else if( 0==stricmp(sClassName, "ScreenFinalEvaluation") ) ret = new ScreenFinalEvaluation; + else if( 0==stricmp(sClassName, "ScreenEvaluationStage") ) ret = new ScreenEvaluationStage; + else if( 0==stricmp(sClassName, "ScreenEvaluationSummary") ) ret = new ScreenEvaluationSummary; + else if( 0==stricmp(sClassName, "ScreenEvaluationCourse") ) ret = new ScreenEvaluationCourse; else if( 0==stricmp(sClassName, "ScreenEz2SelectPlayer") ) ret = new ScreenEz2SelectPlayer; else if( 0==stricmp(sClassName, "ScreenSelectMode") ) ret = new ScreenSelectMode; else if( 0==stricmp(sClassName, "ScreenGameOver") ) ret = new ScreenGameOver; diff --git a/stepmania/src/ScreenEvaluation.cpp b/stepmania/src/ScreenEvaluation.cpp index 08064feb9e..e57fec0ded 100644 --- a/stepmania/src/ScreenEvaluation.cpp +++ b/stepmania/src/ScreenEvaluation.cpp @@ -25,87 +25,58 @@ #include "ThemeManager.h" #include "RageSoundManager.h" +// If a metric isn't present in the category m_sClassName, fall back to "ScreenEvaluation" +#define GET_THEME_METRIC_FALLBACK(metric) (THEME->HasMetric(m_sClassName,metric)?THEME->GetMetric(m_sClassName,metric):THEME->GetMetric("ScreenEvaluation",metric)) +#define GET_THEME_ELEMENT_FALLBACK(cat,suffix) (THEME->GetPathToOptional(cat,m_sClassName+(suffix))!="" ? THEME->GetPathTo(cat,m_sClassName+(suffix)) : THEME->GetPathTo(cat,CString("ScreenEvaluation")+(suffix))) -#define SONGSEL_SCREEN THEME->GetMetric("ScreenEvaluation","SongSelectScreen") -#define ENDGAME_SCREEN THEME->GetMetric("ScreenEvaluation","EndGameScreen") -#define BANNER_X THEME->GetMetricF("ScreenEvaluation","BannerX") -#define BANNER_Y THEME->GetMetricF("ScreenEvaluation","BannerY") -#define STAGE_X THEME->GetMetricF("ScreenEvaluation","StageX") -#define STAGE_Y THEME->GetMetricF("ScreenEvaluation","StageY") -#define DIFFICULTY_ICON_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("DifficultyIconP%dX",p+1)) -#define DIFFICULTY_ICON_Y( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("DifficultyIconP%dY",p+1)) -#define GRADE_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("GradeP%dX",p+1)) -#define GRADE_Y THEME->GetMetricF("ScreenEvaluation","GradeY") -#define PERCENT_BASE_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("PercentBaseP%dX",p+1)) -#define DANCE_POINT_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("DancePointP%dX",p+1)) -#define DANCE_POINT_WIDTH THEME->GetMetricF("ScreenEvaluation","DancePointDisplayWidth") -#define PERCENT_BASE_Y THEME->GetMetricF("ScreenEvaluation","PercentBaseY") -#define JUDGE_LABELS_X THEME->GetMetricF("ScreenEvaluation","JudgeLabelsX") -#define MARVELOUS_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Marvelous%sP%dX",o?"Oni":"",p+1)) -#define MARVELOUS_Y THEME->GetMetricF("ScreenEvaluation","MarvelousY") -#define PERFECT_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Perfect%sP%dX",o?"Oni":"",p+1)) -#define PERFECT_Y THEME->GetMetricF("ScreenEvaluation","PerfectY") -#define GREAT_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Great%sP%dX",o?"Oni":"",p+1)) -#define GREAT_Y THEME->GetMetricF("ScreenEvaluation","GreatY") -#define GOOD_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Good%sP%dX",o?"Oni":"",p+1)) -#define GOOD_Y THEME->GetMetricF("ScreenEvaluation","GoodY") -#define BOO_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Boo%sP%dX",o?"Oni":"",p+1)) -#define BOO_Y THEME->GetMetricF("ScreenEvaluation","BooY") -#define MISS_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("Miss%sP%dX",o?"Oni":"",p+1)) -#define MISS_Y THEME->GetMetricF("ScreenEvaluation","MissY") -#define OK_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("OK%sP%dX",o?"Oni":"",p+1)) -#define OK_Y THEME->GetMetricF("ScreenEvaluation","OKY") -#define MAX_COMBO_X(o,p) THEME->GetMetricF("ScreenEvaluation",ssprintf("MaxCombo%sP%dX",o?"Oni":"",p+1)) -#define MAX_COMBO_Y THEME->GetMetricF("ScreenEvaluation","MaxComboY") -#define SCORE_LABELS_X THEME->GetMetricF("ScreenEvaluation","ScoreLabelsX") -#define SCORE_NUMBERS_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("ScoreNumbersP%dX",p+1)) -#define SCORE_Y THEME->GetMetricF("ScreenEvaluation","ScoreY") -#define BONUS_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("BonusP%dX",p+1)) -#define BONUS_Y THEME->GetMetricF("ScreenEvaluation","BonusY") -#define BAR_BASE_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("BarP%dBaseX",p+1)) -#define BAR_ROTATION( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("BarP%dRotation",p+1)) -#define BAR_START_Y THEME->GetMetricF("ScreenEvaluation","BarStartY") -#define BAR_SPACING_Y THEME->GetMetricF("ScreenEvaluation","BarSpacingY") -#define BAR_WIDTH THEME->GetMetricF("ScreenEvaluation","BarWidth") -#define BAR_HEIGHT THEME->GetMetricF("ScreenEvaluation","BarHeight") -#define SONGS_SURVIVED_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("SongsSurvivedP%dX",p+1)) -#define SONGS_SURVIVED_Y THEME->GetMetricF("ScreenEvaluation","SongsSurvivedY") -#define NEW_RECORD_X( p ) THEME->GetMetricF("ScreenEvaluation",ssprintf("NewRecordP%dX",p+1)) -#define NEW_RECORD_Y THEME->GetMetricF("ScreenEvaluation","NewRecordY") -#define TRY_EXTRA_STAGE_X THEME->GetMetricF("ScreenEvaluation","TryExtraStageX") -#define TRY_EXTRA_STAGE_Y THEME->GetMetricF("ScreenEvaluation","TryExtraStageY") -#define HELP_TEXT THEME->GetMetric("ScreenEvaluation","HelpText") -#define TIMER_SECONDS THEME->GetMetricI("ScreenEvaluation","TimerSeconds") -#define SPIN_GRADES THEME->GetMetricB("ScreenEvaluation","SpinGrades") -#define GRADES_GLOW_COLOR_1 THEME->GetMetricC("ScreenEvaluation","GradesGlowColor1") -#define GRADES_GLOW_COLOR_2 THEME->GetMetricC("ScreenEvaluation","GradesGlowColor2") -float JUDGE_X( bool oni, int p, int l ) { - switch( l ) { - case 0: return MARVELOUS_X(oni,p); - case 1: return PERFECT_X(oni,p); - case 2: return GREAT_X(oni,p); - case 3: return GOOD_X(oni,p); - case 4: return BOO_X(oni,p); - case 5: return MISS_X(oni,p); - case 6: return OK_X(oni,p); - case 7: return MAX_COMBO_X(oni,p); - default: ASSERT(0); return 0; - } -} -float JUDGE_Y( int l ) { - switch( l ) { - case 0: return MARVELOUS_Y; - case 1: return PERFECT_Y; - case 2: return GREAT_Y; - case 3: return GOOD_Y; - case 4: return BOO_Y; - case 5: return MISS_Y; - case 6: return OK_Y; - case 7: return MAX_COMBO_Y; - default: ASSERT(0); return 0; - } -} +#define SONGSEL_SCREEN GET_THEME_METRIC_FALLBACK("SongSelectScreen") +#define ENDGAME_SCREEN GET_THEME_METRIC_FALLBACK("EndGameScreen") +#define BANNER_ON_COMMAND( i ) GET_THEME_METRIC_FALLBACK(ssprintf("Banner%dOnCommand",i+1)) +#define BANNER_OFF_COMMAND( i ) GET_THEME_METRIC_FALLBACK(ssprintf("Banner%dOffCommand",i+1)) +#define BANNER_WIDTH atof(GET_THEME_METRIC_FALLBACK("BannerWidth")) +#define BANNER_HEIGHT atof(GET_THEME_METRIC_FALLBACK("BannerHeight")) +#define STAGE_ON_COMMAND GET_THEME_METRIC_FALLBACK("StageOnCommand") +#define STAGE_OFF_COMMAND GET_THEME_METRIC_FALLBACK("StageOffCommand") +#define DIFFICULTY_ICON_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("DifficultyIconP%dOnCommand",p+1)) +#define DIFFICULTY_ICON_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("DifficultyIconP%dOffCommand",p+1)) +#define PLAYER_OPTIONS_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PlayerOptionsP%dOnCommand",p+1)) +#define PLAYER_OPTIONS_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PlayerOptionsP%dOffCommand",p+1)) +#define GRADE_FRAME_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("GradeFrameP%dOnCommand",p+1)) +#define GRADE_FRAME_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("GradeFrameP%dOffCommand",p+1)) +#define GRADE_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("GradeP%dOnCommand",p+1)) +#define GRADE_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("GradeP%dOffCommand",p+1)) +#define PERCENT_WHOLE_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PercentWholeP%dOnCommand",p+1)) +#define PERCENT_WHOLE_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PercentWholeP%dOffCommand",p+1)) +#define PERCENT_REMAINDER_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PercentRemainderP%dOnCommand",p+1)) +#define PERCENT_REMAINDER_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("PercentRemainderP%dOffCommand",p+1)) +#define DANCE_POINTS_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("DancePointsP%dOnCommand",p+1)) +#define DANCE_POINTS_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("DancePointsP%dOffCommand",p+1)) +const char* JUDGE_STRING[NUM_JUDGE_LINES] = { "Marvelous", "Perfect", "Great", "Good", "Boo", "Miss", "OK", "MaxCombo" }; +#define JUDGE_LABEL_ON_COMMAND( l ) GET_THEME_METRIC_FALLBACK(ssprintf("%sLabelOnCommand",JUDGE_STRING[l])) +#define JUDGE_LABEL_OFF_COMMAND( l ) GET_THEME_METRIC_FALLBACK(ssprintf("%sLabelOffCommand",JUDGE_STRING[l])) +#define JUDGE_NUMBER_ON_COMMAND( l, p ) GET_THEME_METRIC_FALLBACK(ssprintf("%sNumberP%dOnCommand",JUDGE_STRING[l],p+1)) +#define JUDGE_NUMBER_OFF_COMMAND( l, p ) GET_THEME_METRIC_FALLBACK(ssprintf("%sNumberP%dOffCommand",JUDGE_STRING[l],p+1)) +const char* SCORE_STRING[NUM_SCORE_LINES] = { "Score", "Time" }; +#define SCORE_LABEL_ON_COMMAND( l ) GET_THEME_METRIC_FALLBACK(ssprintf("%sLabelOnCommand",SCORE_STRING[l])) +#define SCORE_LABEL_OFF_COMMAND( l ) GET_THEME_METRIC_FALLBACK(ssprintf("%sLabelOffCommand",SCORE_STRING[l])) +#define SCORE_NUMBER_ON_COMMAND( l, p ) GET_THEME_METRIC_FALLBACK(ssprintf("%sNumberP%dOnCommand",SCORE_STRING[l],p+1)) +#define SCORE_NUMBER_OFF_COMMAND( l, p ) GET_THEME_METRIC_FALLBACK(ssprintf("%sNumberP%dOffCommand",SCORE_STRING[l],p+1)) +#define BONUS_FRAME_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("BonusFrameP%dOnCommand",p+1)) +#define BONUS_FRAME_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("BonusFrameP%dOffCommand",p+1)) +#define BAR_POSSIBLE_ON_COMMAND( i, p ) GET_THEME_METRIC_FALLBACK(ssprintf("BarPossible%dP%dOnCommand",i+1,p+1)) +#define BAR_POSSIBLE_OFF_COMMAND( i, p ) GET_THEME_METRIC_FALLBACK(ssprintf("BarPossible%dP%dOffCommand",i+1,p+1)) +#define BAR_ACTUAL_ON_COMMAND( i, p ) GET_THEME_METRIC_FALLBACK(ssprintf("BarActual%dP%dOnCommand",i+1,p+1)) +#define BAR_ACTUAL_OFF_COMMAND( i, p ) GET_THEME_METRIC_FALLBACK(ssprintf("BarActual%dP%dOffCommand",i+1,p+1)) +#define BAR_ACTUAL_MAX_COMMAND GET_THEME_METRIC_FALLBACK("BarActualMaxCommand") +#define SONGS_SURVIVED_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("SongsSurvivedP%dOnCommand",p+1)) +#define SONGS_SURVIVED_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("SongsSurvivedP%dOffCommand",p+1)) +#define NEW_RECORD_ON_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("NewRecordP%dOnCommand",p+1)) +#define NEW_RECORD_OFF_COMMAND( p ) GET_THEME_METRIC_FALLBACK(ssprintf("NewRecordP%dOffCommand",p+1)) +#define TRY_EXTRA_STAGE_ON_COMMAND GET_THEME_METRIC_FALLBACK(ssprintf("TryExtraStageOnCommand")) +#define TRY_EXTRA_STAGE_OFF_COMMAND GET_THEME_METRIC_FALLBACK(ssprintf("TryExtraStageOffCommand")) +#define SPIN_GRADES 0!=atoi(GET_THEME_METRIC_FALLBACK("SpinGrades")) + const ScreenMessage SM_GoToSelectMusic = ScreenMessage(SM_User+1); const ScreenMessage SM_GoToSelectCourse = ScreenMessage(SM_User+3); @@ -114,118 +85,64 @@ const ScreenMessage SM_GoToGameFinished = ScreenMessage(SM_User+5); const ScreenMessage SM_PlayCheer = ScreenMessage(SM_User+6); -ScreenEvaluation::ScreenEvaluation( bool bSummary ) +ScreenEvaluation::ScreenEvaluation( CString sClassName, Type type ) { +/* + // + // debugging + // + GAMESTATE->m_PlayMode = PLAY_MODE_ARCADE; + GAMESTATE->m_CurStyle = STYLE_DANCE_VERSUS; + GAMESTATE->m_MasterPlayerNumber = PLAYER_1; + GAMESTATE->m_pCurSong = SONGMAN->GetAllSongs()[0]; + GAMESTATE->m_pCurNotes[PLAYER_1] = GAMESTATE->m_pCurSong->GetNotes( NOTES_TYPE_DANCE_SINGLE, DIFFICULTY_HARD ); + GAMESTATE->m_pCurNotes[PLAYER_2] = GAMESTATE->m_pCurSong->GetNotes( NOTES_TYPE_DANCE_SINGLE, DIFFICULTY_HARD ); + GAMESTATE->m_PlayerOptions[PLAYER_1].m_bHoldNotes = false; + GAMESTATE->m_PlayerOptions[PLAYER_2].m_bHoldNotes = false; + GAMESTATE->m_PlayerOptions[PLAYER_1].m_fScrollSpeed = 2; + GAMESTATE->m_PlayerOptions[PLAYER_2].m_fScrollSpeed = 2; + GAMESTATE->m_iCurrentStageIndex = 2; +*/ + LOG->Trace( "ScreenEvaluation::ScreenEvaluation()" ); + + m_sClassName = sClassName; + m_Type = type; - // - // Set m_ResultMode. This enum will make our life easier later when we init different pieces. - // - switch( GAMESTATE->m_PlayMode ) - { - case PLAY_MODE_ARCADE: - case PLAY_MODE_BATTLE: - m_ResultMode = bSummary ? RM_ARCADE_SUMMARY : RM_ARCADE_STAGE; - break; - case PLAY_MODE_NONSTOP: - case PLAY_MODE_ONI: - case PLAY_MODE_ENDLESS: - m_ResultMode = RM_COURSE; - break; - default: - ASSERT(0); - } + + int p; // // Figure out which statistics and songs we're going to display // StageStats stageStats; vector vSongsToShow; - switch( m_ResultMode ) + switch( m_Type ) { - case RM_ARCADE_SUMMARY: + case summary: GAMESTATE->GetFinalEvalStatsAndSongs( stageStats, vSongsToShow ); break; - case RM_ARCADE_STAGE: - case RM_COURSE: + case stage: + case course: stageStats = GAMESTATE->m_CurStageStats; break; default: ASSERT(0); } - +/* // - // Init the song banners depending on m_ResultMode + // Debugging // - switch( m_ResultMode ) { - case RM_ARCADE_STAGE: - { - m_BannerWithFrame[0].LoadFromSong( GAMESTATE->m_pCurSong ); - m_BannerWithFrame[0].SetXY( BANNER_X, BANNER_Y ); - this->AddChild( &m_BannerWithFrame[0] ); - - m_sprStage.Load( THEME->GetPathTo("Graphics","ScreenEvaluation stage "+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","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] ); + stageStats.fRadarPossible[p][r] = 0.5f + r/10.0f; + stageStats.fRadarActual[p][r] = 0.5f + r/10.0f; } - } - break; - case RM_ARCADE_SUMMARY: - { - for( unsigned i=0; iAddChild( &m_BannerWithFrame[i] ); - } - } - break; - case RM_COURSE: - m_BannerWithFrame[0].LoadFromCourse( GAMESTATE->m_pCurCourse ); - m_BannerWithFrame[0].SetXY( BANNER_X, BANNER_Y ); - this->AddChild( &m_BannerWithFrame[0] ); - break; - default: - ASSERT(0); } - - - ////////////////////////// - // Init graphic elements - ////////////////////////// - m_Menu.Load( "ScreenEvaluation" ); -// FIXME: -// The header needs to be different depending on the result mode. -// We should really split these different ResultModes into separate derived classes -// so that each can have its own Transitions, headers, and such. -// THEME->GetPathTo("Graphics",m_ResultMode==RM_ARCADE_SUMMARY?"evaluation summary top edge":"evaluation top edge"), - this->AddChild( &m_Menu ); - - int p; - for( p=0; pIsPlayerEnabled( (PlayerNumber)p ) ) // If EZ2 wants to hide this graphic, place it somewhere off screen using theme metrics - continue; // skip - - m_ScoreDisplay[p].SetXY( SCORE_NUMBERS_X(p), SCORE_Y ); - m_ScoreDisplay[p].Init( (PlayerNumber)p ); - m_ScoreDisplay[p].SetZoomY( 1.0 ); - this->AddChild( &m_ScoreDisplay[p] ); - } - +*/ // // Calculate grades @@ -247,19 +164,20 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) // // update persistent statistics // - bool bNewRecord[NUM_PLAYERS] = { false, false }; + bool bNewRecord[NUM_PLAYERS]; + ZERO( bNewRecord ); - switch( m_ResultMode ) + switch( m_Type ) { - case RM_ARCADE_STAGE: + case stage: { for( int p=0; pIsPlayerEnabled(p) ) GAMESTATE->m_pCurNotes[p]->AddScore( (PlayerNumber)p, grade[p], stageStats.fScore[p], bNewRecord[p] ); } break; - case RM_ARCADE_SUMMARY: + case summary: { NotesType nt = GAMESTATE->GetCurrentStyleDef()->m_NotesType; bool bIsPlayerEnabled[NUM_PLAYERS]; @@ -281,7 +199,7 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) GAMESTATE->m_RankingNotesType = nt; } break; - case RM_COURSE: + case course: { NotesType nt = GAMESTATE->GetCurrentStyleDef()->m_NotesType; bool bIsPlayerEnabled[NUM_PLAYERS]; @@ -303,179 +221,188 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) m_bTryExtraStage = GAMESTATE->HasEarnedExtraStage() && - m_ResultMode==RM_ARCADE_STAGE; + m_Type==stage; + + + m_Menu.Load( m_sClassName ); + this->AddChild( &m_Menu ); + + + // - // Init ResultMode-specific displays + // init banner area // - for( p=0; pm_pCurSong ); + m_Banner[0].Command( BANNER_ON_COMMAND(0) ); + this->AddChild( &m_Banner[0] ); + + m_sprBannerFrame[0].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," banner frame") ); + m_sprBannerFrame[0].Command( BANNER_ON_COMMAND(0) ); + this->AddChild( &m_sprBannerFrame[0] ); + + m_sprStage.Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," stage "+GAMESTATE->GetStageText()) ); + m_sprStage.Command( STAGE_ON_COMMAND ); + this->AddChild( &m_sprStage ); + + for( int p=0; pIsPlayerEnabled(p) ) + continue; // skip + + m_DifficultyIcon[p].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," difficulty icons 1x5") ); + m_DifficultyIcon[p].SetFromNotes( (PlayerNumber)p, GAMESTATE->m_pCurNotes[p] ); + m_DifficultyIcon[p].Command( DIFFICULTY_ICON_ON_COMMAND(p) ); + this->AddChild( &m_DifficultyIcon[p] ); + + m_textPlayerOptions[p].LoadFromFont( THEME->GetPathTo("Fonts","normal") ); + CString sPO = GAMESTATE->m_PlayerOptions[p].GetString(); + sPO.Replace( ", ", "\n" ); + m_textPlayerOptions[p].Command( PLAYER_OPTIONS_ON_COMMAND(p) ); + m_textPlayerOptions[p].SetText( sPO ); + this->AddChild( &m_textPlayerOptions[p] ); + } + } + break; + case summary: + { + for( unsigned i=0; iAddChild( &m_Banner[i] ); + + m_sprBannerFrame[i].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," banner frame") ); + m_sprBannerFrame[i].Command( BANNER_ON_COMMAND(i) ); + this->AddChild( &m_sprBannerFrame[i] ); + } + } + break; + case course: + { + m_Banner[0].SetCroppedSize( BANNER_WIDTH, BANNER_HEIGHT ); + m_Banner[0].LoadFromCourse( GAMESTATE->m_pCurCourse ); + m_Banner[0].Command( BANNER_ON_COMMAND(0) ); + this->AddChild( &m_Banner[0] ); + + m_sprBannerFrame[0].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," banner frame") ); + m_sprBannerFrame[0].Command( BANNER_ON_COMMAND(0) ); + this->AddChild( &m_sprBannerFrame[0] ); + } + break; + default: + ASSERT(0); + } + + + // + // init grade area + // + for( p=0; pIsPlayerEnabled( (PlayerNumber)p ) ) continue; // skip - // If EZ2 shouldn't have a grade frame, then make a theme that has a 1x1 transparent graphic for the grade frame. + m_sprGradeFrame[p].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," grade frame 1x2") ); + m_sprGradeFrame[p].StopAnimating(); + m_sprGradeFrame[p].SetState( p ); + m_sprGradeFrame[p].Command( GRADE_FRAME_ON_COMMAND(p) ); + this->AddChild( &m_sprGradeFrame[p] ); - switch( m_ResultMode ) + m_Grades[p].Command( GRADE_ON_COMMAND(p) ); + if( SPIN_GRADES ) + m_Grades[p].SpinAndSettleOn( grade[p] ); + else + m_Grades[p].SetGrade( (PlayerNumber)p, grade[p] ); + this->AddChild( &m_Grades[p] ); + + m_textPercentWhole[p].LoadFromNumbers( GET_THEME_ELEMENT_FALLBACK("Numbers"," percent numbers") ); + m_textPercentWhole[p].EnableShadow( false ); + m_textPercentWhole[p].Command( PERCENT_WHOLE_ON_COMMAND(p) ); + this->AddChild( &m_textPercentWhole[p] ); + + m_textPercentRemainder[p].LoadFromNumbers( GET_THEME_ELEMENT_FALLBACK("Numbers"," percent numbers") ); + m_textPercentRemainder[p].EnableShadow( false ); + m_textPercentRemainder[p].Command( PERCENT_REMAINDER_ON_COMMAND(p) ); + this->AddChild( &m_textPercentRemainder[p] ); + + stageStats.iPossibleDancePoints[p] = max( 1, stageStats.iPossibleDancePoints[p] ); + float fPercentDancePoints = stageStats.iActualDancePoints[p] / (float)stageStats.iPossibleDancePoints[p] + 0.0001f; // correct for rounding errors + fPercentDancePoints = max( fPercentDancePoints, 0 ); + int iPercentWhole = int(fPercentDancePoints*100); + int iPercentRemainder = int( (fPercentDancePoints*100 - int(fPercentDancePoints*100)) * 10 ); +// m_textPercentWhole[p].SetText( ssprintf("%02d", iPercentWhole) ); +// m_textPercentRemainder[p].SetText( ssprintf(".%01d%%", iPercentRemainder) ); + m_textPercentWhole[p].SetText( "00" ); + m_textPercentRemainder[p].SetText( ".11%" ); + + m_textDancePoints[p].LoadFromNumbers( GET_THEME_ELEMENT_FALLBACK("Numbers"," percent numbers") ); + m_textDancePoints[p].EnableShadow( false ); + m_textDancePoints[p].SetText( ssprintf("%d", stageStats.iActualDancePoints[p]) ); + m_textDancePoints[p].Command( DANCE_POINTS_ON_COMMAND(p) ); + this->AddChild( &m_textDancePoints[p] ); + } + + + // + // init bonus area + // + for( p=0; pIsPlayerEnabled( (PlayerNumber)p ) ) + continue; // skip + + m_sprBonusFrame[p].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," bonus frame 2x1") ); + m_sprBonusFrame[p].StopAnimating(); + m_sprBonusFrame[p].SetState( p ); + m_sprBonusFrame[p].Command( BONUS_FRAME_ON_COMMAND(p) ); + this->AddChild( &m_sprBonusFrame[p] ); + + for( int r=0; rGetPathTo("Graphics","ScreenEvaluation percent frame") ); - m_sprPercentFrame[p].StopAnimating(); - m_sprPercentFrame[p].SetState( p ); - m_sprPercentFrame[p].SetXY( GRADE_X(p), GRADE_Y ); - this->AddChild( &m_sprPercentFrame[p] ); + m_sprPossibleBar[p][r].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," bars possible 1x2") ); + m_sprPossibleBar[p][r].StopAnimating(); + m_sprPossibleBar[p][r].SetState( p ); + m_sprPossibleBar[p][r].SetWidth( m_sprPossibleBar[p][r].GetUnzoomedWidth() * stageStats.fRadarPossible[p][r] ); + m_sprPossibleBar[p][r].Command( BAR_POSSIBLE_ON_COMMAND(r,p) ); + this->AddChild( &m_sprPossibleBar[p][r] ); - m_textOniPercentLarge[p].LoadFromNumbers( THEME->GetPathTo("Numbers","ScreenEvaluation percent numbers") ); - m_textOniPercentLarge[p].EnableShadow( false ); - m_textOniPercentLarge[p].SetXY( (PREFSMAN->m_bDancePointsForOni ? DANCE_POINT_X(p) : PERCENT_BASE_X(p) ), PERCENT_BASE_Y ); - m_textOniPercentLarge[p].SetHorizAlign( Actor::align_right ); - m_textOniPercentLarge[p].SetVertAlign( Actor::align_bottom ); - m_textOniPercentLarge[p].SetEffectGlowShift( 2.5f ); - this->AddChild( &m_textOniPercentLarge[p] ); - - if(!PREFSMAN->m_bDancePointsForOni) - { - m_textOniPercentSmall[p].LoadFromNumbers( THEME->GetPathTo("Numbers","ScreenEvaluation percent numbers") ); - m_textOniPercentSmall[p].EnableShadow( false ); - m_textOniPercentSmall[p].SetZoom( 0.5f ); - m_textOniPercentSmall[p].SetXY( PERCENT_BASE_X(p), PERCENT_BASE_Y ); - m_textOniPercentSmall[p].SetHorizAlign( Actor::align_left ); - m_textOniPercentSmall[p].SetVertAlign( Actor::align_bottom ); - m_textOniPercentSmall[p].SetEffectGlowShift( 2.5f ); - this->AddChild( &m_textOniPercentSmall[p] ); - } - - if(PREFSMAN->m_bDancePointsForOni) - { - m_textOniPercentLarge[p].SetText( ssprintf("%d", stageStats.iActualDancePoints[p]) ); - - const float fDancePointWidth = DANCE_POINT_WIDTH; - const float WidestLineWidth = (float) m_textOniPercentLarge[p].GetWidestLineWidthInSourcePixels(); - if(WidestLineWidth > fDancePointWidth) - m_textOniPercentLarge[p].SetZoomX( fDancePointWidth / WidestLineWidth ); - } - else - { - stageStats.iPossibleDancePoints[p] = max( 1, stageStats.iPossibleDancePoints[p] ); - float fPercentDancePoints = stageStats.iActualDancePoints[p] / (float)stageStats.iPossibleDancePoints[p] + 0.0001f; // correct for rounding errors - fPercentDancePoints = max( fPercentDancePoints, 0 ); - int iPercentDancePointsLarge = int(fPercentDancePoints*100); - int iPercentDancePointsSmall = int( (fPercentDancePoints*100 - int(fPercentDancePoints*100)) * 10 ); - m_textOniPercentLarge[p].SetText( ssprintf("%02d", iPercentDancePointsLarge) ); - m_textOniPercentSmall[p].SetText( ssprintf(".%01d%%", iPercentDancePointsSmall) ); - } - - // StageInfo stuff - m_sprCourseFrame[p].Load( THEME->GetPathTo("Graphics","ScreenEvaluation stage frame 2x1") ); - m_sprCourseFrame[p].StopAnimating(); - m_sprCourseFrame[p].SetState( p ); - m_sprCourseFrame[p].SetXY( BONUS_X(p), BONUS_Y ); - this->AddChild( &m_sprCourseFrame[p] ); - - m_textSongsSurvived[p].LoadFromNumbers( THEME->GetPathTo("Numbers","ScreenEvaluation stage numbers") ); - m_textSongsSurvived[p].EnableShadow( false ); - m_textSongsSurvived[p].SetXY( SONGS_SURVIVED_X(p), SONGS_SURVIVED_Y ); - m_textSongsSurvived[p].SetText( ssprintf("%02d", stageStats.iSongsPlayed[p]) ); - this->AddChild( &m_textSongsSurvived[p] ); - } - break; - case RM_ARCADE_STAGE: - case RM_ARCADE_SUMMARY: - { - m_sprGradeFrame[p].Load( THEME->GetPathTo("Graphics","ScreenEvaluation grade frame 1x2") ); - m_sprGradeFrame[p].StopAnimating(); - m_sprGradeFrame[p].SetState( p ); - m_sprGradeFrame[p].SetXY( GRADE_X(p), GRADE_Y ); - this->AddChild( &m_sprGradeFrame[p] ); - - // Ez2dancer should control the grade tween using theme metrics - m_Grades[p].SetXY( GRADE_X(p), GRADE_Y ); - m_Grades[p].SetZ( 2 ); - m_Grades[p].SetZoom( 1.0f ); - m_Grades[p].SetEffectGlowShift( 1.0f, GRADES_GLOW_COLOR_1, GRADES_GLOW_COLOR_2 ); - if( SPIN_GRADES ) - m_Grades[p].SpinAndSettleOn( grade[p] ); - else - m_Grades[p].SetGrade( (PlayerNumber)p, grade[p] ); - this->AddChild( &m_Grades[p] ); - - // Bonus info frame - m_sprBonusFrame[p].Load( THEME->GetPathTo("Graphics","ScreenEvaluation bonus frame 2x1") ); - m_sprBonusFrame[p].StopAnimating(); - m_sprBonusFrame[p].SetState( p ); - m_sprBonusFrame[p].SetXY( BONUS_X(p), BONUS_Y ); - this->AddChild( &m_sprBonusFrame[p] ); - - for( int r=0; rGetPathTo("Graphics","ScreenEvaluation bars possible 1x2") ); - m_sprPossibleBar[p][r].StopAnimating(); - m_sprPossibleBar[p][r].SetState( p ); - m_sprPossibleBar[p][r].SetHorizAlign( Actor::align_left ); - m_sprPossibleBar[p][r].SetX( BAR_BASE_X(p) ); - m_sprPossibleBar[p][r].SetY( BAR_START_Y + BAR_SPACING_Y*r ); - m_sprPossibleBar[p][r].SetRotationZ( BAR_ROTATION(p) ); - m_sprPossibleBar[p][r].SetZoomX( 0 ); - m_sprPossibleBar[p][r].ZoomToHeight( BAR_HEIGHT ); - m_sprPossibleBar[p][r].BeginTweening( 0.2f + r*0.1f ); // sleep - m_sprPossibleBar[p][r].BeginTweening( 0.5f ); // tween - m_sprPossibleBar[p][r].SetTweenZoomToWidth( BAR_WIDTH*stageStats.fRadarPossible[p][r] ); - this->AddChild( &m_sprPossibleBar[p][r] ); - - m_sprActualBar[p][r].Load( THEME->GetPathTo("Graphics","ScreenEvaluation bars actual 1x2") ); - m_sprActualBar[p][r].StopAnimating(); - m_sprActualBar[p][r].SetState( p ); - m_sprActualBar[p][r].SetHorizAlign( Actor::align_left ); - m_sprActualBar[p][r].SetX( BAR_BASE_X(p) ); - m_sprActualBar[p][r].SetY( BAR_START_Y + BAR_SPACING_Y*r ); - m_sprActualBar[p][r].SetRotationZ( BAR_ROTATION(p) ); - m_sprActualBar[p][r].SetZoomX( 0 ); - m_sprActualBar[p][r].ZoomToHeight( BAR_HEIGHT ); - m_sprActualBar[p][r].BeginTweening( 1.0f + r*0.2f ); // sleep - m_sprActualBar[p][r].BeginTweening( 1.0f ); // tween - m_sprActualBar[p][r].SetTweenZoomToWidth( BAR_WIDTH*stageStats.fRadarActual[p][r] ); - if( stageStats.fRadarActual[p][r] == stageStats.fRadarPossible[p][r] ) - m_sprActualBar[p][r].SetEffectGlowShift(); - this->AddChild( &m_sprActualBar[p][r] ); - } - break; - } + m_sprActualBar[p][r].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," bars actual 1x2") ); + m_sprActualBar[p][r].StopAnimating(); + m_sprActualBar[p][r].SetState( p ); + m_sprActualBar[p][r].SetWidth( m_sprActualBar[p][r].GetUnzoomedWidth() * stageStats.fRadarActual[p][r] ); + m_sprActualBar[p][r].Command( BAR_ACTUAL_ON_COMMAND(r,p) ); + if( stageStats.fRadarActual[p][r] == stageStats.fRadarPossible[p][r] ) + m_sprActualBar[p][r].Command( BAR_ACTUAL_MAX_COMMAND ); + this->AddChild( &m_sprActualBar[p][r] ); } - if( bNewRecord[p] ) - { - m_sprNewRecord[p].Load( THEME->GetPathTo("Graphics","ScreenEvaluation new record") ); - m_sprNewRecord[p].SetXY( NEW_RECORD_X(p), NEW_RECORD_Y ); - m_sprNewRecord[p].SetEffectGlowShift( 2.5f ); - this->AddChild( &m_sprNewRecord[p] ); - } + m_textSongsSurvived[p].LoadFromNumbers( GET_THEME_ELEMENT_FALLBACK("Numbers"," stage numbers") ); + m_textSongsSurvived[p].EnableShadow( false ); + m_textSongsSurvived[p].SetText( ssprintf("%02d", stageStats.iSongsPlayed[p]) ); + m_textSongsSurvived[p].Command( SONGS_SURVIVED_ON_COMMAND(p) ); + this->AddChild( &m_textSongsSurvived[p] ); } // - // Init non-ResultMode specific displays. - // Do this after Result-specific displays so that the text will draw on top of - // the bonus frame. + // init judgement area // int l; for( l=0; lGetPathTo("Graphics","ScreenEvaluation judge labels 1x8") ); + m_sprJudgeLabels[l].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," judge labels 1x8") ); m_sprJudgeLabels[l].StopAnimating(); m_sprJudgeLabels[l].SetState( l ); - m_sprJudgeLabels[l].SetXY( JUDGE_LABELS_X, JUDGE_Y(l) ); - m_sprJudgeLabels[l].SetZoom( 1.0f ); + m_sprJudgeLabels[l].Command( JUDGE_LABEL_ON_COMMAND(l) ); this->AddChild( &m_sprJudgeLabels[l] ); } - m_sprScoreLabel.Load( THEME->GetPathTo("Graphics","ScreenEvaluation score labels") ); - m_sprScoreLabel.SetState( m_ResultMode==RM_COURSE ? 1 : 0 ); - m_sprScoreLabel.StopAnimating(); - m_sprScoreLabel.SetXY( SCORE_LABELS_X, SCORE_Y ); - m_sprScoreLabel.SetZoom( 1.0f ); - this->AddChild( &m_sprScoreLabel ); - - for( p=0; pIsPlayerEnabled( (PlayerNumber)p ) ) @@ -483,11 +410,10 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) for( l=0; lGetPathTo("Numbers","ScreenEvaluation judge numbers") ); + m_textJudgeNumbers[l][p].LoadFromNumbers( GET_THEME_ELEMENT_FALLBACK("Numbers"," judge numbers") ); m_textJudgeNumbers[l][p].EnableShadow( false ); - m_textJudgeNumbers[l][p].SetXY( JUDGE_X(m_ResultMode==RM_COURSE,p,l), JUDGE_Y(l) ); - m_textJudgeNumbers[l][p].SetZoom( 1.0f ); m_textJudgeNumbers[l][p].SetDiffuse( PlayerToColor(p) ); + m_textJudgeNumbers[l][p].Command( JUDGE_NUMBER_ON_COMMAND(l,p) ); this->AddChild( &m_textJudgeNumbers[l][p] ); } @@ -499,15 +425,44 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) m_textJudgeNumbers[5][p].SetText( ssprintf("%4d", stageStats.iTapNoteScores[p][TNS_MISS]) ); m_textJudgeNumbers[6][p].SetText( ssprintf("%4d", stageStats.iHoldNoteScores[p][HNS_OK]) ); m_textJudgeNumbers[7][p].SetText( ssprintf("%4d", stageStats.iMaxCombo[p]) ); - - - if( m_ResultMode==RM_COURSE ) - m_ScoreDisplay[p].SetText( SecondsToTime(stageStats.fAliveSeconds[p]) ); - else - m_ScoreDisplay[p].SetScore( stageStats.fScore[p] ); } + // + // init score area + // + int s; + for( s=0; sAddChild( &m_sprScoreLabel[s] ); + } + + for( p=0; pIsPlayerEnabled( (PlayerNumber)p ) ) + continue; // skip + + for( int s=0; sAddChild( &m_ScoreDisplay[s][p] ); + } + + m_ScoreDisplay[0][p].SetScore( stageStats.fScore[p] ); + m_ScoreDisplay[1][p].SetText( SecondsToTime(stageStats.fAliveSeconds[p]) ); + + if( bNewRecord[p] ) + { + m_sprNewRecord[p].Load( GET_THEME_ELEMENT_FALLBACK("Graphics"," new record") ); + m_sprNewRecord[p].Command( NEW_RECORD_ON_COMMAND(p) ); + this->AddChild( &m_sprNewRecord[p] ); + } + } bool bOneHasNewRecord = false; for( p=0; pGetPathTo("Graphics",GAMESTATE->IsExtraStage()?"ScreenEvaluation extra2":"ScreenEvaluation extra1") ); - m_sprTryExtraStage.SetXY( TRY_EXTRA_STAGE_X, TRY_EXTRA_STAGE_Y ); - m_sprTryExtraStage.SetEffectGlowShift( 2.5f ); + m_sprTryExtraStage.Load( GET_THEME_ELEMENT_FALLBACK("Graphics",GAMESTATE->IsExtraStage()?" try extra2":" try extra1") ); + m_sprTryExtraStage.Command( TRY_EXTRA_STAGE_ON_COMMAND ); this->AddChild( &m_sprTryExtraStage ); if( GAMESTATE->IsExtraStage() ) - SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","ScreenEvaluation extra2") ); + SOUNDMAN->PlayOnce( GET_THEME_ELEMENT_FALLBACK("Sounds"," try extra2") ); else - SOUNDMAN->PlayOnce( THEME->GetPathTo("Sounds","ScreenEvaluation extra1") ); + SOUNDMAN->PlayOnce( GET_THEME_ELEMENT_FALLBACK("Sounds"," try extra1") ); } else if( bOneHasNewRecord && ANNOUNCER->HasSoundsFor("evaluation new record") ) { @@ -533,13 +487,13 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) else { - switch( m_ResultMode ) + switch( m_Type ) { - case RM_ARCADE_STAGE: + case stage: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation "+GradeToString(max_grade)) ); break; - case RM_COURSE: - case RM_ARCADE_SUMMARY: + case course: + case summary: SOUNDMAN->PlayOnceFromDir( ANNOUNCER->GetPathTo("evaluation final "+GradeToString(max_grade)) ); break; default: @@ -556,15 +510,11 @@ ScreenEvaluation::ScreenEvaluation( bool bSummary ) break; } -// if( bSummary ) -// m_Menu.ImmedOnScreenFromMenu(); -// else -// m_Menu.TweenOnScreenFromBlack( SM_None ); - SOUNDMAN->PlayMusic( THEME->GetPathTo("Sounds","ScreenEvaluation music") ); + SOUNDMAN->PlayMusic( GET_THEME_ELEMENT_FALLBACK("Sounds"," music") ); } - +/* void ScreenEvaluation::TweenOnScreen() { int i, p; @@ -652,8 +602,8 @@ void ScreenEvaluation::TweenOnScreen() apActorsInGradeOrPercentFrame.push_back( &m_sprGradeFrame[p] ); apActorsInGradeOrPercentFrame.push_back( &m_Grades[p] ); apActorsInGradeOrPercentFrame.push_back( &m_sprPercentFrame[p] ); - apActorsInGradeOrPercentFrame.push_back( &m_textOniPercentLarge[p] ); - apActorsInGradeOrPercentFrame.push_back( &m_textOniPercentSmall[p] ); + apActorsInGradeOrPercentFrame.push_back( &m_textPercentWhole[p] ); + apActorsInGradeOrPercentFrame.push_back( &m_textPercentRemainder[p] ); apActorsInGradeOrPercentFrame.push_back( &m_sprNewRecord[p] ); for( i=0; im_pCurSong ); diff --git a/stepmania/src/ScreenEvaluation.h b/stepmania/src/ScreenEvaluation.h index 86a2181b26..31ccc4f327 100644 --- a/stepmania/src/ScreenEvaluation.h +++ b/stepmania/src/ScreenEvaluation.h @@ -17,24 +17,26 @@ #include "MenuElements.h" #include "Banner.h" #include "ScoreDisplayNormal.h" -#include "BannerWithFrame.h" +#include "Banner.h" #include "DifficultyIcon.h" -const int NUM_JUDGE_LINES = 8; // marvelous, perfect, great, good, boo, miss, ok, max_combo const int MAX_SONGS_TO_SHOW = 5; // In summary, we show last 3 stages, plus extra stages if passed +const int NUM_JUDGE_LINES = 8; // marvelous, perfect, great, good, boo, miss, ok, max_combo +const int NUM_SCORE_LINES = 2; // score, time class ScreenEvaluation : public Screen { public: - ScreenEvaluation( bool bFinalEval = false ); + enum Type { stage, summary, course }; + ScreenEvaluation( CString sClassName, Type type ); virtual void Update( float fDeltaTime ); virtual void DrawPrimitives(); virtual void Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI ); virtual void HandleScreenMessage( const ScreenMessage SM ); - virtual void TweenOnScreen(); +// virtual void TweenOnScreen(); virtual void TweenOffScreen(); virtual void MenuLeft( PlayerNumber pn ); virtual void MenuRight( PlayerNumber pn ); @@ -42,50 +44,69 @@ public: virtual void MenuStart( PlayerNumber pn ); protected: - enum ResultMode { RM_ARCADE_STAGE, RM_ARCADE_SUMMARY, RM_COURSE }; - ResultMode m_ResultMode; + CString m_sClassName; + Type m_Type; MenuElements m_Menu; - BannerWithFrame m_BannerWithFrame[MAX_SONGS_TO_SHOW]; + // + // banner area + // + Banner m_Banner[MAX_SONGS_TO_SHOW]; + Sprite m_sprBannerFrame[MAX_SONGS_TO_SHOW]; Sprite m_sprStage; DifficultyIcon m_DifficultyIcon[NUM_PLAYERS]; + BitmapText m_textPlayerOptions[NUM_PLAYERS]; - // used in arcade + // + // grade area + // Sprite m_sprGradeFrame[NUM_PLAYERS]; GradeDisplay m_Grades[NUM_PLAYERS]; + BitmapText m_textPercentWhole[NUM_PLAYERS]; + BitmapText m_textPercentRemainder[NUM_PLAYERS]; + BitmapText m_textDancePoints[NUM_PLAYERS]; - // used in Oni/Endless - Sprite m_sprPercentFrame[NUM_PLAYERS]; - BitmapText m_textOniPercentLarge[NUM_PLAYERS]; - BitmapText m_textOniPercentSmall[NUM_PLAYERS]; - - // used in arcade + // + // bonus area + // Sprite m_sprBonusFrame[NUM_PLAYERS]; Sprite m_sprPossibleBar[NUM_PLAYERS][NUM_RADAR_CATEGORIES]; Sprite m_sprActualBar[NUM_PLAYERS][NUM_RADAR_CATEGORIES]; - - // used in Oni/Endless - Sprite m_sprCourseFrame[NUM_PLAYERS]; - BitmapText m_textTime[NUM_PLAYERS]; BitmapText m_textSongsSurvived[NUM_PLAYERS]; + // + // judgement area + // Sprite m_sprJudgeLabels[NUM_JUDGE_LINES]; BitmapText m_textJudgeNumbers[NUM_JUDGE_LINES][NUM_PLAYERS]; - Sprite m_sprScoreLabel; - ScoreDisplayNormal m_ScoreDisplay[NUM_PLAYERS]; - + // + // score area + // + Sprite m_sprScoreLabel[NUM_SCORE_LINES]; + ScoreDisplayNormal m_ScoreDisplay[NUM_SCORE_LINES][NUM_PLAYERS]; Sprite m_sprNewRecord[NUM_PLAYERS]; - bool m_bTryExtraStage; Sprite m_sprTryExtraStage; }; -class ScreenFinalEvaluation : public ScreenEvaluation +class ScreenEvaluationStage : public ScreenEvaluation { public: - ScreenFinalEvaluation() : ScreenEvaluation(true) {}; + ScreenEvaluationStage() : ScreenEvaluation("ScreenEvaluationStage",ScreenEvaluation::stage) {}; +}; + +class ScreenEvaluationSummary : public ScreenEvaluation +{ +public: + ScreenEvaluationSummary() : ScreenEvaluation("ScreenEvaluationSummary",ScreenEvaluation::summary) {}; +}; + +class ScreenEvaluationCourse : public ScreenEvaluation +{ +public: + ScreenEvaluationCourse() : ScreenEvaluation("ScreenEvaluationCourse",ScreenEvaluation::course) {}; }; diff --git a/stepmania/src/ScreenGameplay.cpp b/stepmania/src/ScreenGameplay.cpp index d99a3ef249..3f7e38f1f1 100644 --- a/stepmania/src/ScreenGameplay.cpp +++ b/stepmania/src/ScreenGameplay.cpp @@ -1487,7 +1487,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) ShowSavePrompt( SM_GoToStateAfterCleared ); break; } - SCREENMAN->SetNewScreen( "ScreenEvaluation" ); + SCREENMAN->SetNewScreen( "ScreenEvaluationStage" ); break; case SM_BeginFailed: @@ -1558,7 +1558,7 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM ) GAMESTATE->m_PlayMode == PLAY_MODE_ONI || GAMESTATE->m_PlayMode == PLAY_MODE_ENDLESS || GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2()) - SCREENMAN->SetNewScreen( "ScreenEvaluation" ); + SCREENMAN->SetNewScreen( "ScreenEvaluationSummary" ); else if( PREFSMAN->m_bEventMode ) HandleScreenMessage( SM_GoToScreenAfterBack ); else diff --git a/stepmania/src/ScreenSelectMusic.cpp b/stepmania/src/ScreenSelectMusic.cpp index 26a760cd62..b93b7414d3 100644 --- a/stepmania/src/ScreenSelectMusic.cpp +++ b/stepmania/src/ScreenSelectMusic.cpp @@ -30,55 +30,50 @@ #include "GameConstantsAndTypes.h" #include "ThemeManager.h" #include "Notes.h" + +#define BANNER_FRAME_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","BannerFrameOnCommand") +#define BANNER_FRAME_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","BannerFrameOffCommand") +#define BANNER_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","BannerOnCommand") +#define BANNER_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","BannerOffCommand") +#define BANNER_WIDTH THEME->GetMetricF("ScreenSelectMusic","BannerWidth") +#define BANNER_HEIGHT THEME->GetMetricF("ScreenSelectMusic","BannerHeight") +#define BPM_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","BPMOnCommand") +#define BPM_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","BPMOffCommand") +#define STAGE_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","StageOnCommand") +#define STAGE_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","StageOffCommand") +#define CD_TITLE_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","CDTitleOnCommand") +#define CD_TITLE_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","CDTitleOffCommand") +#define DIFFICULTY_FRAME_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("DifficultyFrameP%dOnCommand",p+1)) +#define DIFFICULTY_FRAME_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("DifficultyFrameP%dOffCommand",p+1)) +#define DIFFICULTY_ICON_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("DifficultyIconP%dOnCommand",p+1)) +#define DIFFICULTY_ICON_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("DifficultyIconP%dOffCommand",p+1)) +#define AUTOGEN_ICON_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("AutogenIconP%dOnCommand",p+1)) +#define AUTOGEN_ICON_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("AutogenIconP%dOffCommand",p+1)) +#define RADAR_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","RadarOnCommand") +#define RADAR_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","RadarOffCommand") +#define SORT_ICON_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","SortIconOnCommand") +#define SORT_ICON_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","SortIconOffCommand") +#define SCORE_FRAME_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("ScoreFrameP%dOnCommand",p+1)) +#define SCORE_FRAME_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("ScoreFrameP%dOffCommand",p+1)) +#define SCORE_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("ScoreP%dOnCommand",p+1)) +#define SCORE_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("ScoreP%dOffCommand",p+1)) +#define METER_FRAME_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("MeterFrameP%dOnCommand",p+1)) +#define METER_FRAME_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("MeterFrameP%dOffCommand",p+1)) +#define METER_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("MeterP%dOnCommand",p+1)) +#define METER_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("MeterP%dOffCommand",p+1)) +#define WHEEL_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","WheelOnCommand") +#define WHEEL_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","WheelOffCommand") +#define SONG_OPTIONS_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","SongOptionsOnCommand") +#define SONG_OPTIONS_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","SongOptionsOffCommand") +#define SONG_OPTIONS_EXTRA_COMMAND THEME->GetMetric ("ScreenSelectMusic","SongOptionsExtraCommand") +#define OPTION_ICONS_ON_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("OptionIconsP%dOnCommand",p+1)) +#define OPTION_ICONS_OFF_COMMAND( p ) THEME->GetMetric ("ScreenSelectMusic",ssprintf("OptionIconsP%dOffCommand",p+1)) +#define BALLOON_ON_COMMAND THEME->GetMetric ("ScreenSelectMusic","BalloonOnCommand") +#define BALLOON_OFF_COMMAND THEME->GetMetric ("ScreenSelectMusic","BalloonOffCommand") +#define OPTIONS_MESSAGE_SHOW_COMMAND THEME->GetMetric ("ScreenSelectMusic","OptionsMessageShowCommand") +#define SAMPLE_MUSIC_DELAY THEME->GetMetricF("ScreenSelectMusic","SampleMusicDelay") -#define BANNER_FRAME_X THEME->GetMetricF("ScreenSelectMusic","BannerFrameX") -#define BANNER_FRAME_Y THEME->GetMetricF("ScreenSelectMusic","BannerFrameY") -#define BANNER_X THEME->GetMetricF("ScreenSelectMusic","BannerX") -#define BANNER_Y THEME->GetMetricF("ScreenSelectMusic","BannerY") -#define BANNER_WIDTH THEME->GetMetricF("ScreenSelectMusic","BannerWidth") -#define BANNER_HEIGHT THEME->GetMetricF("ScreenSelectMusic","BannerHeight") -#define BPM_X THEME->GetMetricF("ScreenSelectMusic","BPMX") -#define BPM_Y THEME->GetMetricF("ScreenSelectMusic","BPMY") -#define BPM_ZOOM THEME->GetMetricF("ScreenSelectMusic","BPMZoom") -#define STAGE_X THEME->GetMetricF("ScreenSelectMusic","StageX") -#define STAGE_Y THEME->GetMetricF("ScreenSelectMusic","StageY") -#define STAGE_ZOOM THEME->GetMetricF("ScreenSelectMusic","StageZoom") -#define CD_TITLE_X THEME->GetMetricF("ScreenSelectMusic","CDTitleX") -#define CD_TITLE_Y THEME->GetMetricF("ScreenSelectMusic","CDTitleY") -#define DIFFICULTY_FRAME_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("DifficultyFrameP%dX",p+1)) -#define DIFFICULTY_FRAME_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("DifficultyFrameP%dY",p+1)) -#define DIFFICULTY_ICON_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("DifficultyIconP%dX",p+1)) -#define DIFFICULTY_ICON_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("DifficultyIconP%dY",p+1)) -#define RADAR_X THEME->GetMetricF("ScreenSelectMusic","RadarX") -#define RADAR_Y THEME->GetMetricF("ScreenSelectMusic","RadarY") -#define SORT_ICON_X THEME->GetMetricF("ScreenSelectMusic","SortIconX") -#define SORT_ICON_Y THEME->GetMetricF("ScreenSelectMusic","SortIconY") -#define SCORE_FRAME_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("ScoreFrameP%dX",p+1)) -#define SCORE_FRAME_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("ScoreFrameP%dY",p+1)) -#define SCORE_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("ScoreP%dX",p+1)) -#define SCORE_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("ScoreP%dY",p+1)) -#define SCORE_ZOOM THEME->GetMetricF("ScreenSelectMusic","ScoreZoom") -#define METER_FRAME_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("MeterFrameP%dX",p+1)) -#define METER_FRAME_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("MeterFrameP%dY",p+1)) -#define METER_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("MeterP%dX",p+1)) -#define METER_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("MeterP%dY",p+1)) -#define WHEEL_X THEME->GetMetricF("ScreenSelectMusic","WheelX") -#define WHEEL_Y THEME->GetMetricF("ScreenSelectMusic","WheelY") -#define PLAYER_OPTIONS_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("PlayerOptionsP%dX",p+1)) -#define PLAYER_OPTIONS_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("PlayerOptionsP%dY",p+1)) -#define SONG_OPTIONS_X THEME->GetMetricF("ScreenSelectMusic","SongOptionsX") -#define SONG_OPTIONS_Y THEME->GetMetricF("ScreenSelectMusic","SongOptionsY") -#define OPTION_ICONS_X( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("OptionIconsP%dX",p+1)) -#define OPTION_ICONS_Y( p ) THEME->GetMetricF("ScreenSelectMusic",ssprintf("OptionIconsP%dY",p+1)) -#define BALLOON_X THEME->GetMetricF("ScreenSelectMusic","BalloonX") -#define BALLOON_Y THEME->GetMetricF("ScreenSelectMusic","BalloonY") -#define HELP_TEXT THEME->GetMetric("ScreenSelectMusic","HelpText") -#define TIMER_SECONDS THEME->GetMetricI("ScreenSelectMusic","TimerSeconds") -#define SCORE_CONNECTED_TO_MUSIC_WHEEL THEME->GetMetricB("ScreenSelectMusic","ScoreConnectedToMusicWheel") -#define SAMPLE_MUSIC_DELAY THEME->GetMetricF("ScreenSelectMusic","SampleMusicDelay") - -const float TWEEN_TIME = 0.5f; static const ScreenMessage SM_AllowOptionsMenuRepeat = ScreenMessage(SM_User+1); @@ -105,124 +100,77 @@ ScreenSelectMusic::ScreenSelectMusic() this->AddChild( &m_Menu ); // these guys get loaded SetSong and TweenToSong - m_Banner.SetXY( BANNER_X, BANNER_Y ); m_Banner.SetCroppedSize( BANNER_WIDTH, BANNER_HEIGHT ); this->AddChild( &m_Banner ); m_sprBannerFrame.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic banner frame") ); - m_sprBannerFrame.SetXY( BANNER_FRAME_X, BANNER_FRAME_Y ); this->AddChild( &m_sprBannerFrame ); - m_BPMDisplay.SetXY( BPM_X, BPM_Y ); - m_BPMDisplay.SetZoom( BPM_ZOOM ); this->AddChild( &m_BPMDisplay ); 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 ); - m_sprCDTitle.SetXY( CD_TITLE_X, CD_TITLE_Y ); this->AddChild( &m_sprCDTitle ); + this->AddChild( &m_GrooveRadar ); + + m_textSongOptions.LoadFromFont( THEME->GetPathTo("Fonts","normal") ); + this->AddChild( &m_textSongOptions ); + + this->AddChild( &m_MusicWheel ); + for( p=0; pIsPlayerEnabled(p) ) continue; // skip m_sprDifficultyFrame[p].Load( THEME->GetPathTo("Graphics","ScreenSelectMusic difficulty frame 2x1") ); - m_sprDifficultyFrame[p].SetXY( DIFFICULTY_FRAME_X(p), DIFFICULTY_FRAME_Y(p) ); m_sprDifficultyFrame[p].StopAnimating(); m_sprDifficultyFrame[p].SetState( p ); this->AddChild( &m_sprDifficultyFrame[p] ); m_DifficultyIcon[p].Load( THEME->GetPathTo("graphics","ScreenSelectMusic difficulty icons 1x5") ); - m_DifficultyIcon[p].SetXY( DIFFICULTY_ICON_X(p), DIFFICULTY_ICON_Y(p) ); this->AddChild( &m_DifficultyIcon[p] ); m_AutoGenIcon[p].Load( THEME->GetPathTo("graphics","ScreenSelectMusic autogen") ); - m_AutoGenIcon[p].SetXY( DIFFICULTY_ICON_X(p), DIFFICULTY_ICON_Y(p) ); this->AddChild( &m_AutoGenIcon[p] ); - } - m_GrooveRadar.SetXY( RADAR_X, RADAR_Y ); - this->AddChild( &m_GrooveRadar ); - - - m_textSongOptions.LoadFromFont( THEME->GetPathTo("Fonts","normal") ); - m_textSongOptions.SetXY( SONG_OPTIONS_X, SONG_OPTIONS_Y ); - m_textSongOptions.SetZoom( 0.5f ); - if( GAMESTATE->IsExtraStage() || GAMESTATE->IsExtraStage2() ) - m_textSongOptions.SetEffectDiffuseShift( 2.5f, RageColor(1,0,0,1), RageColor(1,1,1,1) ); // blink red - m_textSongOptions.SetDiffuse( RageColor(1,1,1,1) ); // white - this->AddChild( &m_textSongOptions ); - - for( p=0; pIsPlayerEnabled(p) ) - continue; - - m_OptionIconRow[p].SetXY( OPTION_ICONS_X(p), OPTION_ICONS_Y(p) ); m_OptionIconRow[p].Refresh( (PlayerNumber)p ); this->AddChild( &m_OptionIconRow[p] ); m_sprMeterFrame[p].Load( THEME->GetPathTo("Graphics","ScreenSelectMusic meter frame") ); - m_sprMeterFrame[p].SetXY( METER_FRAME_X(p), METER_FRAME_Y(p) ); m_sprMeterFrame[p].StopAnimating(); m_sprMeterFrame[p].SetState( p ); this->AddChild( &m_sprMeterFrame[p] ); - m_DifficultyMeter[p].SetXY( METER_X(p), METER_Y(p) ); m_DifficultyMeter[p].SetShadowLength( 2 ); this->AddChild( &m_DifficultyMeter[p] ); - } - - m_MusicWheel.SetXY( WHEEL_X, WHEEL_Y ); - this->AddChild( &m_MusicWheel ); - - for( p=0; pIsPlayerEnabled((PlayerNumber)p) ) - continue; // skip - + m_sprHighScoreFrame[p].Load( THEME->GetPathTo("Graphics","ScreenSelectMusic score frame 1x2") ); m_sprHighScoreFrame[p].StopAnimating(); m_sprHighScoreFrame[p].SetState( p ); - m_sprHighScoreFrame[p].SetXY( SCORE_X(p), SCORE_Y(p) ); this->AddChild( &m_sprHighScoreFrame[p] ); - m_HighScore[p].SetXY( SCORE_X(p), SCORE_Y(p) ); - m_HighScore[p].SetZoom( SCORE_ZOOM ); m_HighScore[p].SetDiffuse( PlayerToColor(p) ); this->AddChild( &m_HighScore[p] ); } - m_MusicSortDisplay.SetXY( SORT_ICON_X, SORT_ICON_Y ); m_MusicSortDisplay.Set( GAMESTATE->m_SongSortOrder ); this->AddChild( &m_MusicSortDisplay ); m_sprMarathonBalloon.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic marathon") ); - m_sprMarathonBalloon.StopAnimating(); - m_sprMarathonBalloon.SetXY( BALLOON_X, BALLOON_Y ); - m_sprMarathonBalloon.SetZoomY( 0 ); - m_sprMarathonBalloon.SetDiffuse( RageColor(1,1,1,1) ); - m_sprMarathonBalloon.SetEffectBob( 2, RageVector3(0,10,0) ); + m_sprMarathonBalloon.SetDiffuse( RageColor(1,1,1,0) ); this->AddChild( &m_sprMarathonBalloon ); m_sprLongBalloon.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic long") ); - m_sprLongBalloon.StopAnimating(); - m_sprLongBalloon.SetXY( BALLOON_X, BALLOON_Y ); - m_sprLongBalloon.SetZoomY( 0 ); - m_sprLongBalloon.SetDiffuse( RageColor(1,1,1,1) ); - m_sprLongBalloon.SetEffectBob( 2, RageVector3(0,10,0) ); + m_sprLongBalloon.SetDiffuse( RageColor(1,1,1,0) ); this->AddChild( &m_sprLongBalloon ); m_sprOptionsMessage.Load( THEME->GetPathTo("Graphics","ScreenSelectMusic options message 1x2") ); m_sprOptionsMessage.StopAnimating(); - m_sprOptionsMessage.SetXY( CENTER_X, CENTER_Y ); - m_sprOptionsMessage.SetZoom( 1 ); - m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) ); + m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) ); // invisible //this->AddChild( &m_sprOptionsMessage ); // we have to draw this manually over the top of transitions @@ -261,9 +209,10 @@ void ScreenSelectMusic::DrawPrimitives() void ScreenSelectMusic::TweenOnScreen() { +/* int p; - m_sprBannerFrame.FadeOn( 0, "bounce left", TWEEN_TIME ); + m_sprBannerFrame.Command( 0, "bounce left", TWEEN_TIME ); m_Banner.FadeOn( 0, "bounce left", TWEEN_TIME ); m_BPMDisplay.FadeOn( 0, "bounce left", TWEEN_TIME ); m_sprStage.FadeOn( 0, "bounce left", TWEEN_TIME ); @@ -302,68 +251,65 @@ void ScreenSelectMusic::TweenOnScreen() } m_MusicWheel.TweenOnScreen(); +*/ + + m_sprBannerFrame.Command( BANNER_FRAME_ON_COMMAND ); + m_Banner.Command( BANNER_ON_COMMAND ); + m_BPMDisplay.Command( BPM_ON_COMMAND ); + m_sprStage.Command( STAGE_ON_COMMAND ); + m_sprCDTitle.Command( CD_TITLE_ON_COMMAND ); + m_GrooveRadar.TweenOnScreen(); + m_GrooveRadar.Command( RADAR_ON_COMMAND ); + m_textSongOptions.Command( SONG_OPTIONS_ON_COMMAND ); + m_MusicSortDisplay.Command( SORT_ICON_ON_COMMAND ); + m_MusicWheel.TweenOnScreen(); + m_MusicWheel.Command( WHEEL_ON_COMMAND ); + + for( int p=0; pIsExtraStage() || GAMESTATE->IsExtraStage2() ) + m_textSongOptions.Command( SONG_OPTIONS_EXTRA_COMMAND ); } void ScreenSelectMusic::TweenOffScreen() { - m_sprBannerFrame.FadeOff( 0, "bounce left", TWEEN_TIME ); - m_Banner.FadeOff( 0, "bounce left", TWEEN_TIME ); - m_BPMDisplay.FadeOff( 0, "bounce left", TWEEN_TIME ); - m_sprStage.FadeOff( 0, "bounce left", TWEEN_TIME ); - m_sprCDTitle.FadeOff( 0, "bounce left", TWEEN_TIME ); - - int p; - for( p=0; p apActorsInScore; - for( p=0; pBeginTweening( TWEEN_TIME, TWEEN_DECELERATE ); - apActorsInScore[i]->SetTweenX( SCORE_CONNECTED_TO_MUSIC_WHEEL ? apActorsInScore[i]->GetX()+400 : apActorsInScore[i]->GetX()-400 ); - } - - m_sprMarathonBalloon.StopTweening(); - m_sprMarathonBalloon.BeginTweening( 0.2f ); - m_sprMarathonBalloon.SetTweenZoomY( 0 ); - m_sprLongBalloon.StopTweening(); - m_sprLongBalloon.BeginTweening( 0.2f ); - m_sprLongBalloon.SetTweenZoomY( 0 ); - + m_GrooveRadar.Command( RADAR_OFF_COMMAND ); + m_textSongOptions.Command( SONG_OPTIONS_OFF_COMMAND ); + m_MusicSortDisplay.Command( SORT_ICON_OFF_COMMAND ); m_MusicWheel.TweenOffScreen(); + m_MusicWheel.Command( WHEEL_OFF_COMMAND ); + + for( int p=0; pStopTweening(); float fOriginalX = apActorsInScore[i]->GetX(); - apActorsInScore[i]->BeginTweening( factor*TWEEN_TIME, TWEEN_DECELERATE ); // tween off screen + apActorsInScore[i]->BeginTweening( factor*0.5, TWEEN_DECELERATE ); // tween off screen apActorsInScore[i]->SetTweenX( fOriginalX+400 ); apActorsInScore[i]->BeginTweening( factor*0.5f ); // sleep @@ -725,15 +671,16 @@ void ScreenSelectMusic::MenuStart( PlayerNumber pn ) float fShowSeconds = m_Menu.m_Out.GetLengthSeconds(); // show "hold START for options" - m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,0) ); - m_sprOptionsMessage.BeginTweening( 0.15f ); // fade in + m_sprOptionsMessage.SetDiffuse( RageColor(1,1,1,1) ); // visible + m_sprOptionsMessage.Command( OPTIONS_MESSAGE_SHOW_COMMAND ); +/* m_sprOptionsMessage.BeginTweening( 0.15f ); // fade in m_sprOptionsMessage.SetTweenZoomY( 1 ); m_sprOptionsMessage.SetTweenDiffuse( RageColor(1,1,1,1) ); m_sprOptionsMessage.BeginTweening( fShowSeconds-0.35f ); // sleep m_sprOptionsMessage.BeginTweening( 0.15f ); // fade out m_sprOptionsMessage.SetTweenDiffuse( RageColor(1,1,1,0) ); m_sprOptionsMessage.SetTweenZoomY( 0 ); - +*/ m_bAllowOptionsMenu = true; /* Don't accept a held START for a little while, so it's not * hit accidentally. Accept an initial START right away, though, @@ -841,12 +788,8 @@ void ScreenSelectMusic::AfterMusicChange() no_banner_change = true; } - m_sprMarathonBalloon.StopTweening(); - m_sprMarathonBalloon.BeginTweening( 0.2f ); - m_sprMarathonBalloon.SetTweenZoomY( 0 ); - m_sprLongBalloon.StopTweening(); - m_sprLongBalloon.BeginTweening( 0.2f ); - m_sprLongBalloon.SetTweenZoomY( 0 ); + m_sprMarathonBalloon.Command( BALLOON_OFF_COMMAND ); + m_sprLongBalloon.Command( BALLOON_OFF_COMMAND ); switch( m_MusicWheel.GetSelectedType() ) { @@ -910,17 +853,11 @@ void ScreenSelectMusic::AfterMusicChange() * like the effect with a lot of delay. */ if( pSong->m_fMusicLengthSeconds > PREFSMAN->m_fMarathonVerSongSeconds ) { - m_sprMarathonBalloon.StopTweening(); - m_sprMarathonBalloon.BeginTweening( 0.1f ); /* delay */ - m_sprMarathonBalloon.BeginTweening( 0.2f ); - m_sprMarathonBalloon.SetTweenZoomY( 1 ); + m_sprMarathonBalloon.Command( BALLOON_ON_COMMAND ); } else if( pSong->m_fMusicLengthSeconds > PREFSMAN->m_fLongVerSongSeconds ) { - m_sprLongBalloon.StopTweening(); - m_sprMarathonBalloon.BeginTweening( 0.1f ); /* delay */ - m_sprLongBalloon.BeginTweening( 0.2f ); - m_sprLongBalloon.SetTweenZoomY( 1 ); + m_sprLongBalloon.Command( BALLOON_ON_COMMAND ); } } break; diff --git a/stepmania/src/StepMania.dsp b/stepmania/src/StepMania.dsp index 7d0ef39d1a..26d8c52a9c 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=\temp\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=\temp\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 @@ -972,14 +972,6 @@ SOURCE=.\Banner.h # End Source File # Begin Source File -SOURCE=.\BannerWithFrame.cpp -# End Source File -# Begin Source File - -SOURCE=.\BannerWithFrame.h -# End Source File -# Begin Source File - SOURCE=.\BPMDisplay.cpp # End Source File # Begin Source File diff --git a/stepmania/src/ThemeManager.cpp b/stepmania/src/ThemeManager.cpp index 2690293874..c8dc223557 100644 --- a/stepmania/src/ThemeManager.cpp +++ b/stepmania/src/ThemeManager.cpp @@ -292,6 +292,12 @@ CString ThemeManager::GetMetricsPathFromName( CString sThemeName ) return GetThemeDirFromName( sThemeName ) + "metrics.ini"; } +bool ThemeManager::HasMetric( CString sClassName, CString sValueName ) +{ + CString sThrowAway; + return m_pIniMetrics->GetValue(sClassName,sValueName,sThrowAway); +} + CString ThemeManager::GetMetricRaw( CString sClassName, CString sValueName ) { #if defined(DEBUG) && defined(WIN32) diff --git a/stepmania/src/ThemeManager.h b/stepmania/src/ThemeManager.h index eccb22c7d7..bf6d3feb92 100644 --- a/stepmania/src/ThemeManager.h +++ b/stepmania/src/ThemeManager.h @@ -30,6 +30,7 @@ public: CString GetPathTo( CString sAssetCategory, CString sFileName ); // looks up the current theme in PREFSMAN CString GetPathToOptional( CString sAssetCategory, CString sFileName ); // looks up the current theme in PREFSMAN + bool HasMetric( CString sClassName, CString sValueName ); CString GetMetricRaw( CString sClassName, CString sValueName ); CString GetMetric( CString sClassName, CString sValueName ); int GetMetricI( CString sClassName, CString sValueName );