/*=========================================================================

	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::processEnemyCollision( CThing *thisThing )
{
	// do nothing
}

void CNpcFlamingSkullEnemy::postInit()
{
	m_state = FLAMING_SKULL_ATTACK;
	m_fireHeading = m_heading;
}

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;

	CSoundMediator::playSfx( CSoundMediator::SFX_FLAMING_SKULL_ATTACK );

	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_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_speed );
		}
	}
}