From 431e293ce6f033f2b610bf47cd1ce9f04ebcae82 Mon Sep 17 00:00:00 2001 From: Andrew Livy Date: Fri, 2 May 2003 15:12:09 +0000 Subject: [PATCH] Pump Theme Fixes/SM Extreme Fixes: Stretch on Fail caused the two colliding images to be too large..... --- stepmania/src/ScreenSelectMode.cpp | 28 +++++++++++++- stepmania/src/ScreenSelectMode.h | 2 + stepmania/src/ScrollingList.cpp | 60 +++++++++++++++++++++++++++++- stepmania/src/ScrollingList.h | 1 + 4 files changed, 88 insertions(+), 3 deletions(-) diff --git a/stepmania/src/ScreenSelectMode.cpp b/stepmania/src/ScreenSelectMode.cpp index 62530accf3..67e5393e88 100644 --- a/stepmania/src/ScreenSelectMode.cpp +++ b/stepmania/src/ScreenSelectMode.cpp @@ -32,6 +32,7 @@ Chris Danford #define SCROLLING_LIST_Y THEME->GetMetricI("ScreenSelectMode","ScrollingListY") #define GUIDE_X THEME->GetMetricF("ScreenSelectMode", "GuideX") #define GUIDE_Y THEME->GetMetricF("ScreenSelectMode", "GuideY") +#define USECONFIRM THEME->GetMetricI("ScreenSelectMode","UseConfirm") /************************************ ScreenSelectMode (Constructor) @@ -40,11 +41,13 @@ Desc: Sets up the screen display ScreenSelectMode::ScreenSelectMode() : ScreenSelect( "ScreenSelectMode" ) { + m_bSelected = false; m_ChoiceListFrame.Load( THEME->GetPathToG("ScreenSelectMode list frame")); m_ChoiceListFrame.SetXY( SCROLLING_LIST_X, SCROLLING_LIST_Y); this->AddChild( &m_ChoiceListFrame ); m_soundModeChange.Load( THEME->GetPathToS("ScreenSelectMode modechange")); + m_soundConfirm.Load( THEME->GetPathToS("ScreenSelectMode modeconfirm")); unsigned i; for( i=0; iTrace( "ScreenSelectMode::~ScreenSelectMode()" ); } void ScreenSelectMode::MenuLeft( PlayerNumber pn ) { + if(m_bSelected && USECONFIRM == 1) + { + m_bSelected = false; + m_ScrollingList.StopBouncing(); + } m_ScrollingList.Left(); m_soundModeChange.Play(); } void ScreenSelectMode::MenuRight( PlayerNumber pn ) { + if(m_bSelected && USECONFIRM == 1) + { + m_bSelected = false; + m_ScrollingList.StopBouncing(); + } m_ScrollingList.Right(); m_soundModeChange.Play(); } @@ -116,8 +130,8 @@ void ScreenSelectMode::UpdateSelectableChoices() if( (PREFSMAN->m_bJointPremium && INCLUDE_DOUBLE_IN_JP == 1 && ((GAMESTATE->GetNumSidesJoined() == 1 && mc.numSidesJoinedToPlay == 1) || (GAMESTATE->GetNumSidesJoined() == 2 && mc.numSidesJoinedToPlay == 2))) || (PREFSMAN->m_bJointPremium && INCLUDE_DOUBLE_IN_JP == 0 && - ((modename.substr(0, 6) == "DOUBLE" && GAMESTATE->GetNumSidesJoined() != 2 ) || GAMESTATE->GetNumSidesJoined() == 1 && mc.numSidesJoinedToPlay == 1) || - (modename.substr(0, 6) != "DOUBLE" && GAMESTATE->GetNumSidesJoined() == 2 && mc.numSidesJoinedToPlay == 2)) || + (((modename.substr(0, 6) == "DOUBLE" || modename.substr(0, 13) == "ARCADE-DOUBLE") && GAMESTATE->GetNumSidesJoined() != 2 ) || GAMESTATE->GetNumSidesJoined() == 1 && mc.numSidesJoinedToPlay == 1) || + ((modename.substr(0, 6) != "DOUBLE" || modename.substr(0, 13) != "ARCADE-DOUBLE") && GAMESTATE->GetNumSidesJoined() == 2 && mc.numSidesJoinedToPlay == 2)) || (!PREFSMAN->m_bJointPremium) ) { @@ -134,6 +148,7 @@ void ScreenSelectMode::UpdateSelectableChoices() GraphicPaths.push_back(arrayLocations[i]); } } + m_ScrollingList.SetSelection(0); m_ScrollingList.Unload(); m_ScrollingList.Load(GraphicPaths); } @@ -141,7 +156,16 @@ void ScreenSelectMode::UpdateSelectableChoices() void ScreenSelectMode::MenuStart( PlayerNumber pn ) { + if(!m_bSelected && USECONFIRM == 1) + { + m_soundConfirm.Play(); + m_ScrollingList.StartBouncing(); + m_bSelected = true; + return; + } SCREENMAN->PostMessageToTopScreen( SM_AllDoneChoosing, 0 ); + m_ScrollingList.BeginTweening(1.0f); + m_ScrollingList.SetRotationZ(0.0f); } int ScreenSelectMode::GetSelectionIndex( PlayerNumber pn ) diff --git a/stepmania/src/ScreenSelectMode.h b/stepmania/src/ScreenSelectMode.h index 10a82d5d11..4f8c0a76d7 100644 --- a/stepmania/src/ScreenSelectMode.h +++ b/stepmania/src/ScreenSelectMode.h @@ -37,6 +37,7 @@ protected: int m_iNumChoices; int m_iSelectableChoices[MAX_ELEMS]; RageSound m_soundModeChange; + RageSound m_soundConfirm; CStringArray arrayLocations; ScrollingList m_ScrollingList; Sprite m_ChoiceListFrame; @@ -44,4 +45,5 @@ protected: Sprite m_sprJoinMessage[NUM_PLAYERS]; Sprite m_sprJoinFrame[NUM_PLAYERS]; Sprite m_Guide; + bool m_bSelected; }; diff --git a/stepmania/src/ScrollingList.cpp b/stepmania/src/ScrollingList.cpp index 516c86ae93..0b86779a56 100644 --- a/stepmania/src/ScrollingList.cpp +++ b/stepmania/src/ScrollingList.cpp @@ -63,6 +63,7 @@ ScrollingList::ScrollingList() m_iBounceDir=0; m_iBounceWait=0; m_RippleCSprite.SetXY(0,0); + m_RippleSprite.SetXY(0,0); } void ScrollingList::UseSpriteType(int NewSpriteType) @@ -96,7 +97,10 @@ void ScrollingList::StartBouncing() m_iBouncingState = 1; if(m_iSpriteType == SPRITE_TYPE_SPRITE) { - + m_RippleSprite.Load( m_apSprites[m_iSelection]->GetTexturePath() ); + m_RippleSprite.SetXY( m_apSprites[m_iSelection]->GetX(), m_apSprites[m_iSelection]->GetY() ); + m_RippleSprite.SetZoom( 1.1f ); + m_RippleSprite.SetDiffuse( RageColor(1,1,1,0.5f)); } else { @@ -271,6 +275,55 @@ void ScrollingList::Update( float fDeltaTime ) if(m_iSpriteType == SPRITE_TYPE_SPRITE) { + if(m_iBouncingState) // bouncing + { + if(m_fNextTween <= 0) // we're ready to update stuff + { + m_fNextTween = 0.1f; // reset the tween count + if(m_apSprites[m_iSelection]->GetZoom() >= 1.2f && m_iBounceDir == 1) // if we're over biggest boundary + { + m_iBounceDir = 2; // next phase will be a wait + m_apSprites[m_iSelection]->SetZoom( m_apSprites[m_iSelection]->GetZoom() - 0.25f); // make it smaller + m_RippleSprite.SetZoom( m_RippleSprite.GetZoom() - 0.30f); // make the ripple smaller + } + else if(m_apSprites[m_iSelection]->GetZoom() <= 1.0f && m_iBounceDir == 0) // if we're over smallest boundary + { + m_iBounceDir = 1; // next phase will be making graphic bigger + m_apSprites[m_iSelection]->SetZoom( m_apSprites[m_iSelection]->GetZoom() + 0.25f); // make it bigger + m_RippleSprite.SetZoom( m_RippleSprite.GetZoom() + 0.30f); // make ripple bigger + m_RippleSprite.SetDiffuse( RageColor(1,1,1,0.5f)); // make ripple appear semi transparent + } + else if(m_iBounceDir == 0 && m_apSprites[m_iSelection]->GetZoom() != 1.0f) // travelling smaller + { + m_apSprites[m_iSelection]->SetZoom( m_apSprites[m_iSelection]->GetZoom() - 0.25f); // make smaller + m_RippleSprite.SetZoom( m_RippleSprite.GetZoom() - 0.30f); // make smaller + } + else if(m_iBounceDir == 1 && m_apSprites[m_iSelection]->GetZoom() != 1.2f) // travelling bigger + { + m_apSprites[m_iSelection]->SetZoom( m_apSprites[m_iSelection]->GetZoom() + 0.25f); // make bigger + m_RippleSprite.SetZoom( m_RippleSprite.GetZoom() + 0.30f ); // make bigger + } + else if(m_iBounceDir == 2) // we're waiting before doing bounce processes again + { + if(m_iBounceWait == 0) // if we're at 0 from last time.... + m_iBounceWait = 3; // start wait at 3 + else + m_iBounceWait--; // otherwise decrease by 1 + + if(m_iBounceWait == 2) // if we're one moment after start of wait + m_RippleSprite.SetDiffuse( RageColor(1,1,1,0.0f)); // hide the ripple + + if(m_iBounceWait == 0) // if we just turned to 0 + m_iBounceDir = 0; // go to the 'make smaller' stage. as we SHOULD already be pretty small, we should start increasing in size a couple phases on. + } + } + else + { + m_fNextTween -= fDeltaTime; // update the tween time. + } + + } + for( unsigned i=0; iUpdate( fDeltaTime ); } @@ -434,12 +487,17 @@ void ScrollingList::DrawPrimitives() } if(m_iSpriteType == SPRITE_TYPE_SPRITE) { + if(m_iBouncingState) + { + m_RippleSprite.Draw(); + } } else { if(m_iBouncingState) { m_RippleCSprite.Draw(); + m_RippleSprite.Draw(); } } } diff --git a/stepmania/src/ScrollingList.h b/stepmania/src/ScrollingList.h index 7ccb10820d..b3500d6d97 100644 --- a/stepmania/src/ScrollingList.h +++ b/stepmania/src/ScrollingList.h @@ -55,6 +55,7 @@ protected: float m_fNextTween; CroppedSprite m_RippleCSprite; + Sprite m_RippleSprite; vector m_apSprites; // stores the list of elements (left to right) vector m_apCSprites; // stores the list of elements (left to right)