This commit is contained in:
Charles 2001-04-25 15:41:29 +00:00
parent 99331b14f9
commit 9fe426e4fd
5 changed files with 50 additions and 36 deletions

View File

@ -732,6 +732,8 @@ void CNpcEnemy::init()
setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) ); setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) );
m_positionHistory = NULL; m_positionHistory = NULL;
m_isShuttingDown = false;
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -777,33 +779,38 @@ void CNpcEnemy::reinit()
void CNpcEnemy::shutdown() void CNpcEnemy::shutdown()
{ {
if (m_spriteBank) m_spriteBank->dump(); delete m_spriteBank; if ( !m_isShuttingDown )
// remove waypoints
m_npcPath.removeAllWaypoints();
// remove position history
CNpcPositionHistory *currentPosition;
CNpcPositionHistory *oldPosition;
currentPosition = m_positionHistory;
while( currentPosition )
{ {
oldPosition = currentPosition; m_isShuttingDown = true;
currentPosition = currentPosition->next;
delete oldPosition; if (m_spriteBank) m_spriteBank->dump(); delete m_spriteBank;
// remove waypoints
m_npcPath.removeAllWaypoints();
// remove position history
CNpcPositionHistory *currentPosition;
CNpcPositionHistory *oldPosition;
currentPosition = m_positionHistory;
while( currentPosition )
{
oldPosition = currentPosition;
currentPosition = currentPosition->next;
delete oldPosition;
}
m_positionHistory = NULL;
if (m_actorGfx) delete m_actorGfx;
deleteAllChild();
CEnemyThing::shutdown();
} }
m_positionHistory = NULL;
if (m_actorGfx) delete m_actorGfx;
deleteAllChild();
CEnemyThing::shutdown();
} }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -355,6 +355,8 @@ protected:
virtual void collidedWith(CThing *_thisThing); virtual void collidedWith(CThing *_thisThing);
u8 m_isShuttingDown;
// position history stuff // position history stuff
class CNpcPositionHistory class CNpcPositionHistory

View File

@ -64,6 +64,7 @@ void CProjectile::init()
m_state = PROJECTILE_ATTACK; m_state = PROJECTILE_ATTACK;
m_turnSpeed = 256; m_turnSpeed = 256;
m_extension = 0; m_extension = 0;
m_isShuttingDown = false;
} }
void CProjectile::init( DVECTOR initPos, s16 initHeading ) void CProjectile::init( DVECTOR initPos, s16 initHeading )
@ -91,9 +92,14 @@ void CProjectile::init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TY
void CProjectile::shutdown() void CProjectile::shutdown()
{ {
m_spriteBank->dump(); delete m_spriteBank; if ( !m_isShuttingDown )
{
m_isShuttingDown = true;
CEnemyProjectileThing::shutdown(); m_spriteBank->dump(); delete m_spriteBank;
CEnemyProjectileThing::shutdown();
}
} }
bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos ) bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos )
@ -237,7 +243,6 @@ 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(); shutdown();
delete this;
} }
else else
{ {
@ -298,7 +303,6 @@ 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(); shutdown();
delete this;
} }
else else
{ {
@ -317,7 +321,6 @@ void CProjectile::think(int _frames)
if ( m_lifetime <= 0 ) if ( m_lifetime <= 0 )
{ {
shutdown(); shutdown();
delete this;
} }
} }
} }
@ -373,7 +376,6 @@ void CProjectile::collidedWith(CThing *_thisThing)
if ( m_lifetimeType != PROJECTILE_INFINITE_LIFE ) if ( m_lifetimeType != PROJECTILE_INFINITE_LIFE )
{ {
shutdown(); shutdown();
delete this;
} }
break; break;
@ -434,9 +436,14 @@ void CPlayerProjectile::init( DVECTOR initPos, s16 initHeading, PLAYER_PROJECTIL
void CPlayerProjectile::shutdown() void CPlayerProjectile::shutdown()
{ {
m_spriteBank->dump(); delete m_spriteBank; if ( !m_isShuttingDown )
{
m_isShuttingDown = true;
CPlayerProjectileThing::shutdown(); m_spriteBank->dump(); delete m_spriteBank;
CPlayerProjectileThing::shutdown();
}
} }
void CPlayerProjectile::setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType ) void CPlayerProjectile::setMovementType( PLAYER_PROJECTILE_MOVEMENT_TYPE moveType )
@ -478,7 +485,6 @@ 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(); shutdown();
delete this;
} }
else else
{ {
@ -497,7 +503,6 @@ void CPlayerProjectile::think(int _frames)
if ( m_lifetime <= 0 ) if ( m_lifetime <= 0 )
{ {
shutdown(); shutdown();
delete this;
} }
} }
} }

View File

@ -75,6 +75,7 @@ protected:
PROJECTILE_LIFETIME_TYPE m_lifetimeType; PROJECTILE_LIFETIME_TYPE m_lifetimeType;
PROJECTILE_STATE m_state; PROJECTILE_STATE m_state;
u16 m_turnSpeed; u16 m_turnSpeed;
u8 m_isShuttingDown;
}; };
/*****************************************************************************/ /*****************************************************************************/
@ -125,6 +126,7 @@ protected:
int m_frame; int m_frame;
POLY_FT4 *SprFrame; POLY_FT4 *SprFrame;
u8 m_reversed; u8 m_reversed;
u8 m_isShuttingDown;
}; };

View File

@ -360,13 +360,11 @@ void CThingManager::addToThingList(CThing *_this)
Params: Params:
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int testTypeGit;
void CThingManager::removeFromThingList(CThing *_this) void CThingManager::removeFromThingList(CThing *_this)
{ {
CThing *prevThing,*thing; CThing *prevThing,*thing;
prevThing=NULL; prevThing=NULL;
testTypeGit = _this->getThingType();
thing=s_thingLists[_this->getThingType()]; thing=s_thingLists[_this->getThingType()];
while(thing!=_this) while(thing!=_this)
{ {