/*
  MODULE : COL (Intersection & Collision Library)
  AUTHOR : Frederic PHILIPPE
           UBI R&D
  FILE : CollGO.h (Geometric object collision)
*/
 
#ifndef COL_COLLGO_H
#define COL_COLLGO_H
 
#ifdef __cplusplus
    extern "C" {
#endif
 
#include "cpa_expt.h"
 
/* For Global declaration in C files : */
#ifdef COL_GLOBALS
 #define COL_EXTERN extern
#else /* !COL_GLOBALS */
 #define COL_EXTERN
#endif /* !COL_GLOBALS */
 
/*
-----------------------------------------------------------------------------
INCLUDES FILES
-----------------------------------------------------------------------------
*/
 
#include "Futil.h"
#include "Box.h"
#include "Inters.h"
#include "IntersGO.h"
#include "OctreeGO.h"
#include "CollGOCo.h"
#include "CsEltPts.h"
#include "CsEltEdg.h"
#include "CsSphElt.h"
#include "CsBoxElt.h"
 
/*
-----------------------------------------------------------------------------
FUNCTIONS DECLARATION
-----------------------------------------------------------------------------
*/
 
extern CPA_EXPORT ACP_tdxBool COL_fn_bDetectCollisionStaticGeomObjWithStaticGeomObj (GEO_tdxHandleToBoundingSphere _hDynamicGeometricObject,
                                                                     POS_tdstCompletePosition *_p_stDynamicGeometricObjectMatrix,
                                                                     void * _hStaticGeometricObject,
                                                                     POS_tdstCompletePosition *_p_stStaticGeometricObjectMatrix,
                                                                     ACP_tdxBool _bStaticGeomObjHasNoTransformationMatrix,
                                                                     ACP_tdxBool _bDynamicGeomObjHasZoomInsteadOfScale,
																	 ACP_tdxBool _bStaticGeomObjHasABoxBoundingVolume);
 
extern CPA_EXPORT void COL_fn_vInitCollideStaticGeomObjWithStaticGeomObj ( COL_tdstGVForCollision *p_stGV );
 
extern CPA_EXPORT void COL_fn_vComputeCollisionStaticGeomObjWithStaticGeomObj ( COL_tdstGVForCollision *p_stGV );
 
extern CPA_EXPORT void COL_fn_vCollideStaticGeomObj1WithStaticGeomObj2 ( ACP_tdxHandleOfObject _hGeometricObject1,
                                                              POS_tdstCompletePosition *_p_stGeometricObjectStartMatrix1,
                                                              POS_tdstCompletePosition *_p_stGeometricObjectEndMatrix1,
                                                              ACP_tdxHandleOfObject _hGeometricObject2,
                                                              POS_tdstCompletePosition *_p_stGeometricObjectMatrix2,
                                                              void * _p_vParameter1 ,
                                                              short  _sParameter2 ,
                                                              ACP_tdxBool _bStaticGeomObjHasNoTransformationMatrix,
                                                              ACP_tdxBool _bDynamicGeomObjHasZoomInsteadOfScale);
 
/* This function finds the triangles of the geometric object containing the given point (on an edge),*/
/* fill an array with the normals of these triangles (two triangles maximum)*/
/* and return the number of triangles found*/
extern CPA_EXPORT long COL_fn_lFindNormalFromGeometricObject (GEO_tdstGeometricObject * _p_stGeometricObject ,
                                                              MTH3D_tdstVector * _p_stPoint ,
                                                              MTH3D_tdstVector * _p_a2_stNormal);
 
#ifdef __cplusplus
    };
#endif
 
#endif /* COL_COLLGO_H */
