Added How To Play screen, improved scroll bar, and added "toasty" easter egg.

This commit is contained in:
Chris Danford
2002-08-26 05:53:48 +00:00
parent 4b9404c5c2
commit 950f9c1645
13 changed files with 381 additions and 96 deletions
+3
View File
@@ -1,4 +1,7 @@
------------------------CVS after 3.00 beta 6---------------- ------------------------CVS after 3.00 beta 6----------------
CHANGE: NG no longer breaks combo.
NEW FEATURE: Hidden easter egg. You have to be "perfect" to find it.
And cheaters never prosper!
NEW FEATURE: If a song is missing Notes of a certain NotesType, Notes of NEW FEATURE: If a song is missing Notes of a certain NotesType, Notes of
the missing type will be generated from the existing types. For the missing type will be generated from the existing types. For
example, this will allow any pump song to be played in the dance example, this will allow any pump song to be played in the dance
+3 -2
View File
@@ -296,12 +296,13 @@ GradeP2Y=118
[MusicWheel] [MusicWheel]
FadeSeconds=1 FadeSeconds=1
SwitchSeconds=0.1 SwitchSeconds=0.10
SampleMusicDelay=0.2 SampleMusicDelay=0.2
RouletteSwitchSeconds=0.05 RouletteSwitchSeconds=0.05
RouletteSlowDownSwitches=5 RouletteSlowDownSwitches=5
LockedInitialVelocity=7 LockedInitialVelocity=7
ScrollBarX=150 ScrollBarX=148
ScrollBarHeight=360
SectionColor1=0.9, 0.0, 0.2, 1 SectionColor1=0.9, 0.0, 0.2, 1
SectionColor2=0.6, 0.0, 0.4, 1 SectionColor2=0.6, 0.0, 0.4, 1
SectionColor3=0.2, 0.1, 0.3, 1 SectionColor3=0.2, 0.1, 0.3, 1
+34 -7
View File
@@ -14,12 +14,14 @@
#include "PrefsManager.h" #include "PrefsManager.h"
#include "ScreenManager.h" #include "ScreenManager.h"
#include "ScreenGameplay.h" #include "ScreenGameplay.h"
#include "GameState.h"
Combo::Combo() Combo::Combo()
{ {
m_iCurCombo = 0; m_iCurCombo = 0;
m_iMaxCombo = 0; m_iMaxCombo = 0;
m_iCurComboOfPerfects = 0;
m_sprCombo.Load( THEME->GetPathTo("Graphics", "gameplay combo") ); m_sprCombo.Load( THEME->GetPathTo("Graphics", "gameplay combo") );
m_sprCombo.TurnShadowOn(); m_sprCombo.TurnShadowOn();
@@ -41,13 +43,33 @@ Combo::Combo()
} }
void Combo::ContinueCombo() void Combo::UpdateScore( TapNoteScore score )
{ {
m_iCurCombo++; if( PREFSMAN->m_bAutoPlay ) // cheaters never prosper
{
m_iCurCombo = 0;
m_iCurComboOfPerfects = 0;
return;
}
/* If needed, make this a theme metric. */ /* If needed, make this a theme metric. */
const bool HighComboAlert_OnceOnly = true; const bool HighComboAlert_OnceOnly = true;
switch( score )
{
case TNS_PERFECT:
case TNS_GREAT:
// continue combo
m_iCurCombo++;
if( score == TNS_PERFECT ) m_iCurComboOfPerfects++;
else m_iCurComboOfPerfects = 0;
if( (m_iCurComboOfPerfects%150)==0 && RandomFloat(0,1) > 0.5 && !GAMESTATE->m_bDemonstration )
SCREENMAN->SendMessageToTopScreen( SM_BeginToasty, 0 );
if(!HighComboAlert_OnceOnly || m_iCurCombo > m_iMaxCombo) if(!HighComboAlert_OnceOnly || m_iCurCombo > m_iMaxCombo)
switch( m_iCurCombo ) switch( m_iCurCombo )
{ {
@@ -66,6 +88,7 @@ void Combo::ContinueCombo()
// new max combo // new max combo
m_iMaxCombo = max(m_iMaxCombo, m_iCurCombo); m_iMaxCombo = max(m_iMaxCombo, m_iCurCombo);
if( m_iCurCombo <= 4 ) if( m_iCurCombo <= 4 )
{ {
m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
@@ -84,10 +107,11 @@ void Combo::ContinueCombo()
//this->BeginTweening( 0.3f ); //this->BeginTweening( 0.3f );
//this->SetTweenZoom( 1 ); //this->SetTweenZoom( 1 );
} }
} break;
case TNS_GOOD:
void Combo::EndCombo() case TNS_BOO:
{ case TNS_MISS:
// end combo
if( m_iCurCombo > 50 ) if( m_iCurCombo > 50 )
SCREENMAN->SendMessageToTopScreen( SM_ComboStopped, 0 ); SCREENMAN->SendMessageToTopScreen( SM_ComboStopped, 0 );
@@ -95,7 +119,10 @@ void Combo::EndCombo()
m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible m_textComboNumber.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
m_sprCombo.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible m_sprCombo.SetDiffuseColor( D3DXCOLOR(1,1,1,0) ); // invisible
break;
default:
ASSERT(0);
}
} }
int Combo::GetCurrentCombo() int Combo::GetCurrentCombo()
+3 -2
View File
@@ -13,6 +13,7 @@
#include "ActorFrame.h" #include "ActorFrame.h"
#include "Sprite.h" #include "Sprite.h"
#include "BitmapText.h" #include "BitmapText.h"
#include "GameConstantsAndTypes.h" // for TapNoteScore
@@ -21,8 +22,7 @@ class Combo : public ActorFrame
public: public:
Combo(); Combo();
void ContinueCombo(); void UpdateScore( TapNoteScore score );
void EndCombo();
int GetCurrentCombo(); int GetCurrentCombo();
int GetMaxCombo(); int GetMaxCombo();
@@ -30,6 +30,7 @@ public:
protected: protected:
int m_iCurCombo; int m_iCurCombo;
int m_iMaxCombo; int m_iMaxCombo;
int m_iCurComboOfPerfects;
bool m_bComboVisible; bool m_bComboVisible;
Sprite m_sprCombo; Sprite m_sprCombo;
+5 -2
View File
@@ -42,6 +42,7 @@
#define ROULETTE_SLOW_DOWN_SWITCHES THEME->GetMetricI("MusicWheel","RouletteSlowDownSwitches") #define ROULETTE_SLOW_DOWN_SWITCHES THEME->GetMetricI("MusicWheel","RouletteSlowDownSwitches")
#define LOCKED_INITIAL_VELOCITY THEME->GetMetricF("MusicWheel","LockedInitialVelocity") #define LOCKED_INITIAL_VELOCITY THEME->GetMetricF("MusicWheel","LockedInitialVelocity")
#define SCROLL_BAR_X THEME->GetMetricF("MusicWheel","ScrollBarX") #define SCROLL_BAR_X THEME->GetMetricF("MusicWheel","ScrollBarX")
#define SCROLL_BAR_HEIGHT THEME->GetMetricI("MusicWheel","ScrollBarHeight")
#define SECTION_COLOR_1 THEME->GetMetricC("MusicWheel","SectionColor1") #define SECTION_COLOR_1 THEME->GetMetricC("MusicWheel","SectionColor1")
#define SECTION_COLOR_2 THEME->GetMetricC("MusicWheel","SectionColor2") #define SECTION_COLOR_2 THEME->GetMetricC("MusicWheel","SectionColor2")
#define SECTION_COLOR_3 THEME->GetMetricC("MusicWheel","SectionColor3") #define SECTION_COLOR_3 THEME->GetMetricC("MusicWheel","SectionColor3")
@@ -301,6 +302,7 @@ MusicWheel::MusicWheel()
AddSubActor( &m_sprSelectionOverlay ); AddSubActor( &m_sprSelectionOverlay );
m_ScrollBar.SetX( SCROLL_BAR_X ); m_ScrollBar.SetX( SCROLL_BAR_X );
m_ScrollBar.SetBarHeight( SCROLL_BAR_HEIGHT );
this->AddSubActor( &m_ScrollBar ); this->AddSubActor( &m_ScrollBar );
m_soundChangeMusic.Load( THEME->GetPathTo("Sounds","select music change music"), 16 ); m_soundChangeMusic.Load( THEME->GetPathTo("Sounds","select music change music"), 16 );
@@ -750,7 +752,8 @@ void MusicWheel::Update( float fDeltaTime )
} }
float fScrollPercentage = (m_iSelection-m_fPositionOffsetFromSelection) / (float)GetCurWheelItemDatas().GetSize(); float fScrollPercentage = (m_iSelection-m_fPositionOffsetFromSelection) / (float)GetCurWheelItemDatas().GetSize();
m_ScrollBar.SetPercentage( fScrollPercentage ); float fPercentItemsShowing = NUM_WHEEL_ITEMS_TO_DRAW / (float)GetCurWheelItemDatas().GetSize();
m_ScrollBar.SetPercentage( fScrollPercentage-fPercentItemsShowing/2, fScrollPercentage+fPercentItemsShowing/2 );
if( m_WheelState == STATE_ROULETTE_SPINNING ) if( m_WheelState == STATE_ROULETTE_SPINNING )
{ {
@@ -922,7 +925,7 @@ void MusicWheel::Update( float fDeltaTime )
if( m_WheelState == STATE_ROULETTE_SPINNING ) if( m_WheelState == STATE_ROULETTE_SPINNING )
fSpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS; fSpinSpeed = 1.0f/ROULETTE_SWITCH_SECONDS;
else else
fSpinSpeed = 0.6f + fabsf(m_fPositionOffsetFromSelection)/SWITCH_SECONDS; fSpinSpeed = 0.2f + fabsf(m_fPositionOffsetFromSelection)/SWITCH_SECONDS;
if( m_fPositionOffsetFromSelection > 0 ) if( m_fPositionOffsetFromSelection > 0 )
{ {
+2 -1
View File
@@ -531,7 +531,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
for( fY=max(fYTailTop,fYHead); fY<fYTailBottom; fY+=fYStep ) // don't draw the part of the tail that is before the middle of the head for( fY=max(fYTailTop,fYHead); fY<fYTailBottom; fY+=fYStep ) // don't draw the part of the tail that is before the middle of the head
{ {
const float fYTop = fY; const float fYTop = fY;
const float fYBottom = fY+fYStep; const float fYBottom = fY+min(fYStep, fYTailBottom-fY);
const float fXTop = ArrowGetXPos2( m_PlayerNumber, iCol, fYTop ); const float fXTop = ArrowGetXPos2( m_PlayerNumber, iCol, fYTop );
const float fXBottom = ArrowGetXPos2( m_PlayerNumber, iCol, fYBottom ); const float fXBottom = ArrowGetXPos2( m_PlayerNumber, iCol, fYBottom );
const float fXTopLeft = fXTop - fFrameWidth/2; const float fXTopLeft = fXTop - fFrameWidth/2;
@@ -542,6 +542,7 @@ void NoteDisplay::DrawHold( const HoldNote& hn, const bool bActive, const float
const float fBottomDistFromTailTop = fYBottom - fYTailTop; const float fBottomDistFromTailTop = fYBottom - fYTailTop;
const float fTexCoordTop = SCALE( fTopDistFromTailTop, 0, fFrameHeight, 0.5f, 1.0f ); const float fTexCoordTop = SCALE( fTopDistFromTailTop, 0, fFrameHeight, 0.5f, 1.0f );
const float fTexCoordBottom = SCALE( fBottomDistFromTailTop, 0, fFrameHeight, 0.5f, 1.0f ); const float fTexCoordBottom = SCALE( fBottomDistFromTailTop, 0, fFrameHeight, 0.5f, 1.0f );
ASSERT( fBottomDistFromTailTop <= fFrameHeight );
const float fTexCoordLeft = bActive ? 0.25f : 0.00f; const float fTexCoordLeft = bActive ? 0.25f : 0.00f;
const float fTexCoordRight = bActive ? 0.50f : 0.25f; const float fTexCoordRight = bActive ? 0.50f : 0.25f;
const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop ); const float fAlphaTop = ArrowGetAlpha( m_PlayerNumber, fYTop );
+2 -13
View File
@@ -200,7 +200,6 @@ void Player::Update( float fDeltaTime )
{ {
hns = HNS_NG; hns = HNS_NG;
HandleNoteScore( hns ); HandleNoteScore( hns );
m_Combo.EndCombo();
m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_NG ); m_HoldJudgement[hn.m_iTrack].SetHoldJudgement( HNS_NG );
m_NoteField.m_HoldNoteScores[i] = HNS_NG; // update the NoteField display m_NoteField.m_HoldNoteScores[i] = HNS_NG; // update the NoteField display
} }
@@ -401,18 +400,8 @@ void Player::OnRowDestroyed( int col, int iIndexThatWasSteppedOn )
HandleNoteScore( score ); // update score - called once per note in this row HandleNoteScore( score ); // update score - called once per note in this row
// update combo - called once per note in this row // update combo - called once per note in this row
switch( score ) m_Combo.UpdateScore( score );
{
case TNS_PERFECT:
case TNS_GREAT:
m_Combo.ContinueCombo();
GAMESTATE->m_iMaxCombo[m_PlayerNumber] = max( GAMESTATE->m_iMaxCombo[m_PlayerNumber], m_Combo.GetCurrentCombo() ); GAMESTATE->m_iMaxCombo[m_PlayerNumber] = max( GAMESTATE->m_iMaxCombo[m_PlayerNumber], m_Combo.GetCurrentCombo() );
break;
case TNS_GOOD:
case TNS_BOO:
m_Combo.EndCombo();
break;
}
} }
} }
@@ -468,7 +457,7 @@ int Player::UpdateTapNotesMissedOlderThan( float fMissIfOlderThanThisBeat )
if( iNumMissesFound > 0 ) if( iNumMissesFound > 0 )
{ {
m_Judgement.SetJudgement( TNS_MISS ); m_Judgement.SetJudgement( TNS_MISS );
m_Combo.EndCombo(); m_Combo.UpdateScore( TNS_MISS );
} }
return iNumMissesFound; return iNumMissesFound;
+35 -5
View File
@@ -179,7 +179,7 @@ float PLAYER_OPTIONS_Y( int p, bool bExtra ) {
const ScreenMessage SM_NotesEnded = ScreenMessage(SM_User+101); const ScreenMessage SM_NotesEnded = ScreenMessage(SM_User+101);
const ScreenMessage SM_BeginLoadingNextSong = ScreenMessage(SM_User+102); const ScreenMessage SM_BeginLoadingNextSong = ScreenMessage(SM_User+102);
const ScreenMessage SM_BeginFadingToTitleMenu = ScreenMessage(SM_User+103); const ScreenMessage SM_BeginFadingToTitleMenu = ScreenMessage(SM_User+103);
const ScreenMessage SM_PlayToastySound = ScreenMessage(SM_User+105);
// received while STATE_OUTRO // received while STATE_OUTRO
const ScreenMessage SM_ShowCleared = ScreenMessage(SM_User+111); const ScreenMessage SM_ShowCleared = ScreenMessage(SM_User+111);
@@ -535,6 +535,12 @@ ScreenGameplay::ScreenGameplay()
this->AddSubActor( &m_textSurviveTime ); this->AddSubActor( &m_textSurviveTime );
m_sprToasty.Load( THEME->GetPathTo("Graphics","gameplay toasty") );
m_sprToasty.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
this->AddSubActor( &m_sprToasty );
m_soundToasty.Load( THEME->GetPathTo("Sounds","gameplay toasty") );
if( !GAMESTATE->m_bDemonstration ) // don't load sounds if just playing demonstration if( !GAMESTATE->m_bDemonstration ) // don't load sounds if just playing demonstration
{ {
@@ -903,7 +909,7 @@ void ScreenGameplay::Update( float fDeltaTime )
} }
if( bAnyoneHasANote ) if( bAnyoneHasANote )
m_soundAssistTick.PlayRandom(); m_soundAssistTick.Play();
iRowLastCrossed = iRowNow; iRowLastCrossed = iRowNow;
@@ -945,7 +951,6 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
SOUND->PlayOnceStreamed( THEME->GetPathTo("Sounds","insert coin") ); SOUND->PlayOnceStreamed( THEME->GetPathTo("Sounds","insert coin") );
::Sleep( 1000 ); // do a little pause, like the arcade does ::Sleep( 1000 ); // do a little pause, like the arcade does
this->SendScreenMessage( SM_GoToTitleMenu, 0 ); this->SendScreenMessage( SM_GoToTitleMenu, 0 );
// m_Fade.CloseWipingRight( SM_GoToTitleMenu );
} }
return; // don't fall through below return; // don't fall through below
} }
@@ -955,6 +960,9 @@ void ScreenGameplay::Input( const DeviceInput& DeviceI, const InputEventType typ
{ {
switch( DeviceI.button ) switch( DeviceI.button )
{ {
// case DIK_F6:
// this->SendScreenMessage( SM_BeginToasty, 0 );
// break;
case DIK_F7: case DIK_F7:
if( GAMESTATE->m_SongOptions.m_AssistType == SongOptions::ASSIST_NONE ) if( GAMESTATE->m_SongOptions.m_AssistType == SongOptions::ASSIST_NONE )
GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_TICK; GAMESTATE->m_SongOptions.m_AssistType = SongOptions::ASSIST_TICK;
@@ -1251,6 +1259,26 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
m_Fade.CloseWipingRight( SM_GoToTitleMenu ); m_Fade.CloseWipingRight( SM_GoToTitleMenu );
break; break;
case SM_BeginToasty:
this->SendScreenMessage( SM_PlayToastySound, 0.3f );
// set off screen
m_sprToasty.SetDiffuseColor( D3DXCOLOR(1,1,1,1) );
m_sprToasty.SetX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.SetY( SCREEN_BOTTOM-m_sprToasty.GetUnzoomedHeight()/2 );
m_sprToasty.BeginTweeningQueued( 0.2f, Actor::TWEEN_BIAS_BEGIN ); // slide on
m_sprToasty.SetTweenX( SCREEN_RIGHT-m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweeningQueued( 0.6f ); // sleep
m_sprToasty.BeginTweeningQueued( 0.3f, Actor::TWEEN_BIAS_END ); // slide off
m_sprToasty.SetTweenX( SCREEN_RIGHT+m_sprToasty.GetUnzoomedWidth()/2 );
m_sprToasty.BeginTweeningQueued( 0.001f ); // fade out
m_sprToasty.SetDiffuseColor( D3DXCOLOR(1,1,1,0) );
break;
case SM_PlayToastySound:
m_soundToasty.Play();
break;
case SM_100Combo: case SM_100Combo:
if( m_fTimeLeftBeforeDancingComment < 12 ) if( m_fTimeLeftBeforeDancingComment < 12 )
{ {
@@ -1332,11 +1360,13 @@ void ScreenGameplay::HandleScreenMessage( const ScreenMessage SM )
// received while STATE_OUTRO // received while STATE_OUTRO
case SM_ShowCleared: case SM_ShowCleared:
m_sprCleared.StartFocusing(); m_sprCleared.BeginTweening(1.0f);
m_sprCleared.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,1) );
SCREENMAN->SendMessageToTopScreen( SM_HideCleared, 2.5 ); SCREENMAN->SendMessageToTopScreen( SM_HideCleared, 2.5 );
break; break;
case SM_HideCleared: case SM_HideCleared:
m_sprCleared.StartBlurring(); m_sprCleared.BeginTweening(1.0f);
m_sprCleared.SetTweenDiffuseColor( D3DXCOLOR(1,1,1,0) );
SCREENMAN->SendMessageToTopScreen( SM_GoToStateAfterCleared, 1 ); SCREENMAN->SendMessageToTopScreen( SM_GoToStateAfterCleared, 1 );
break; break;
case SM_SaveChangedBeforeGoingBack: case SM_SaveChangedBeforeGoingBack:
+9 -3
View File
@@ -29,6 +29,8 @@
// messages sent by Combo // messages sent by Combo
const ScreenMessage SM_BeginToasty = ScreenMessage(SM_User+104);
const ScreenMessage SM_100Combo = ScreenMessage(SM_User+200); const ScreenMessage SM_100Combo = ScreenMessage(SM_User+200);
const ScreenMessage SM_200Combo = ScreenMessage(SM_User+201); const ScreenMessage SM_200Combo = ScreenMessage(SM_User+201);
const ScreenMessage SM_300Combo = ScreenMessage(SM_User+202); const ScreenMessage SM_300Combo = ScreenMessage(SM_User+202);
@@ -102,7 +104,7 @@ private:
FocusingSprite m_sprReady; FocusingSprite m_sprReady;
FocusingSprite m_sprHereWeGo; FocusingSprite m_sprHereWeGo;
FocusingSprite m_sprCleared; MotionBlurSprite m_sprCleared;
MotionBlurSprite m_sprFailed; MotionBlurSprite m_sprFailed;
BitmapText m_textSurviveTime; // only shown in extra stage BitmapText m_textSurviveTime; // only shown in extra stage
@@ -115,6 +117,8 @@ private:
Sprite m_sprOniGameOver[NUM_PLAYERS]; Sprite m_sprOniGameOver[NUM_PLAYERS];
void ShowOniGameOver( PlayerNumber p ); void ShowOniGameOver( PlayerNumber p );
Sprite m_sprToasty; // easter egg
Quad m_quadDemonstrationBox; Quad m_quadDemonstrationBox;
Sprite m_sprDemonstration; Sprite m_sprDemonstration;
@@ -138,9 +142,11 @@ private:
RandomSample m_announcerComboStopped; RandomSample m_announcerComboStopped;
int m_iRowLastCrossed; int m_iRowLastCrossed;
RandomSample m_soundAssistTick; RageSoundSample m_soundAssistTick;
RageSoundSample m_soundToasty;
RageSoundStream m_soundMusic; RageSoundStream m_soundMusic;
+127
View File
@@ -0,0 +1,127 @@
#include "stdafx.h"
/*
-----------------------------------------------------------------------------
Class: ScreenHowToPlay
Desc: See header.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "ScreenHowToPlay.h"
#include <assert.h>
#include "RageTextureManager.h"
#include "RageUtil.h"
#include "RageMusic.h"
#include "ScreenManager.h"
#include "ScreenSelectMusic.h"
#include "ScreenSelectCourse.h"
#include "GameConstantsAndTypes.h"
#include "RageLog.h"
#include "GameState.h"
const ScreenMessage SM_GoToNextState = ScreenMessage(SM_User + 1);
ScreenHowToPlay::ScreenHowToPlay()
{
LOG->Trace( "ScreenHowToPlay::ScreenHowToPlay()" );
m_Menu.Load(
THEME->GetPathTo("Graphics","How To Play Background"),
THEME->GetPathTo("Graphics","How To Play Top Edge"),
ssprintf("%s %s to change line %s %s to select between options then press START", CString(char(3)), CString(char(4)), CString(char(1)), CString(char(2)) ),
false, true, 20
);
this->AddSubActor( &m_Menu );
CString sHowToPlayPath;
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_ARCADE:
case PLAY_MODE_ENDLESS:
sHowToPlayPath = THEME->GetPathTo("Graphics","How To Play Arcade");
break;
case PLAY_MODE_ONI:
sHowToPlayPath = THEME->GetPathTo("Graphics","How To Play Arcade");
break;
default:
ASSERT(0);
}
m_sprHowToPlay.Load( sHowToPlayPath );
m_sprHowToPlay.SetXY( CENTER_X, CENTER_Y );
this->AddSubActor( &m_sprHowToPlay );
m_sprHowToPlay.SetX( SCREEN_LEFT-SCREEN_WIDTH );
m_sprHowToPlay.BeginTweening( 0.3f, Actor::TWEEN_BIAS_BEGIN );
m_sprHowToPlay.SetTweenX( 0 );
}
ScreenHowToPlay::~ScreenHowToPlay()
{
LOG->Trace( "ScreenHowToPlay::~ScreenHowToPlay()" );
}
void ScreenHowToPlay::Update( float fDeltaTime )
{
//LOG->Trace( "ScreenHowToPlay::Update(%f)", fDeltaTime );
Screen::Update( fDeltaTime );
}
void ScreenHowToPlay::DrawPrimitives()
{
m_Menu.DrawBottomLayer();
Screen::DrawPrimitives();
m_Menu.DrawTopLayer();
}
void ScreenHowToPlay::Input( const DeviceInput& DeviceI, const InputEventType type, const GameInput &GameI, const MenuInput &MenuI, const StyleInput &StyleI )
{
if( m_Menu.IsClosing() )
return;
// default input handler
Screen::Input( DeviceI, type, GameI, MenuI, StyleI );
}
void ScreenHowToPlay::HandleScreenMessage( const ScreenMessage SM )
{
switch( SM )
{
case SM_MenuTimer:
this->MenuStart(PLAYER_1);
break;
case SM_GoToNextState:
switch( GAMESTATE->m_PlayMode )
{
case PLAY_MODE_ARCADE:
SCREENMAN->SetNewScreen( new ScreenSelectMusic );
break;
case PLAY_MODE_ONI:
case PLAY_MODE_ENDLESS:
SCREENMAN->SetNewScreen( new ScreenSelectCourse );
break;
default:
ASSERT(0);
}
break;
}
}
void ScreenHowToPlay::MenuBack( const PlayerNumber p )
{
}
void ScreenHowToPlay::MenuStart( const PlayerNumber p )
{
m_Menu.TweenOffScreenToMenu( SM_GoToNextState );
m_sprHowToPlay.BeginTweening( 0.3f, Actor::TWEEN_BIAS_END );
m_sprHowToPlay.SetTweenX( SCREEN_RIGHT );
}
+39
View File
@@ -0,0 +1,39 @@
#pragma once
/*
-----------------------------------------------------------------------------
Class: ScreenHowToPlay
Desc: A grid of options, and the selected option is drawn with a highlight rectangle.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
Chris Danford
-----------------------------------------------------------------------------
*/
#include "Screen.h"
#include "Sprite.h"
#include "RandomSample.h"
#include "TransitionInvisible.h"
#include "MenuElements.h"
class ScreenHowToPlay : public Screen
{
public:
ScreenHowToPlay();
virtual ~ScreenHowToPlay();
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 MenuBack( const PlayerNumber p );
virtual void MenuStart( const PlayerNumber p );
protected:
Sprite m_sprHowToPlay;
MenuElements m_Menu;
};
+69 -18
View File
@@ -15,39 +15,90 @@
#include "GameConstantsAndTypes.h" #include "GameConstantsAndTypes.h"
const float BAR_HEIGHT = 376;
ScrollBar::ScrollBar() ScrollBar::ScrollBar()
{ {
m_sprBackground.Load( THEME->GetPathTo("Graphics","select music scrollbar") ); m_sprBackground.Load( THEME->GetPathTo("Graphics","select music scrollbar 2x2") );
m_sprBackground.StopAnimating(); m_sprBackground.StopAnimating();
m_sprBackground.SetState( 1 ); m_sprBackground.SetState( 1 );
m_sprBackground.SetZoomY( BAR_HEIGHT/m_sprBackground.GetUnzoomedHeight() );
this->AddSubActor( &m_sprBackground ); this->AddSubActor( &m_sprBackground );
m_sprTopButton.Load( THEME->GetPathTo("Graphics","select music scrollbar") ); m_sprScrollThumbPart1.Load( THEME->GetPathTo("Graphics","select music scrollbar 2x2") );
m_sprScrollThumbPart1.StopAnimating();
m_sprScrollThumbPart1.SetState( 3 );
this->AddSubActor( &m_sprScrollThumbPart1 );
m_sprScrollThumbPart2.Load( THEME->GetPathTo("Graphics","select music scrollbar 2x2") );
m_sprScrollThumbPart2.StopAnimating();
m_sprScrollThumbPart2.SetState( 3 );
this->AddSubActor( &m_sprScrollThumbPart2 );
m_sprTopButton.Load( THEME->GetPathTo("Graphics","select music scrollbar 2x2") );
m_sprTopButton.StopAnimating(); m_sprTopButton.StopAnimating();
m_sprTopButton.SetState( 0 ); m_sprTopButton.SetState( 0 );
m_sprTopButton.SetY( -BAR_HEIGHT/2 );
this->AddSubActor( &m_sprTopButton ); this->AddSubActor( &m_sprTopButton );
m_sprBottomButton.Load( THEME->GetPathTo("Graphics","select music scrollbar") ); m_sprBottomButton.Load( THEME->GetPathTo("Graphics","select music scrollbar 2x2") );
m_sprBottomButton.StopAnimating(); m_sprBottomButton.StopAnimating();
m_sprBottomButton.SetState( 2 ); m_sprBottomButton.SetState( 2 );
m_sprBottomButton.SetY( BAR_HEIGHT/2 );
this->AddSubActor( &m_sprBottomButton ); this->AddSubActor( &m_sprBottomButton );
m_sprScrollThumb.Load( THEME->GetPathTo("Graphics","select music scrollbar") ); SetBarHeight( 100 );
m_sprScrollThumb.StopAnimating();
m_sprScrollThumb.SetState( 3 );
m_sprScrollThumb.SetY( CENTER_Y );
this->AddSubActor( &m_sprScrollThumb );
} }
void ScrollBar::SetPercentage( float fPercentageFromTop ) void ScrollBar::SetBarHeight( int iHeight )
{ {
if( fPercentageFromTop < 0 ) fPercentageFromTop += 1; m_iBarHeight = iHeight;
fPercentageFromTop = fmodf( fPercentageFromTop, 1 ); m_sprBackground.SetZoomY( m_iBarHeight/m_sprBackground.GetUnzoomedHeight() );
float fY = -BAR_HEIGHT/2+16 + fPercentageFromTop*(BAR_HEIGHT-32); m_sprTopButton.SetY( -m_iBarHeight/2.0f );
m_sprScrollThumb.SetY( (float)roundf(fY) ); m_sprBottomButton.SetY( +m_iBarHeight/2.0f );
m_sprScrollThumbPart1.SetY( 0 );
m_sprScrollThumbPart2.SetY( 0 );
}
void ScrollBar::SetPercentage( float fStartPercent, float fEndPercent )
{
const int k_iBarContentHeight = m_iBarHeight - int( m_sprTopButton.GetUnzoomedHeight()/2 + m_sprBottomButton.GetUnzoomedHeight()/2 );
// make sure the percent numbers are between 0 and 1
fStartPercent = fmodf( fStartPercent+1, 1 );
fEndPercent = fmodf( fEndPercent+1, 1 );
int iPart1TopY, iPart1BottomY, iPart2TopY, iPart2BottomY;
if( fStartPercent < fEndPercent ) // we only need to one 1 thumb part
{
iPart1TopY = (int)SCALE( fStartPercent,0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
iPart1BottomY = (int)SCALE( fEndPercent, 0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
iPart2TopY = -1;
iPart2BottomY = -1;
}
else // we need two thumb parts
{
iPart1TopY = (int)SCALE( 0.0f, 0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
iPart1BottomY = (int)SCALE( fEndPercent, 0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
iPart2TopY = (int)SCALE( fStartPercent,0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
iPart2BottomY = (int)SCALE( 1.0f, 0.0f, 1.0f, -k_iBarContentHeight/2.0f, +k_iBarContentHeight/2.0f );
}
m_sprScrollThumbPart1.StretchTo( CRect(
(int)-m_sprScrollThumbPart1.GetUnzoomedWidth()/2,
iPart1TopY,
(int)+m_sprScrollThumbPart1.GetUnzoomedWidth()/2,
iPart1BottomY
) );
if( iPart2TopY != -1 )
{
m_sprScrollThumbPart2.StretchTo( CRect(
(int)-m_sprScrollThumbPart2.GetUnzoomedWidth()/2,
iPart2TopY,
(int)+m_sprScrollThumbPart2.GetUnzoomedWidth()/2,
iPart2BottomY
) );
}
else
{
m_sprScrollThumbPart2.SetZoomY( 0 );
}
} }
+11 -4
View File
@@ -19,9 +19,16 @@ class ScrollBar : public ActorFrame
public: public:
ScrollBar(); ScrollBar();
void SetPercentage( float fPercentageFromTop ); void SetBarHeight( int iHeight );
void SetPercentage( float fStartPercent, float fEndPercent);
private: protected:
Sprite m_sprTopButton, m_sprBottomButton;
Sprite m_sprBackground, m_sprScrollThumb; int m_iBarHeight;
Sprite m_sprTopButton;
Sprite m_sprBottomButton;
Sprite m_sprBackground;
Sprite m_sprScrollThumbPart1;
Sprite m_sprScrollThumbPart2;
}; };