SBSPSS/source/enemy/nfskull.cpp
Charles cb014a96f2
2001-04-20 14:48:15 +00:00

103 lines
1.8 KiB
C++

/*=========================================================================
nfskull.cpp
Author: CRB
Created:
Project: Spongebob
Purpose:
Copyright (c) 2000 Climax Development Ltd
===========================================================================*/
#ifndef __ENEMY_NPC_H__
#include "enemy\npc.h"
#endif
#ifndef __ENEMY_NFSKULL_H__
#include "enemy\nfskull.h"
#endif
#ifndef __PLAYER_PLAYER_H__
#include "player\player.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
void CNpcFlamingSkullEnemy::postInit()
{
m_state = FLAMING_SKULL_ATTACK;
}
bool CNpcFlamingSkullEnemy::processSensor()
{
switch( m_sensorFunc )
{
case NPC_SENSOR_NONE:
return( false );
default:
{
if ( playerXDistSqr + playerYDistSqr < 40000 )
{
m_controlFunc = NPC_CONTROL_CLOSE;
return( true );
}
else
{
return( false );
}
}
}
}
void CNpcFlamingSkullEnemy::processClose( int _frames )
{
s32 distX, distY;
s32 distXSqr, distYSqr;
if ( m_state == FLAMING_SKULL_ATTACK )
{
processGenericGetUserDist( _frames, &distX, &distY );
distXSqr = distX * distX;
distYSqr = distY * distY;
if ( distXSqr + distYSqr < 400 )
{
m_state = FLAMING_SKULL_RETURN;
}
else
{
processGenericGotoTarget( _frames, distX, distY, m_data[m_type].speed );
}
}
else
{
distX = m_base.vx - Pos.vx;
distY = m_base.vy - Pos.vy;
distXSqr = distX * distX;
distYSqr = distY * distY;
if ( distXSqr + distYSqr < 100 )
{
m_state = FLAMING_SKULL_ATTACK;
m_heading = m_fireHeading;
m_controlFunc = NPC_CONTROL_MOVEMENT;
m_timerFunc = NPC_TIMER_ATTACK_DONE;
m_timerTimer = GameState::getOneSecondInFrames();
m_sensorFunc = NPC_SENSOR_NONE;
}
else
{
processGenericGotoTarget( _frames, distX, distY, m_data[m_type].speed );
}
}
}