reman3/Rayman_X/cpa/public/COL/Futil.h

203 lines
6.1 KiB
C

/*
MODULE : COL (Intersection & Collision Library)
AUTHOR : Frederic PHILIPPE
UBI R&D
FILE : Futil.h (Util macro definition)
*/
#ifndef COL_FUTIL_H
#define COL_FUTIL_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#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 */
/*
-----------------------------------------------------------------------------
FUNCTIONS DECLARATION:
-----------------------------------------------------------------------------
*/
/*
--------------------------------------------------------------------------------
-- Description : Return true if two values (NOZ) have the same sign
--------------------------------------------------------------------------------
-- Creation date : 12 feb 1997 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_bSameSign( A, B ) ( MTH_M_bGreaterEqualZero ( A ) == MTH_M_bGreaterEqualZero ( B ) )
/*
--------------------------------------------------------------------------------
-- Description : Return the max value of three values
--------------------------------------------------------------------------------
-- Creation date : 22 aug 1996 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_xMaxValue3( A, B, C ) (\
( ( (A) > (B) ) && ( (A) > (C) ) ) ?\
(A) :\
( ( (B) > (C) ) ? (B) : (C) )\
)
#define FUT_M_vMaxValue3( V, A, B, C )\
{\
if ( (A) > (B) )\
{\
if ( (A) > (C) )\
{\
(V) = (A);\
}\
else\
{\
(V) = (C);\
}\
}\
else\
{\
if ( (B) > (C) )\
{\
(V) = (B);\
}\
else\
{\
(V) = (C);\
}\
}\
}
/*
--------------------------------------------------------------------------------
-- Description : Return the min value of three values
--------------------------------------------------------------------------------
-- Creation date : 22 aug 1996 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_xMinValue3( A, B, C ) (\
( ( (A) < (B) ) && ( (A) < (C) ) ) ?\
(A) :\
( ( (B) < (C) ) ? (B) : (C) )\
)
#define FUT_M_vMinValue3( V, A, B, C )\
{\
if ( (A) < (B) )\
{\
if ( (A) < (C) )\
{\
(V) = (A);\
}\
else\
{\
(V) = (C);\
}\
}\
else\
{\
if ( (B) < (C) )\
{\
(V) = (B);\
}\
else\
{\
(V) = (C);\
}\
}\
}
/*
--------------------------------------------------------------------------------
-- Description : Return the delta of a trinome
--------------------------------------------------------------------------------
-- Creation date : 06 feb 1997 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_xTrinomeDelta( A, B, C ) ( MTH_M_xSub ( MTH_M_xSqr ( B ),\
MTH_M_xMul ( MTH_C_4,\
MTH_M_xMul ( A, C )\
)\
)\
)
/*
--------------------------------------------------------------------------------
-- Description : Return the interval inclusion for 2 two values
--------------------------------------------------------------------------------
-- Creation date : 22 aug 1996 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_bInRangeE2( A, B, C, D, E, F ) ( ( (A) <= (B) ) &&\
( (B) <= (C) ) &&\
( (D) <= (E) ) &&\
( (E) <= (F) )\
)
/*
--------------------------------------------------------------------------------
-- Description : Add a scalar to a vector
--------------------------------------------------------------------------------
-- Creation date : 22 jan 1997 Author : FPI
--------------------------------------------------------------------------------
*/
/* MTH3D_M_vAddVector(VectDest, VectA, S) : VectDest = VectA + S */
#define FUT_M_vAddScaleVector( VectDest, VectA, S )\
{\
(VectDest)->xX = MTH_M_xAdd ( (VectA)->xX, (S) );\
(VectDest)->xY = MTH_M_xAdd ( (VectA)->xY, (S) );\
(VectDest)->xZ = MTH_M_xAdd ( (VectA)->xZ, (S) );\
}
/*
--------------------------------------------------------------------------------
-- Description : Sub a scalar to a vector
--------------------------------------------------------------------------------
-- Creation date : 22 jan 1997 Author : FPI
--------------------------------------------------------------------------------
*/
/* MTH3D_M_vSubVector(VectDest, VectA, S) : VectDest = VectA - S */
#define FUT_M_vSubScaleVector( VectDest, VectA, S )\
{\
(VectDest)->xX = MTH_M_xSub ( (VectA)->xX, (S) );\
(VectDest)->xY = MTH_M_xSub ( (VectA)->xY, (S) );\
(VectDest)->xZ = MTH_M_xSub ( (VectA)->xZ, (S) );\
}
/*
--------------------------------------------------------------------------------
-- Description : Swap two vector 3D pointers
--------------------------------------------------------------------------------
-- Creation date : 22 aug 1996 Author : FPI
--------------------------------------------------------------------------------
*/
#define FUT_M_vSwapVector3DPointer( A, B )\
{\
MTH3D_tdstVector *p_stT;\
\
p_stT = *A;\
*A = *B;\
*B = p_stT;\
}
#ifdef __cplusplus
};
#endif /* __cplusplus */
#endif /* COL_FUTIL_H */