Don't use deque in Actor; it allocates too much. Store pointers; moving

pointers around is cheap enough.
This commit is contained in:
Glenn Maynard
2005-07-19 05:56:36 +00:00
parent 1783fe71ef
commit c4495e3900
2 changed files with 20 additions and 17 deletions
+18 -14
View File
@@ -110,6 +110,7 @@ Actor::Actor()
Actor::~Actor() Actor::~Actor()
{ {
StopTweening();
UnsubcribeAndClearCommands(); UnsubcribeAndClearCommands();
} }
@@ -418,8 +419,8 @@ void Actor::UpdateTweening( float fDeltaTime )
// update current tween state // update current tween state
// earliest tween // earliest tween
TweenState &TS = m_Tweens[0].state; TweenState &TS = m_Tweens[0]->state;
TweenInfo &TI = m_Tweens[0].info; TweenInfo &TI = m_Tweens[0]->info;
if( TI.m_fTimeLeftInTween == TI.m_fTweenTime ) // we are just beginning this tween if( TI.m_fTimeLeftInTween == TI.m_fTweenTime ) // we are just beginning this tween
{ {
@@ -448,7 +449,8 @@ void Actor::UpdateTweening( float fDeltaTime )
m_current.sCommandName = ""; m_current.sCommandName = "";
// delete the head tween // delete the head tween
m_Tweens.pop_front(); delete m_Tweens.front();
m_Tweens.erase( m_Tweens.begin() );
} }
else // in the middle of tweening. Recalcute the current position. else // in the middle of tweening. Recalcute the current position.
{ {
@@ -563,16 +565,16 @@ void Actor::BeginTweening( float time, TweenType tt )
} }
// add a new TweenState to the tail, and initialize it // add a new TweenState to the tail, and initialize it
m_Tweens.resize( m_Tweens.size()+1 ); m_Tweens.push_back( new TweenStateAndInfo );
// latest // latest
TweenState &TS = m_Tweens.back().state; TweenState &TS = m_Tweens.back()->state;
TweenInfo &TI = m_Tweens.back().info; TweenInfo &TI = m_Tweens.back()->info;
if( m_Tweens.size() >= 2 ) // if there was already a TS on the stack if( m_Tweens.size() >= 2 ) // if there was already a TS on the stack
{ {
// initialize the new TS from the last TS in the list // initialize the new TS from the last TS in the list
TS = m_Tweens[m_Tweens.size()-2].state; TS = m_Tweens[m_Tweens.size()-2]->state;
// don't inherit the queued state's command // don't inherit the queued state's command
TS.sCommandName = ""; TS.sCommandName = "";
@@ -591,6 +593,8 @@ void Actor::BeginTweening( float time, TweenType tt )
void Actor::StopTweening() void Actor::StopTweening()
{ {
for( unsigned i = 0; i < m_Tweens.size(); ++i )
delete m_Tweens[i];
m_Tweens.clear(); m_Tweens.clear();
} }
@@ -604,8 +608,8 @@ void Actor::HurryTweening( float factor )
{ {
for( unsigned i = 0; i < m_Tweens.size(); ++i ) for( unsigned i = 0; i < m_Tweens.size(); ++i )
{ {
m_Tweens[i].info.m_fTimeLeftInTween *= factor; m_Tweens[i]->info.m_fTimeLeftInTween *= factor;
m_Tweens[i].info.m_fTweenTime *= factor; m_Tweens[i]->info.m_fTweenTime *= factor;
} }
} }
@@ -882,7 +886,7 @@ float Actor::GetTweenTimeLeft() const
tot += m_fHibernateSecondsLeft; tot += m_fHibernateSecondsLeft;
for( unsigned i=0; i<m_Tweens.size(); ++i ) for( unsigned i=0; i<m_Tweens.size(); ++i )
tot += m_Tweens[i].info.m_fTimeLeftInTween; tot += m_Tweens[i]->info.m_fTimeLeftInTween;
return tot; return tot;
} }
@@ -902,9 +906,9 @@ void Actor::SetGlobalDiffuseColor( RageColor c )
{ {
for( unsigned ts = 0; ts < m_Tweens.size(); ++ts ) for( unsigned ts = 0; ts < m_Tweens.size(); ++ts )
{ {
m_Tweens[ts].state.diffuse[i].r = c.r; m_Tweens[ts]->state.diffuse[i].r = c.r;
m_Tweens[ts].state.diffuse[i].g = c.g; m_Tweens[ts]->state.diffuse[i].g = c.g;
m_Tweens[ts].state.diffuse[i].b = c.b; m_Tweens[ts]->state.diffuse[i].b = c.b;
} }
m_current.diffuse[i].r = c.r; m_current.diffuse[i].r = c.r;
m_current.diffuse[i].g = c.g; m_current.diffuse[i].g = c.g;
@@ -918,7 +922,7 @@ void Actor::SetGlobalDiffuseColor( RageColor c )
void Actor::SetGlobalX( float x ) void Actor::SetGlobalX( float x )
{ {
for( unsigned ts = 0; ts < m_Tweens.size(); ++ts ) for( unsigned ts = 0; ts < m_Tweens.size(); ++ts )
m_Tweens[ts].state.pos.x = x; m_Tweens[ts]->state.pos.x = x;
m_current.pos.x = x; m_current.pos.x = x;
m_start.pos.x = x; m_start.pos.x = x;
} }
+2 -3
View File
@@ -6,7 +6,6 @@
#include "RageTypes.h" #include "RageTypes.h"
#include "RageUtil_AutoPtr.h" #include "RageUtil_AutoPtr.h"
#include "ActorCommands.h" #include "ActorCommands.h"
#include <deque>
#include <map> #include <map>
struct XNode; struct XNode;
struct lua_State; struct lua_State;
@@ -216,7 +215,7 @@ public:
else if( m_Tweens.empty() ) // not tweening else if( m_Tweens.empty() ) // not tweening
return m_current; return m_current;
else else
return m_Tweens.back().state; return m_Tweens.back()->state;
} }
@@ -394,7 +393,7 @@ protected:
TweenState state; TweenState state;
TweenInfo info; TweenInfo info;
}; };
deque<TweenStateAndInfo> m_Tweens; // use deque for contant time delete of the head vector<TweenStateAndInfo *> m_Tweens;
// //
// Temporary variables that are filled just before drawing // Temporary variables that are filled just before drawing