mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-28 15:55:39 +00:00
Merge pull request #529 from DavidWyand-GG/Updates
ITickable supports object deletion
This commit is contained in:
commit
ea2592a83d
1 changed files with 32 additions and 6 deletions
|
|
@ -86,15 +86,34 @@ bool ITickable::advanceTime( U32 timeDelta )
|
||||||
|
|
||||||
// Advance objects
|
// Advance objects
|
||||||
if( tickCount )
|
if( tickCount )
|
||||||
|
{
|
||||||
for( ; smLastTick != targetTick; smLastTick += smTickMs )
|
for( ; smLastTick != targetTick; smLastTick += smTickMs )
|
||||||
for( ProcessListIterator i = getProcessList().begin(); i != getProcessList().end(); i++ )
|
{
|
||||||
if( (*i)->isProcessingTicks() )
|
for( U32 i=0; i < getProcessList().size(); )
|
||||||
(*i)->processTick();
|
{
|
||||||
|
ITickable* iTick = getProcessList()[i];
|
||||||
|
if( iTick->isProcessingTicks() )
|
||||||
|
{
|
||||||
|
iTick->processTick();
|
||||||
|
|
||||||
|
// Only advance counter if the tickable hasn't deleted itself
|
||||||
|
if( i < getProcessList().size() && iTick == getProcessList()[i] )
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Move onto the next tickable
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
smLastDelta = ( smTickMs - ( targetTime & smTickMask ) ) & smTickMask;
|
smLastDelta = ( smTickMs - ( targetTime & smTickMask ) ) & smTickMask;
|
||||||
F32 dt = smLastDelta / F32( smTickMs );
|
F32 dt = smLastDelta / F32( smTickMs );
|
||||||
|
|
||||||
// Now interpolate objects that want ticks
|
// Now interpolate objects that want ticks. Note that an object should never delete
|
||||||
|
// itself during an interpolateTick().
|
||||||
for( ProcessListIterator i = getProcessList().begin(); i != getProcessList().end(); i++ )
|
for( ProcessListIterator i = getProcessList().begin(); i != getProcessList().end(); i++ )
|
||||||
if( (*i)->isProcessingTicks() )
|
if( (*i)->isProcessingTicks() )
|
||||||
(*i)->interpolateTick( dt );
|
(*i)->interpolateTick( dt );
|
||||||
|
|
@ -102,8 +121,15 @@ bool ITickable::advanceTime( U32 timeDelta )
|
||||||
|
|
||||||
// Inform ALL objects that time was advanced
|
// Inform ALL objects that time was advanced
|
||||||
dt = F32( timeDelta ) / 1000.f;
|
dt = F32( timeDelta ) / 1000.f;
|
||||||
for( ProcessListIterator i = getProcessList().begin(); i != getProcessList().end(); i++ )
|
for( U32 i=0; i < getProcessList().size(); )
|
||||||
(*i)->advanceTime( dt );
|
{
|
||||||
|
ITickable* iTick = getProcessList()[i];
|
||||||
|
iTick->advanceTime( dt );
|
||||||
|
|
||||||
|
// Only advance counter if the tickable hasn't deleted itself
|
||||||
|
if( i < getProcessList().size() && iTick == getProcessList()[i] )
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
smLastTime = targetTime;
|
smLastTime = targetTime;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue