
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_Vertebrate_JumpHandler.h
// Author : Andy Tate
// Date   : 26-Sep-2007
//
// Copyright (C) 2007 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_VERTEBRATE_JUMPHANDLER_H__
#define __AVP_VERTEBRATE_JUMPHANDLER_H__

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura_Maths.h"


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

class AVP_ClientActor_Vertebrate;


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

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Vertebrate_JumpHandler
// Author       : Andy Tate
// Date         : 26-Sep-2007
//
// Description  : Class to handle jumping for a particular actor.
////////////////////////////////////////////////////////////////////////////////

class AVP_Vertebrate_JumpHandler
{
public:
	// Public functions...
	AVP_Vertebrate_JumpHandler(AVP_ClientActor_Vertebrate& xOwner);
	virtual ~AVP_Vertebrate_JumpHandler()	{}

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

	virtual bool	HandleJump(const float fJumpValue);

	// Accessor functions...
	void	SetUpwardsSpeed(const float fSpeed)	{ m_fUpwardsSpeed = fSpeed; }


protected:
	// Protected variables...
	AVP_ClientActor_Vertebrate&	m_xOwner;
	u_int						m_uJumpType;

	// Protected functions...
	void	CalculateJumpVelocity(Asura_Vector_3& xJumpVelocity) const;


private:
	// Private variables...
	float	m_fUpwardsSpeed;	// The speed with which we jump vertically.

	// Private functions...
	AVP_Vertebrate_JumpHandler  (void);
	AVP_Vertebrate_JumpHandler  (const AVP_Vertebrate_JumpHandler& xOther);

	AVP_Vertebrate_JumpHandler&	operator=	(const AVP_Vertebrate_JumpHandler& xOther);

};   // End of class 'AVP_Vertebrate_JumpHandler'.


#endif   // ifndef __AVP_VERTEBRATE_JUMPHANDLER_H__


/// End of file. ///
