diff --git a/stepmania/src/Transition.cpp b/stepmania/src/Transition.cpp index 2c05b8d75f..ad20d8bcc8 100644 --- a/stepmania/src/Transition.cpp +++ b/stepmania/src/Transition.cpp @@ -16,10 +16,14 @@ void Transition::Load( CString sBGAniDir ) if( !sBGAniDir.empty() && sBGAniDir.Right(1) != "/" ) sBGAniDir += "/"; + bool bWasLoaded = m_sprTransition.IsLoaded(); m_sprTransition.Load( sBGAniDir ); m_sprTransition->PlayCommand( "On" ); m_fLengthSeconds = m_sprTransition->GetTweenTimeLeft(); + if( !bWasLoaded ) + this->AddChild( m_sprTransition ); + m_State = waiting; // load sound from file specified by ini, or use the first sound in the directory @@ -51,15 +55,21 @@ void Transition::Update( float fDeltaTime ) if( m_bFirstUpdate ) m_sound.PlayRandom(); - Actor::Update( fDeltaTime ); - + // Check this before running Update, so we draw the last frame of the finished + // transition before sending m_MessageToSendWhenDone. if( m_sprTransition->GetTweenTimeLeft() == 0 ) // over { - SCREENMAN->SendMessageToTopScreen( m_MessageToSendWhenDone ); m_State = finished; + SCREENMAN->SendMessageToTopScreen( m_MessageToSendWhenDone ); } - m_sprTransition->Update( fDeltaTime ); + ActorFrame::Update( fDeltaTime ); +} + +void Transition::Reset() +{ + ASSERT( m_State == finished ); + m_State = waiting; } bool Transition::EarlyAbortDraw() @@ -67,11 +77,6 @@ bool Transition::EarlyAbortDraw() return m_State != transitioning; } -void Transition::DrawPrimitives() -{ - m_sprTransition->Draw(); -} - void Transition::StartTransitioning( ScreenMessage send_when_done ) { if( m_State != waiting ) diff --git a/stepmania/src/Transition.h b/stepmania/src/Transition.h index 2a658396d6..f74fa5904f 100644 --- a/stepmania/src/Transition.h +++ b/stepmania/src/Transition.h @@ -3,13 +3,13 @@ #ifndef TRANSITION_H #define TRANSITION_H -#include "Actor.h" +#include "ActorFrame.h" #include "AutoActor.h" #include "ScreenMessage.h" #include "RandomSample.h" -class Transition : public Actor +class Transition : public ActorFrame { public: Transition(); @@ -17,11 +17,11 @@ public: void Load( CString sBGAniDir ); virtual void Update( float fDeltaTime ); - virtual void DrawPrimitives(); virtual void StartTransitioning( ScreenMessage send_when_done = SM_None ); virtual bool EarlyAbortDraw(); virtual float GetTweenTimeLeft() const; + void Reset(); // explicitly allow transitioning again bool IsTransitioning() const { return m_State == transitioning; }; bool IsFinished() const { return m_State == finished; };