/*************************************************************************/
/*	File : CKSceneObject.h												 */
/*	Author :  Aymeric BARD												 */	
/*																		 */	
/*	Virtools SDK 															 */	 
/*	Copyright (c) Virtools 2000, All Rights Reserved.						 */	
/*************************************************************************/
#ifndef CKSCENEOBJECT_H

#define CKSCENEOBJECT_H "$Id:$"

#include "CKObject.h"
#include "XBitArray.h"

/*************************************************
{filename:CKSceneObject}
Summary: Base class for objects which can be referenced in a scene

Remarks:
	+ CKSceneObject is the base class for all objects that can be referenced in a scene.

	+ It defines methods to see if an object is present and/or active in a specific scene
	and methods to know in which scenes the object is referenced.

	+ The class id of CKSceneObject is CKCID_SCENEOBJECT.



See also: CKBeObject, CKScene
*************************************************/
class CKSceneObject : public CKObject {

public :
//----------------------------------------------------------
// Scene Activity
	CKBOOL  IsActiveInScene(CKScene *);
	CKBOOL  IsActiveInCurrentScene();
 
//----------------------------------------------------------
// Scene Presence
	CKBOOL	IsInScene(CKScene *scene);
	int		GetSceneInCount();
	CKScene* GetSceneIn(int index);

//-------------------------------------------------------------------
#ifdef DOCJETDUMMY // Docjet secret macro
#else

	CKSceneObject() {}													
	CKSceneObject(CKContext *Context,CKSTRING name=NULL);				
	virtual	~CKSceneObject();											
	virtual CK_CLASSID GetClassID();									

	virtual int		GetMemoryOccupation();								

	//--------------------------------------------
	// Class Registering 
	static CKSTRING GetClassName();								
	static int		GetDependenciesCount(int mode);				
	static CKSTRING GetDependencies(int i,int mode);			
	static void		Register();									
	static CKSceneObject* CreateInstance(CKContext *Context);	
	static void		 ReleaseInstance(CKContext* iContext,CKSceneObject*);							
	static	CK_ID	m_ClassID;									

	// Dynamic Cast method (returns NULL if the object can't be casted)
	static CKSceneObject* Cast(CKObject* iO) 
	{
		return CKIsChildClassOf(iO,CKCID_SCENEOBJECT)?(CKSceneObject*)iO:NULL;
	}

	//----------------------------------------------
	// Do Not use this functions to add an object to a scene
	// Use CKScene::AddObjectToScene Method instead 
	virtual void AddToScene		(CKScene *scene,CKBOOL dependencies = TRUE);
	virtual void RemoveFromScene(CKScene *scene,CKBOOL dependencies = TRUE);
	void		AddSceneIn(CKScene *scene);										
	void		RemoveSceneIn(CKScene *scene);										
	void		RemoveFromAllScenes();										

protected:
	XBitArray	m_Scenes;

#endif // docjet secret macro
};


#endif

