#ifdef ASURA_USE_ANIMATION_IK_SOLVER

///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Animation_IK_Chain_Target.h
// Author : Will Plano
// Date   : 24/08/2007
//
// Copyright (C) 2007 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif

#ifndef __ASURA_ANIMATION_IK_CHAIN_TARGET_H__
#define __ASURA_ANIMATION_IK_CHAIN_TARGET_H__

#include "Animation/IK/Asura_Animation_IK_Chain.h"

////////////////////////////////////////////////////////////////////////////////
// Class  : Asura_Animation_IK_Chain_Target
// Author : Will Plano
// Date   : 24/08/2007
//
// Description  : Target implementation of IK chain
////////////////////////////////////////////////////////////////////////////////

class Asura_Animation_IK_Chain_Target : public Asura_Animation_IK_Chain
{
public:
	Asura_Animation_IK_Chain_Target( const u_int uNumBones = 0 )
		: Asura_Animation_IK_Chain( uNumBones ) {}
	Asura_Animation_IK_Chain_Target( const int* piBoneIDs, const int* piTwistBoneIDs = NULL )
		: Asura_Animation_IK_Chain( piBoneIDs, piTwistBoneIDs ) {}

	void SetTargetPosition( const Asura_AVector3& xTargetPosition ) { m_xTargetPosition = xTargetPosition; }
	void SetTargetPosition( const Asura_Vector_3& xTargetPosition ) { m_xTargetPosition = xTargetPosition; }
	void SetTargetOrientationDelta( const Asura_Quat& xTargetOrientationDelta ) { m_xTargetOrientationDelta = xTargetOrientationDelta; }

protected:
	virtual bool CalculateTarget() { return true; }

private:
	typedef Asura_Animation_IK_Chain PARENT;

}; // end class Asura_Animation_IK_Chain_Target

#endif   // ifndef __ASURA_ANIMATION_IK_CHAIN_TARGET_H__

#endif // ASURA_USE_ANIMATION_IK_SOLVER

/// End of file. ///
