/*************************************************************************/
/*	File : CKKeyedAnimation.h						 					 */
/*	Author :  Romain Sididris											 */	
/*																		 */	
/*	Virtools SDK 															 */	 
/*	Copyright (c) Virtools 2000, All Rights Reserved.						 */	
/*************************************************************************/
#if !defined(CKKEYEDANIMATION_H) || defined(CK_3DIMPLEMENTATION)

#define CKKEYEDANIMATION_H "$Id:$"
#ifndef CK_3DIMPLEMENTATION

#include "CKAnimation.h"


#undef CK_PURE

#define CK_PURE = 0

/***********************************************************************
{filename:CKKeyedAnimation}
Name: CKKeyedAnimation
Summary: Group of object animations.
Remarks:
	+ A KeyedAnimation is a group of CKObjectAnimation. Each of this CKObjectAnimation applies 
	to a CKdEntity and contain keyframes (Time,Position,Orientation,Scale or Morph) that give the entity
	movement along time.

	+ The class id of CKKeyedAnimation is CKCID_KEYEDANIMATION.



See also: CKObjectAnimation,CKCharacter
***************************************************************************/
class CKKeyedAnimation : public CKAnimation {
public:
#endif

//------------------------------------------------------------
// Object Animations Elements

/*************************************************
Summary: Adds an Object Animation .  
Arguments: 
	anim:  A Pointer to CKObjectAnimation to add.
Return Value:
	CK_OK if successful, error code otherwise.
See also: CKObjectAnimation,CKCharacter
*************************************************/
virtual	CKERROR AddAnimation(CKObjectAnimation *anim) CK_PURE;

/*************************************************
Summary: Removes an Object Animation.  
Arguments: 
	anim:  A Pointer to the CKObjectAnimation to remove.
Return Value:
	CK_OK if successful, error code otherwise.
See also: AddAnimation,GetAnimationCount,GetAnimation
*************************************************/
virtual	CKERROR RemoveAnimation(CKObjectAnimation *anim) CK_PURE;

/*************************************************
Summary: Gets the number of Object Animations.
Return Value:
	Number of ObjectAnimations that are currently available.
See also: GetAnimation,AddAnimation
*************************************************/
virtual	int GetAnimationCount() CK_PURE;

/*************************************************
Summary: Retrieves an ObjectAnimation entry from its index or entity.
Arguments: 
	ent: A Pointer to 3d entity from which the ObjectAnimation is to be retrieve.
	index: Index of the ObjectAnimation to be obtained.
Return Value:
	A Pointer to the CKObjectAnimation or NULL if none could be found.
Remarks:
	+ Object Animation info contains keyframes data such as Time,Position,Orientation 
	and Scale.	
See also: GetAnimationCount,AddAnimation
*************************************************/
virtual	CKObjectAnimation* GetAnimation(CK3dEntity *ent) CK_PURE;
virtual	CKObjectAnimation* GetAnimation(int index) CK_PURE;

/*************************************************
Summary: Removes all ObjectAnimations.  
See also: RemoveAnimation
*************************************************/
virtual	void Clear() CK_PURE;

virtual	void UpdateRoot() CK_PURE;

// Dynamic Cast method (returns NULL if the object can't be casted)
static CKKeyedAnimation* Cast(CKObject* iO) 
{
	return CKIsChildClassOf(iO,CKCID_KEYEDANIMATION)?(CKKeyedAnimation*)iO:NULL;
}

#ifndef CK_3DIMPLEMENTATION
};

#endif
#endif

