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()
{
StopTweening();
UnsubcribeAndClearCommands();
}
@@ -418,8 +419,8 @@ void Actor::UpdateTweening( float fDeltaTime )
// update current tween state
// earliest tween
TweenState &TS = m_Tweens[0].state;
TweenInfo &TI = m_Tweens[0].info;
TweenState &TS = m_Tweens[0]->state;
TweenInfo &TI = m_Tweens[0]->info;
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 = "";
// 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.
{
@@ -563,16 +565,16 @@ void Actor::BeginTweening( float time, TweenType tt )
}
// add a new TweenState to the tail, and initialize it
m_Tweens.resize( m_Tweens.size()+1 );
m_Tweens.push_back( new TweenStateAndInfo );
// latest
TweenState &TS = m_Tweens.back().state;
TweenInfo &TI = m_Tweens.back().info;
TweenState &TS = m_Tweens.back()->state;
TweenInfo &TI = m_Tweens.back()->info;
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
TS = m_Tweens[m_Tweens.size()-2].state;
TS = m_Tweens[m_Tweens.size()-2]->state;
// don't inherit the queued state's command
TS.sCommandName = "";
@@ -591,6 +593,8 @@ void Actor::BeginTweening( float time, TweenType tt )
void Actor::StopTweening()
{
for( unsigned i = 0; i < m_Tweens.size(); ++i )
delete m_Tweens[i];
m_Tweens.clear();
}
@@ -604,8 +608,8 @@ void Actor::HurryTweening( float factor )
{
for( unsigned i = 0; i < m_Tweens.size(); ++i )
{
m_Tweens[i].info.m_fTimeLeftInTween *= factor;
m_Tweens[i].info.m_fTweenTime *= factor;
m_Tweens[i]->info.m_fTimeLeftInTween *= factor;
m_Tweens[i]->info.m_fTweenTime *= factor;
}
}
@@ -882,7 +886,7 @@ float Actor::GetTweenTimeLeft() const
tot += m_fHibernateSecondsLeft;
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;
}
@@ -902,9 +906,9 @@ void Actor::SetGlobalDiffuseColor( RageColor c )
{
for( unsigned ts = 0; ts < m_Tweens.size(); ++ts )
{
m_Tweens[ts].state.diffuse[i].r = c.r;
m_Tweens[ts].state.diffuse[i].g = c.g;
m_Tweens[ts].state.diffuse[i].b = c.b;
m_Tweens[ts]->state.diffuse[i].r = c.r;
m_Tweens[ts]->state.diffuse[i].g = c.g;
m_Tweens[ts]->state.diffuse[i].b = c.b;
}
m_current.diffuse[i].r = c.r;
m_current.diffuse[i].g = c.g;
@@ -918,7 +922,7 @@ void Actor::SetGlobalDiffuseColor( RageColor c )
void Actor::SetGlobalX( float x )
{
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_start.pos.x = x;
}
+2 -3
View File
@@ -6,7 +6,6 @@
#include "RageTypes.h"
#include "RageUtil_AutoPtr.h"
#include "ActorCommands.h"
#include <deque>
#include <map>
struct XNode;
struct lua_State;
@@ -216,7 +215,7 @@ public:
else if( m_Tweens.empty() ) // not tweening
return m_current;
else
return m_Tweens.back().state;
return m_Tweens.back()->state;
}
@@ -394,7 +393,7 @@ protected:
TweenState state;
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