reman3/Rayman_X/cpa/tempgrp/Mgt/MGTmm.c

183 lines
6.9 KiB
C

/**********************************************************
* *
* Magnet *
* *
* Author : Ubi China - Marc Trabucato *
* *
**********************************************************/
#include "acp_base.h"
#define D_MSMagnet_StructureDefine
/*XB9800506*/
/*#include "incGEO.h"*/
#include "GEO.h"
/*#include "incGLI.h"*/
#include "GLI.h"
/*#include "incGAM.h"*/
#include "mec.h"
#include "fil.h"
#include "snd.h"
#include "pcs.h"
#include "gld.h"
#include "lst.h"
#ifdef USE_IPT_DX5
#include "IPT_DX5.h" /* InPuT (absolutely before GAM.h)*/
#else /* USE_IPT_WIN */
#include "IPT.h" /* InPuT (absolutely before GAM.h)*/
#endif /* USE_IPT_WIN */
/*#include "srf.h"*/
/*#include "env.h"*/
#include "sct.h"
#include "prt.h"
#include "gam.h"
/*End XB*/
#include "MGT\MGTStruc.h"
#include "MGTmm.h"
#include "MGTmo.h"
#ifdef MGT_RASTER
#include "MGTRast.h"
#endif
/*=======================================================================================
* Description
*
* Creation date 01/03/98
* Author Marc Trabucato
*=====================================================================================*/
MGT_tdxHandleToMagnetModification MGT_fn_hFindOrAddMagnetModification( ACP_tdxIndex x_Magnet , ACP_tdxIndex x_ModifiedObject , GEO_tdstGeometricObject *p_stObject )
{
ACP_tdxIndex xIndex , xFreeIndex;
MGT_tdxHandleToMagnetModification h_MagnetModif;
MGT_tdxHandleToModifiedObject h_ModifiedObject;
h_ModifiedObject = MGT_g_aDEF_hModifiedObjects[ x_ModifiedObject ];
xFreeIndex = MGT_MAX_NUMBEROF_MODIFIEDOBJECTS;
for( xIndex = 0 ; xIndex < MGT_MAX_NUMBEROF_MAGNETS ; xIndex++ )
{
h_MagnetModif = h_ModifiedObject -> aDEF_hMagnet[ xIndex ];
if( h_MagnetModif )
{
if( h_MagnetModif -> xIndexOfActivatedMagnet == x_Magnet )
return h_MagnetModif;
}
else if( xFreeIndex == MGT_MAX_NUMBEROF_MODIFIEDOBJECTS )
{
xFreeIndex = xIndex;
}
}
h_MagnetModif = MGT_fn_hCreateMagnetModification( x_Magnet, x_ModifiedObject );
return h_MagnetModif;
}
/*=======================================================================================
* Description
*
* Creation date 01/03/98
* Author Marc Trabucato
*=====================================================================================*/
MGT_tdxHandleToMagnetModification MGT_fn_hCreateMagnetModification( ACP_tdxIndex x_Magnet , ACP_tdxIndex x_ModifiedObject )
{
MGT_tdxHandleToMagnetModification h_MagnetModif;
MS_tdxHandleToMSMagnet h_Magnet;
MGT_tdxHandleToModifiedObject h_ModifiedObject;
h_ModifiedObject = MGT_g_aDEF_hModifiedObjects[ x_ModifiedObject ];
h_Magnet = M_GetMSHandle( MGT_g_aDEF_hActivatedMagnets[ x_Magnet ] , MSMagnet);
MGT_M_pvMalloc( h_MagnetModif , MGT_tdxHandleToMagnetModification , sizeof ( MGT_tdstMagnetModification ) );
h_MagnetModif -> xIndexOfActivatedMagnet = x_Magnet;
h_MagnetModif -> xIndexOfModifiedObject = x_ModifiedObject;
h_MagnetModif -> h_SuperObject = NULL;
h_MagnetModif -> xNbPoints = h_ModifiedObject -> p_stMorphedObject -> xNbPoints;
MGT_fn_vAddMagnetModificationToModifiedObject( h_MagnetModif );
fn_vMSMagnetAddMagnetModification( h_Magnet, h_MagnetModif );
/**/
MGT_M_pvMalloc( h_MagnetModif -> d_cFieldBitsInfluencedPoints , char* , MGT_M_BYTESFORBITS( h_MagnetModif -> xNbPoints ) );
MGT_fn_vClearInfluencedPointsOfMagnetModification( h_MagnetModif );
MGT_M_pvMalloc( h_MagnetModif -> d_cFieldBitsModifiedPoints , char* , MGT_M_BYTESFORBITS( h_MagnetModif -> xNbPoints ) );
MGT_fn_vClearModifiedPointsOfMagnetModification( h_MagnetModif );
MGT_M_pvMalloc( h_MagnetModif -> d_ulCurrentDuration, unsigned long* , h_MagnetModif -> xNbPoints * sizeof ( unsigned long ) );
memset( h_MagnetModif -> d_ulCurrentDuration, 0, h_MagnetModif -> xNbPoints * sizeof ( unsigned long ) );
return h_MagnetModif;
}
/*=======================================================================================
* Description
*
* Creation date 02/03/98
* Author Marc Trabucato
*=====================================================================================*/
void MGT_fn_vClearModifiedPointsOfMagnetModification( MGT_tdxHandleToMagnetModification h_MagnetModif )
{
memset( h_MagnetModif -> d_cFieldBitsModifiedPoints, 0, MGT_M_BYTESFORBITS( h_MagnetModif -> xNbPoints ) );
}
/*=======================================================================================
* Description
*
* Creation date 02/03/98
* Author Marc Trabucato
*=====================================================================================*/
void MGT_fn_vClearInfluencedPointsOfMagnetModification( MGT_tdxHandleToMagnetModification h_MagnetModif )
{
memset( h_MagnetModif -> d_cFieldBitsInfluencedPoints, 0, MGT_M_BYTESFORBITS( h_MagnetModif -> xNbPoints ) );
}
/*=======================================================================================
* Description Free MagnetModification and delete it from ModifiedObject and MSMagnet
*
* Creation date 02/03/98
* Author Marc Trabucato
*=====================================================================================*/
void MGT_fn_vDeleteMagnetModification( MGT_tdxHandleToMagnetModification h_MagnetModif )
{
MGT_M_Free( h_MagnetModif -> d_cFieldBitsInfluencedPoints );
MGT_M_Free( h_MagnetModif -> d_cFieldBitsModifiedPoints );
MGT_M_Free( h_MagnetModif -> d_ulCurrentDuration );
/**/
if( h_MagnetModif -> xIndexOfModifiedObject != MGT_C_xIndexError )
MGT_fn_vDeleteMagnetModificationToModifiedObject( h_MagnetModif );
/**/
if( ( h_MagnetModif -> xIndexOfActivatedMagnet != MGT_C_xIndexError ) &&
MGT_g_aDEF_hActivatedMagnets[ h_MagnetModif -> xIndexOfActivatedMagnet ] &&
M_GetMSHandle( MGT_g_aDEF_hActivatedMagnets[ h_MagnetModif -> xIndexOfActivatedMagnet ] , MSMagnet) )
fn_vMSMagnetDeleteMagnetModification( M_GetMSHandle( MGT_g_aDEF_hActivatedMagnets[ h_MagnetModif -> xIndexOfActivatedMagnet ] , MSMagnet), h_MagnetModif );
MGT_M_Free( h_MagnetModif );
}
/*=======================================================================================
* Description
*
* Creation date 02/03/98
* Author Marc Trabucato
*=====================================================================================*/
ACP_tdxBool MGT_fn_bIsExistModifiedPointsOnMagnetModification( MGT_tdxHandleToMagnetModification h_MagnetModif )
{
ACP_tdxIndex xSize , xCurrent;
xSize = MGT_M_BYTESFORBITS( h_MagnetModif -> xNbPoints );
for( xCurrent = 0 ; xCurrent < xSize ; xCurrent++ )
{
if( h_MagnetModif -> d_cFieldBitsModifiedPoints[ xCurrent ] )
break;
}
return (xCurrent != xSize);
}