reman3/Rayman_X/cpa/public/MEC/DNMRepor.h

160 lines
7.8 KiB
C

#ifndef __DNMREPOR_H__
#define __DNMREPOR_H__
#include "DNMDynSt.h"
#include "DNMMth.h"
#include "DNMObsta.h"
#ifdef __cplusplus
extern "C" {
#endif
#define DNM_C_ReportCollision 0x00000001
#define DNM_C_ReportWall 0x00000002 /* Set when object collides with a wall */
#define DNM_C_ReportChar 0x00000004 /* Set when contact with an other character */
/* Define the structure DNM_tdstReport */
typedef struct DNM_stReport
{
/* Surface report */
unsigned long m_ulPrevSurfaceState;
unsigned long m_ulCurrSurfaceState;
/* Obstacle report */
DNM_tdstObstacle m_stObstacle;
DNM_tdstObstacle m_stGround;
DNM_tdstObstacle m_stWall;
DNM_tdstObstacle m_stCharacter;
DNM_tdstObstacle m_stWater;
DNM_tdstObstacle m_stCeil;
/* Kinetic report (only for camera) */
MTH_tdstMove m_stAbsolutePrevSpeed;
MTH_tdstMove m_stAbsoluteCurrSpeed;
MTH_tdstMove m_stAbsolutePrevPosition;
MTH_tdstMove m_stAbsoluteCurrPosition;
/* For Camera */ /* <-- only for camera, why ? */
char m_cBitField;
} DNM_tdstReport;
/* Define the structure DNM_tdstReport */
typedef struct DNM_stMecReport
{
/* Surface report */
unsigned long m_ulCurrSurfaceState;
/* Obstacle report */
DNM_tdstMecObstacle m_stObstacle;
DNM_tdstMecObstacle m_stGround;
DNM_tdstMecObstacle m_stWall;
DNM_tdstMecObstacle m_stCharacter;
DNM_tdstMecObstacle m_stWater;
DNM_tdstMecObstacle m_stCeil;
} DNM_tdstMecReport;
/* Methods */
/* Accessors */
#define DNM_M_ulReportGetSurfaceState(_p_stReport) ((_p_stReport)->m_ulCurrSurfaceState)
#define DNM_M_ulReportGetPrevSurfaceState(_p_stReport) ((_p_stReport)->m_ulPrevSurfaceState)
#define DNM_M_p_stReportGetAbsolutePrevSpeed(_p_stReport) (&(_p_stReport)->m_stAbsolutePrevSpeed)
#define DNM_M_p_stReportGetAbsoluteCurrSpeed(_p_stReport) (&(_p_stReport)->m_stAbsoluteCurrSpeed)
#define DNM_M_p_stReportGetAbsolutePrevPosition(_p_stReport) (&(_p_stReport)->m_stAbsolutePrevPosition)
#define DNM_M_p_stReportGetAbsoluteCurrPosition(_p_stReport) (&(_p_stReport)->m_stAbsoluteCurrPosition)
#define DNM_M_p_stReportGetObstacle(_p_stReport) (&(_p_stReport)->m_stObstacle)
#define DNM_M_p_stReportGetGround(_p_stReport) (&(_p_stReport)->m_stGround)
#define DNM_M_p_stReportGetWall(_p_stReport) (&(_p_stReport)->m_stWall)
#define DNM_M_p_stReportGetCharacter(_p_stReport) (&(_p_stReport)->m_stCharacter)
#define DNM_M_p_stReportGetWater(_p_stReport) (&(_p_stReport)->m_stWater)
#define DNM_M_p_stReportGetCeil(_p_stReport) (&(_p_stReport)->m_stCeil)
#define DNM_M_ulReportSetSurfaceState(_p_stReport,_ulValue) (DNM_M_ulReportGetSurfaceState(_p_stReport) = _ulValue)
#define DNM_M_ulReportAddSurfaceState(_p_stReport,_ulValue) (DNM_M_ulReportGetSurfaceState(_p_stReport) |= (_ulValue))
#define DNM_M_ulReportSetPrevSurfaceState(_p_stReport,_ulValue) (DNM_M_ulReportGetPrevSurfaceState(_p_stReport) = _ulValue)
#define DNM_M_eReportSetPrevVolumicEnvironment(_p_stReport,_eVolumicEnvironment) (DNM_M_eReportGetPrevVolumicEnvironment(_p_stReport) = _eVolumicEnvironment)
#define DNM_M_eReportSetCurrentVolumicEnvironment(_p_stReport,_eVolumicEnvironment) (DNM_M_eReportGetCurrentVolumicEnvironment(_p_stReport) = _eVolumicEnvironment)
#define DNM_M_ReportSetAbsolutePrevSpeed(_p_stReport,_p_stMove) MTH_M_MoveCopyClone(DNM_M_p_stReportGetAbsolutePrevSpeed(_p_stReport),_p_stMove)
#define DNM_M_ReportSetAbsoluteCurrSpeed(_p_stReport,_p_stMove) MTH_M_MoveCopyClone(DNM_M_p_stReportGetAbsoluteCurrSpeed(_p_stReport),_p_stMove)
#define DNM_M_ReportSetAbsolutePrevPosition(_p_stReport,_p_stMove) MTH_M_MoveCopyClone(DNM_M_p_stReportGetAbsolutePrevPosition(_p_stReport),_p_stMove)
#define DNM_M_ReportSetAbsoluteCurrPosition(_p_stReport,_p_stMove) MTH_M_MoveCopyClone(DNM_M_p_stReportGetAbsoluteCurrPosition(_p_stReport),_p_stMove)
#define DNM_M_ReportSetObstacle(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(&(_p_stReport)->m_stObstacle,_p_stObstacle)
#define DNM_M_ReportSetGround(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(&(_p_stReport)->m_stGround,_p_stObstacle)
#define DNM_M_ReportSetWall(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(DNM_M_p_stReportGetWall(_p_stReport),_p_stObstacle)
#define DNM_M_ReportSetCharacter(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(DNM_M_p_stReportGetCharacter(_p_stReport),_p_stObstacle)
#define DNM_M_ReportSetWater(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(DNM_M_p_stReportGetWater(_p_stReport),_p_stObstacle)
#define DNM_M_ReportSetCeil(_p_stReport,_p_stObstacle) DNM_M_ObstacleCopyClone(DNM_M_p_stReportGetCeil(_p_stReport),_p_stObstacle)
#define DNM_M_MecReportSetObstacle(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(&(_p_stReport)->m_stObstacle,_p_stObstacle)
#define DNM_M_MecReportSetGround(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(&(_p_stReport)->m_stGround,_p_stObstacle)
#define DNM_M_MecReportSetWall(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(DNM_M_p_stReportGetWall(_p_stReport),_p_stObstacle)
#define DNM_M_MecReportSetCharacter(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(DNM_M_p_stReportGetCharacter(_p_stReport),_p_stObstacle)
#define DNM_M_MecReportSetWater(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(DNM_M_p_stReportGetWater(_p_stReport),_p_stObstacle)
#define DNM_M_MecReportSetCeil(_p_stReport,_p_stObstacle) DNM_M_MecObstacleCopyClone(DNM_M_p_stReportGetCeil(_p_stReport),_p_stObstacle)
#define DNM_M_bReportIsWall(_p_stReport) ( _p_stReport->m_cBitField & DNM_C_ReportWall ? TRUE : FALSE )
#define DNM_M_bReportSetWallFlagToFalse(_p_stReport) ( _p_stReport->m_cBitField &= ~DNM_C_ReportWall )
#define DNM_M_bReportSetWallFlagToTrue(_p_stReport) ( _p_stReport->m_cBitField |= DNM_C_ReportWall )
#define DNM_M_bReportIsChar(_p_stReport) ( _p_stReport->m_cBitField & DNM_C_ReportChar ? TRUE : FALSE )
#define DNM_M_bReportSetCharFlagToFalse(_p_stReport) ( _p_stReport->m_cBitField &= ~DNM_C_ReportChar )
#define DNM_M_bReportSetCharFlagToTrue(_p_stReport) ( _p_stReport->m_cBitField |= DNM_C_ReportChar )
/*
* for camera
*----------------
*/
#define DNM_M_vReportSetLastMove(__p_stReport, __p_stMove) MTH_M_MoveSetLinear(&__p_stReport->m_stAbsolutePrevSpeed, __p_stMove)
#define DNM_M_p_stReportGetLastMove(__p_stReport) (MTH_M_p_stMoveGetLinear(&__p_stReport->m_stAbsolutePrevSpeed))
#define DNM_M_vReportSetLastTgtMove(__p_stReport, __p_stMove) MTH_M_MoveSetLinear(&__p_stReport->m_stAbsolutePrevPosition, __p_stMove)
#define DNM_M_p_stReportGetLastTgtMove(__p_stReport) (MTH_M_p_stMoveGetLinear(&__p_stReport->m_stAbsolutePrevPosition))
#define DNM_M_bReportCollision(_p_stReport) ( _p_stReport->m_cBitField & DNM_C_ReportCollision ? TRUE : FALSE )
#define DNM_M_bReportSetCollisionFlagToFalse(_p_stReport) ( _p_stReport->m_cBitField &= ~DNM_C_ReportCollision )
#define DNM_M_bReportSetCollisionFlagToTrue(_p_stReport) ( _p_stReport->m_cBitField |= DNM_C_ReportCollision )
#define DNM_M_bDynamicsIsAnimation(_p_stDynamics) (DNM_M_pstGetBaseBlock(_p_stDynamics)->ulFlags & DNM_C_Animation ? TRUE: FALSE)
/*
* end for camera
*----------------
*/
/* Clone */
#define DNM_M_ReportCopyClone(_p_stDst,_p_stSrc) memcpy(_p_stDst,_p_stSrc,sizeof(DNM_tdstReport))
/* Copy current state values into previous kinetic values */
/*#define DNM_M_ReportStateTranslate(_p_stReport) {\*/
/* DNM_M_eReportSetPrevDynamicalState(_p_stReport,DNM_M_eReportGetDynamicalState(_p_stReport));\*/
/* DNM_M_ulReportSetPrevSurfaceState(_p_stReport,DNM_M_ulReportGetSurfaceState(_p_stReport));\*/
/*}*/
#define DNM_M_ReportStateTranslate(_p_stReport) (DNM_M_ulReportSetPrevSurfaceState(_p_stReport,DNM_M_ulReportGetSurfaceState(_p_stReport)))
/* Default initialisation */
DNM_tdstReport *DNM_p_stReportDefaultInit(DNM_tdstReport *_p_stReport);
extern DNM_tdstMecReport g_stReport;
#ifdef __cplusplus
}
#endif
#endif