diff --git a/stepmania/src/Sprite.cpp b/stepmania/src/Sprite.cpp index 5a48b70d89..1ec769aef6 100644 --- a/stepmania/src/Sprite.cpp +++ b/stepmania/src/Sprite.cpp @@ -103,6 +103,8 @@ void Sprite::Load( RageTextureID ID ) { if( !ID.filename.empty() ) LoadFromTexture( ID ); + + LoadStatesFromTexture(); }; void Sprite::LoadFromNode( const XNode* pNode ) @@ -118,6 +120,8 @@ void Sprite::LoadFromNode( const XNode* pNode ) { // Load the texture LoadFromTexture( sPath ); + + LoadStatesFromTexture(); // Read in frames and delays from the sprite file, @@ -275,8 +279,25 @@ void Sprite::LoadFromTexture( RageTextureID ID ) Sprite::m_size.x = (float)m_pTexture->GetSourceFrameWidth(); Sprite::m_size.y = (float)m_pTexture->GetSourceFrameHeight(); + // apply clipping (if any) + if( m_fRememberedClipWidth != -1 && m_fRememberedClipHeight != -1 ) + ScaleToClipped( m_fRememberedClipWidth, m_fRememberedClipHeight ); +} + +void Sprite::LoadStatesFromTexture() +{ // Assume the frames of this animation play in sequential order with 0.1 second delay. m_States.clear(); + + if( m_pTexture == NULL ) + { + State newState; + newState.fDelay = 0.1f; + newState.rect = RectF( 0, 0, 1, 1 ); + m_States.push_back( newState ); + return; + } + for( int i=0; iGetNumFrames(); ++i ) { State newState; @@ -284,10 +305,6 @@ void Sprite::LoadFromTexture( RageTextureID ID ) newState.rect = *m_pTexture->GetTextureCoordRect( i ); m_States.push_back( newState ); } - - // apply clipping (if any) - if( m_fRememberedClipWidth != -1 && m_fRememberedClipHeight != -1 ) - ScaleToClipped( m_fRememberedClipWidth, m_fRememberedClipHeight ); } void Sprite::UpdateAnimationState() diff --git a/stepmania/src/Sprite.h b/stepmania/src/Sprite.h index b35020c214..cbe238ab4c 100644 --- a/stepmania/src/Sprite.h +++ b/stepmania/src/Sprite.h @@ -67,6 +67,7 @@ public: protected: void LoadFromTexture( RageTextureID ID ); + void LoadStatesFromTexture(); void DrawTexture( const TweenState *state );