
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_Alien_Focus.h
// Author : Anthony Gregson
// Date   : 22/02/08
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __AVP_ALIEN_FOCUS_H__
#define __AVP_ALIEN_FOCUS_H__

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////
#include "Core/Asura_Maths.h"
#include "Actor/Vertebrates/AVP_Vertebrate_Focus.h"


////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

class Asura_Entity_Renderable;
class AVP_ClientActor_Alien;

////////////////////////////////////////////////////////////////////////////////
// Class declaration...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Focus
// Author       : Anthony Gregson
// Date         : 22/02/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Focus : public AVP_Vertebrate_Focus
{
public:
	// Public functions...
	AVP_Alien_Focus(AVP_ClientActor_Alien& xOwner);
	virtual ~AVP_Alien_Focus();

	// Virtual manipulation functions...
	virtual void Update();
	virtual void Render();

	// Accessor functions...
	virtual Asura_Guid GetMeleeTarget() const { return m_uMeleeTarget; }
	Asura_Guid GetVentTarget() const { return m_uVentTarget; }

	void UnsetTarget() { m_uVentTarget = m_uMeleeTarget = ASURA_GUID_UNREGISTERED; }

	virtual void PostCreateInitialise();

protected:
	// Protected functions...
	void UpdateTargets();

	// Protected variables...
	Asura_Guid m_uMeleeTarget;					// The enemy we'll do a melee attack to. This takes precedence over any jump locations.
	Asura_Guid m_uVentTarget;

	u_int m_uMeleeIndicatorPFXID;
	u_int m_uVentIndicatorPFXID;
private:
	// Private functions...
	bool TestEntityAgainstScreenArea(const Asura_Entity_Renderable& xEntity, const Asura_Vector_3& xCameraPosition, const Asura_Vector_2& xPreviousBestScreenPos, bool bIsVertebrate, Asura_Vector_2& xEntityScreenPos) const; // The final parameter is output only.

	// Private variables...
	float m_fMaxPounceDistance;

	// Private typedefs..
	typedef AVP_Vertebrate_Focus PARENT;
};   // End of class 'AVP_Alien_Focus'.


#endif   // ifndef __AVP_ALIEN_FOCUS_H__


/// End of file. ///
