/*=========================================================================
* Model.h :       Define the engine object model structure.
* This is a part of the Game project.
*
* Version                      1.0
* Creation date        09/08/96
* Revision date
*
* That file needs to be compatible for all platforms.
*
* (c) Ubi Studios 1996
*=======================================================================*/
 
#if !defined(__Family_H__)
#define __Family_H__
 
#ifdef  __cplusplus
extern "C" {
#endif
 
 
#include "GAM/Header.h"
 
/*
 * this structure is for all objects of the same type.
 * it is to be stored in an array indexed by type values.
 */
typedef struct tdstFamilyList_
{
 LST2_M_DynamicElementDeclaration(tdxHandleToFamilyList)
 
 tdObjectType otObjectFamilyType; /**** -1 (C_InvalidObjectType) is a invalid type ****/
 
/**** Number of states ****/
 /*unsigned short wNumberOfStates;*/
 /**** Dynamic array of states ****/
 LST2_M_StaticAnchorDeclaration(tdxHandleToState) hForStateArray;
 
 /**** Number Of Objects Tables for this Family*/
 /*unsigned short wNumberOfObjectsTables;*/
 tdxHandleToObjectsTablesList h_DefaultObjectsTable;
 /**** Dynamic array For All Objects Tables for this Family*/
 LST2_M_StaticAnchorDeclaration(tdxHandleToObjectsTablesList) hForObjectsTablesList;
 
 /* Jourdan 23/01/97*/
 /*unsigned short wNumberOfCollSet;*/
 /*struct tdstPhysicalCollSet_ * d_stCollSet;*/
 /* Jourdan fin*/
 
/*ANNECY TQ 02/06/98{*/
 GEO_tdxHandleToBoundingSphere	hBoundingSphere;
#if defined(ACTIVE_EDITOR)
 ACP_tdxHandleOfObject			hGeometricSphere;
#endif /*ACTIVE_EDITOR*/
/*ENDANNECY TQ}*/
 
 
 /* AR971211*/
/* char* p_cPositionsBloc; // pointer to the bloc of animation positions (used by a3c)*/
 unsigned long ulNumberOfChannels;
 
 unsigned char ucPriority;

// Shaitan => module list in the level
 unsigned char ucOptimized;
// End Shaitan => module list in the level

} tdstFamily;
 
extern CPA_EXPORT void fn_vLastDesinitFamilyStructure();
extern CPA_EXPORT void fn_vDesinitFamilyStructureForPriority(unsigned char ucPriority);
extern CPA_EXPORT tdxHandleToFamilyList fn_hFindOrAddFAmily(tdObjectType otFamilyType);
extern CPA_EXPORT tdxHandleToFamilyList fn_hFindFamily(tdObjectType otFamilyType);
 
/* CGHT 28/05/97*/
extern CPA_EXPORT GEO_tdxHandleToBoundingSphere fn_vGetBoundingVolumeOfFamily(tdxHandleToFamilyList h_Family);
extern CPA_EXPORT void fn_vSetBoundingVolumeOfFamily(tdxHandleToFamilyList h_Family,GEO_tdxHandleToBoundingSphere hBV);
#if defined (ACTIVE_EDITOR)
extern CPA_EXPORT ACP_tdxHandleOfObject fn_vGetGeometricSphereOfFamily(tdxHandleToFamilyList h_Family);
extern CPA_EXPORT void fn_vSetGeometricSphereOfFamily(tdxHandleToFamilyList h_Family,ACP_tdxHandleOfObject hBV);
#endif /*ACTIVE_EDITOR*/
 
/* debut GIZMO NEW 07/06/97*/
extern CPA_EXPORT tdxHandleToObjectsTablesList  fn_vGetDefaultObjectsTableOfFamily(tdxHandleToFamilyList h_Family);
extern CPA_EXPORT void fn_vSetDefaultObjectsTableOfFamily(tdxHandleToFamilyList h_Family,tdxHandleToObjectsTablesList h_DefaultObjectsTable);
/* fin GIZMO NEW 07/06/97*/
 
/*ANNECY BBB {*/
extern CPA_EXPORT tdxHandleToObjectsTablesList fn_hGetObjectsTableOfFamilyByIndex(tdxHandleToFamilyList _hFamily, ACP_tdxIndex _xIndex);
/*ANNECY BBB }*/
 
#ifdef _TMP_FAMILY_HANDLE_
/* ############# FOR EDITORS ONLY ############### */
extern CPA_EXPORT tdxHandleToState AddNewStateToStateArrayOfFamily(tdxHandleToFamily,tdxHandleToAnim3d);
extern CPA_EXPORT void RemoveStateInStateArrayOfFamily(tdxHandleToState);
#endif
 
#ifdef  __cplusplus
}/* extern "C" */
#endif
 
 
#endif /* __Family_H__ */
 
