This commit is contained in:
Charles 2001-04-25 19:52:35 +00:00
parent e91b911639
commit a96fa4bb92
4 changed files with 40 additions and 18 deletions

View File

@ -92,14 +92,14 @@ void CProjectile::init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TY
void CProjectile::shutdown() void CProjectile::shutdown()
{ {
if ( !m_isShuttingDown ) m_spriteBank->dump(); delete m_spriteBank;
{
m_isShuttingDown = true;
m_spriteBank->dump(); delete m_spriteBank; CEnemyProjectileThing::shutdown();
}
CEnemyProjectileThing::shutdown(); void CProjectile::setToShutdown()
} {
m_isShuttingDown = true;
} }
bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos ) bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos )
@ -242,7 +242,7 @@ void CProjectile::think(int _frames)
{ {
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) ) if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{ {
shutdown(); setToShutdown();
} }
else else
{ {
@ -302,7 +302,7 @@ void CProjectile::think(int _frames)
{ {
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) ) if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{ {
shutdown(); setToShutdown();
} }
else else
{ {
@ -320,7 +320,7 @@ void CProjectile::think(int _frames)
if ( m_lifetime <= 0 ) if ( m_lifetime <= 0 )
{ {
shutdown(); setToShutdown();
} }
} }
} }
@ -375,7 +375,7 @@ void CProjectile::collidedWith(CThing *_thisThing)
if ( m_lifetimeType != PROJECTILE_INFINITE_LIFE ) if ( m_lifetimeType != PROJECTILE_INFINITE_LIFE )
{ {
shutdown(); setToShutdown();
} }
break; break;
@ -437,14 +437,14 @@ void CPlayerProjectile::init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTIL
void CPlayerProjectile::shutdown() void CPlayerProjectile::shutdown()
{ {
if ( !m_isShuttingDown ) m_spriteBank->dump(); delete m_spriteBank;
{
m_isShuttingDown = true;
m_spriteBank->dump(); delete m_spriteBank; CPlayerProjectileThing::shutdown();
}
CPlayerProjectileThing::shutdown(); void CPlayerProjectile::setToShutdown()
} {
m_isShuttingDown = true;
} }
void CPlayerProjectile::setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType ) void CPlayerProjectile::setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType )
@ -485,7 +485,7 @@ void CPlayerProjectile::think(int _frames)
{ {
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) ) if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{ {
shutdown(); setToShutdown();
} }
else else
{ {
@ -503,7 +503,7 @@ void CPlayerProjectile::think(int _frames)
if ( m_lifetime <= 0 ) if ( m_lifetime <= 0 )
{ {
shutdown(); setToShutdown();
} }
} }
} }

View File

@ -48,6 +48,8 @@ public:
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType ); void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType );
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime ); void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
void shutdown(); void shutdown();
void setToShutdown();
u8 isSetToShutdown() {return( m_isShuttingDown );}
void think(int _frames); void think(int _frames);
virtual void render(); virtual void render();
void processEvent( GAME_EVENT evt, CThing *sourceThing ); void processEvent( GAME_EVENT evt, CThing *sourceThing );
@ -99,6 +101,8 @@ public:
void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType ); void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType );
void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime ); void init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTILE_MOVEMENT_TYPE initMoveType, PLAYER_PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
void shutdown(); void shutdown();
void setToShutdown();
u8 isSetToShutdown() {return( m_isShuttingDown );}
void think(int _frames); void think(int _frames);
virtual void render(); virtual void render();
void processEvent( GAME_EVENT evt, CThing *sourceThing ); void processEvent( GAME_EVENT evt, CThing *sourceThing );

View File

@ -254,6 +254,23 @@ void CThingManager::thinkAllThings(int _frames)
thing1 = thing1->m_nextThing; thing1 = thing1->m_nextThing;
} }
for(i=0;i<CThing::MAX_TYPE;i++)
{
thing=s_thingLists[i];
CThing *nextThing = thing;
while(thing)
{
nextThing=thing->m_nextThing;
if ( thing->isSetToShutdown() )
{
thing->shutdown();
delete thing;
}
thing = nextThing;
}
}
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------

View File

@ -101,6 +101,7 @@ public:
virtual void shutdown(); virtual void shutdown();
virtual void think(int _frames); virtual void think(int _frames);
virtual void render(); virtual void render();
virtual u8 isSetToShutdown() {return( false );}
// Linkage // Linkage
void addChild(CThing *Child); void addChild(CThing *Child);