Browse Source

Merge pull request #375 from greenfire27/CompositeSpriteAnimationBug

CompositeSprite Animation Bug
Peter Robinson 9 years ago
parent
commit
6db7c26135

+ 12 - 0
engine/source/2d/core/SpriteBatch.cc

@@ -1239,6 +1239,18 @@ SpriteBatchItem* SpriteBatch::createSprite( const SpriteBatchItem::LogicalPositi
 
 //------------------------------------------------------------------------------
 
+void SpriteBatch::integrateSprites(const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats)
+{
+   //process the elapsed time for all sprites
+   for (typeSpriteBatchHash::iterator spriteItr = mSprites.begin(); spriteItr != mSprites.end(); ++spriteItr)
+   {
+      // Update image frame provider.
+      spriteItr->value->ImageFrameProvider::update(elapsedTime);
+   }
+}
+
+//------------------------------------------------------------------------------
+
 void SpriteBatch::setBatchTransform( const b2Transform& batchTransform )
 {
     // Update world transform.

+ 2 - 0
engine/source/2d/core/SpriteBatch.h

@@ -198,6 +198,8 @@ protected:
 
     virtual SpriteBatchItem* createSprite( const SpriteBatchItem::LogicalPosition& logicalPosition );
 
+    void integrateSprites(const F32 totalTime, const F32 elapsedTime, DebugStats* pDebugStats);
+
     void setBatchTransform( const b2Transform& batchTransform );
     void updateLocalExtents( void );
 

+ 2 - 2
engine/source/2d/core/SpriteBatchItem.cc

@@ -133,8 +133,8 @@ void SpriteBatchItem::resetState( void )
 
     mUserData = NULL;
 
-    // Require self ticking.
-    mSelfTick = true;
+    // Only animates if the scene is not paused.
+    mSelfTick = false;
 }
 
 //------------------------------------------------------------------------------

+ 2 - 0
engine/source/2d/sceneobject/CompositeSprite.cc

@@ -165,6 +165,8 @@ void CompositeSprite::integrateObject( const F32 totalTime, const F32 elapsedTim
     // Call Parent.
     Parent::integrateObject( totalTime, elapsedTime, pDebugStats );
 
+    integrateSprites(totalTime, elapsedTime, pDebugStats);
+
     // Finish if the spatials are NOT dirty.
     if ( !getSpatialDirty() )
         return;