This commit is contained in:
Charles 2001-04-12 14:55:55 +00:00
parent c08cf02803
commit 148b4416de
8 changed files with 62 additions and 21 deletions

View file

@ -230,30 +230,38 @@ void CProjectile::think(int _frames)
case PROJECTILE_USER_SEEK:
{
switch( m_state )
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{
case PROJECTILE_RETURN:
shutdown();
delete this;
}
else
{
switch( m_state )
{
if ( processTargetSeek( _frames, Parent->getPos() ) )
case PROJECTILE_RETURN:
{
Parent->processEvent( PROJECTILE_RETURNED_TO_SOURCE_EVENT, this );
if ( processTargetSeek( _frames, Parent->getPos() ) )
{
Parent->processEvent( PROJECTILE_RETURNED_TO_SOURCE_EVENT, this );
}
break;
}
break;
}
case PROJECTILE_ATTACK:
default:
{
CPlayer *player = GameScene.getPlayer();
DVECTOR playerPos = player->getPos();
if ( processTargetSeek( _frames, playerPos ) )
case PROJECTILE_ATTACK:
default:
{
m_state = PROJECTILE_RETURN;
}
CPlayer *player = GameScene.getPlayer();
DVECTOR playerPos = player->getPos();
break;
if ( processTargetSeek( _frames, playerPos ) )
{
m_state = PROJECTILE_RETURN;
}
break;
}
}
}
@ -283,8 +291,16 @@ void CProjectile::think(int _frames)
case PROJECTILE_DUMBFIRE:
default:
{
Pos.vx += ( _frames * 3 * rcos( m_heading ) ) >> 12;
Pos.vy += ( _frames * 3 * rsin( m_heading ) ) >> 12;
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{
shutdown();
delete this;
}
else
{
Pos.vx += ( _frames * 3 * rcos( m_heading ) ) >> 12;
Pos.vy += ( _frames * 3 * rsin( m_heading ) ) >> 12;
}
break;
}
@ -416,8 +432,16 @@ void CPlayerProjectile::think(int _frames)
case PLAYER_PROJECTILE_DUMBFIRE:
default:
{
Pos.vx += ( _frames * 3 * rcos( m_heading ) ) >> 12;
Pos.vy += ( _frames * 3 * rsin( m_heading ) ) >> 12;
if ( m_layerCollision->Get( Pos.vx >> 4, Pos.vy >> 4 ) )
{
shutdown();
delete this;
}
else
{
Pos.vx += ( _frames * 3 * rcos( m_heading ) ) >> 12;
Pos.vy += ( _frames * 3 * rsin( m_heading ) ) >> 12;
}
break;
}

View file

@ -56,6 +56,10 @@ public:
void setState( PROJECTILE_STATE newState );
void setLifeTime( PROJECTILE_LIFETIME_TYPE lifeType );
void setPosition( DVECTOR newPos );
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
private:
class CLayerCollision *m_layerCollision;
protected:
DVECTOR getScreenOffset();
@ -100,6 +104,10 @@ public:
PLAYER_PROJECTILE_MOVEMENT_TYPE getMovementType();
void setLifeTime( PLAYER_PROJECTILE_LIFETIME_TYPE lifeType );
void setPosition( DVECTOR newPos );
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
private:
class CLayerCollision *m_layerCollision;
protected:
DVECTOR getScreenOffset();