/********************************************************** * * * Magnet * * * * Author : Ubi China - Marc Trabucato * * * **********************************************************/ #include "acp_base.h" /* #include "incGAM.h" #include "SPO.h" #include "GEO.h" #include "MTH.h" #include "GLI.h" #include "incIPO.h" */ #define D_MSMagnet_StructureDefine #include "MTH.h" #include "MEC.h" #include "GMT.h" #include "GEO.h" #include "GLI.h" /*XB980506*/ /*#include "incGAM.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" /*#include "incSPO.h"*/ #include "pos.h" #include "spo.h" /*#include "incIPO.h"*/ #include "po.h" /*XB980821*/ #ifndef D_THROW_IPO #include "ipo.h" #endif /* D_THROW_IPO */ /*End XB*/ /*XB980821*/ #ifndef D_THROW_IPO #include "ISI.h" #endif /* D_THROW_IPO */ /*End XB*/ #include "MGT\MGTStruc.h" #include "MGTInit.h" #include "MGTMain.h" #include "MGTmm.h" #include "MGTmo.h" /*************************************************************************************************/ /*======================================================================================= * Description * * Creation date 01/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vFirstInitMagnet( void ) { ACP_tdxIndex xIndex; for( xIndex = 0 ; xIndex < MGT_MAX_NUMBEROF_MAGNETS ; xIndex++ ) MGT_g_aDEF_hActivatedMagnets[ xIndex ] = NULL; for( xIndex = 0 ; xIndex < MGT_MAX_NUMBEROF_MODIFIEDOBJECTS ; xIndex++ ) MGT_g_aDEF_hModifiedObjects[ xIndex ] = NULL; MGT_g_xMaxIndexOfActivatedMagnet = 0; MGT_g_xMaxIndexOfModifiedObject = 0; } /*====================================================================================== * Description * * Creation date 01/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vLastDesInitMagnet( void ) { ACP_tdxIndex xIndex , xIndexModif; MGT_tdxHandleToModifiedObject *p_h_ModifiedObject; for( xIndex = 0 , p_h_ModifiedObject = MGT_g_aDEF_hModifiedObjects ; xIndex < MGT_g_xMaxIndexOfModifiedObject; xIndex++, p_h_ModifiedObject++ ) { if( *p_h_ModifiedObject ) { for( xIndexModif = 0 ; xIndexModif < MGT_MAX_NUMBEROF_MAGNETS ; xIndexModif++ ) { if( (*p_h_ModifiedObject) -> aDEF_hMagnet[ xIndexModif ] != NULL ) { MGT_fn_vDeleteMagnetModification( (*p_h_ModifiedObject) -> aDEF_hMagnet[ xIndexModif ] ); } } MGT_fn_vDeleteModifiedObject( xIndex ); } } MGT_g_xMaxIndexOfModifiedObject = 0; MGT_fn_vUpdateActivatedMagnetsList(); } /*======================================================================================= * Description * * Creation date 01/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vAddObjectToMagnetList(HIE_tdxHandleToSuperObject p_stObject) { ACP_tdxIndex xIndex , xFreeIndex; MS_tdxHandleToMSMagnet hMagnet; xFreeIndex = MGT_g_xMaxIndexOfActivatedMagnet; for( xIndex = 0 ; xIndex < MGT_g_xMaxIndexOfActivatedMagnet ; xIndex++ ) { if( MGT_g_aDEF_hActivatedMagnets[ xIndex ] == p_stObject ) { xFreeIndex = xIndex; break; } else if( ( xFreeIndex == MGT_g_xMaxIndexOfActivatedMagnet ) && (MGT_g_aDEF_hActivatedMagnets[ xIndex ] == NULL) ) { xFreeIndex = xIndex; } } if( xFreeIndex != MGT_MAX_NUMBEROF_MAGNETS ) { MGT_g_aDEF_hActivatedMagnets[ xFreeIndex ] = p_stObject; if( xFreeIndex == MGT_g_xMaxIndexOfActivatedMagnet ) MGT_g_xMaxIndexOfActivatedMagnet++; hMagnet = M_GetMSHandle(p_stObject, MSMagnet); if( hMagnet ) { fn_vMSMagnetSetStatus( hMagnet, MAGNETGROWING); POS_fn_vGetTranslationVector( HIE_fn_hGetSuperObjectGlobalMatrix(p_stObject), fn_hMSMagnetGetPosition( hMagnet ) ); MGT_fn_vComputeInfluence( p_stObject , hMagnet, xFreeIndex ); } } } /*======================================================================================= * Description * * Creation date 01/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vDeleteObjectFromMagnetList(HIE_tdxHandleToSuperObject p_stObject) { ACP_tdxIndex xIndex; MS_tdxHandleToMSMagnet hMagnet; for( xIndex = 0 ; xIndex < MGT_g_xMaxIndexOfActivatedMagnet ; xIndex++ ) { if( MGT_g_aDEF_hActivatedMagnets[ xIndex ] == p_stObject ) { MGT_g_aDEF_hActivatedMagnets[ xIndex ] = NULL; if( xIndex = (MGT_g_xMaxIndexOfActivatedMagnet-1) ) MGT_g_xMaxIndexOfActivatedMagnet--; hMagnet = M_GetMSHandle(p_stObject, MSMagnet); fn_vMSMagnetSetStatus( hMagnet, MAGNETOFF); break; } } } /*======================================================================================= * Description * * Creation date 02/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vDeleteMagnetFromMagnetList( ACP_tdxIndex x_Magnet ) { MGT_g_aDEF_hActivatedMagnets[ x_Magnet ] = NULL; if( x_Magnet == (MGT_g_xMaxIndexOfActivatedMagnet-1) ) MGT_g_xMaxIndexOfActivatedMagnet--; } /*======================================================================================= * Description * * Creation date 02/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vDeleteMagnet( ACP_tdxIndex x_Magnet ) { /* ACP_tdxIndex xIndex; MGT_tdxHandleToMagnetModification hModif; for ( xIndex = 0 ; xIndex < MGT_MAX_NUMBEROF_MAGNETS ; xIndex++ ) { hModif = fn_hMSMagnetGetMagnetModification( hMagnet, xIndex ); if( hModif ) { MGT_fn_vDeleteMagnetModification( hModif ); } } */ } /*======================================================================================= * Description * * Creation date 02/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vDeleteMSMagnetIfNeeded( ACP_tdxIndex x_Magnet ) { ACP_tdxIndex xIndex; MS_tdxHandleToMSMagnet h_Magnet; h_Magnet = M_GetMSHandle( MGT_g_aDEF_hActivatedMagnets[ x_Magnet ], MSMagnet); if( h_Magnet ) { for( xIndex = 0 ; xIndex < MGT_MAX_NUMBEROF_MODIFIEDOBJECTS ; xIndex++ ) { if( fn_hMSMagnetGetMagnetModification( h_Magnet, xIndex ) ) { break; } } if( (xIndex == MGT_MAX_NUMBEROF_MODIFIEDOBJECTS) && (fn_lMSMagnetGetStatus( h_Magnet ) == MAGNETRECOVERING) ) { fn_vMSMagnetSetStatus( h_Magnet, MAGNETOFF); /* delete the magnet from the active magnet list.*/ MGT_fn_vDeleteMagnetFromMagnetList( x_Magnet ); } } else { /* delete the magnet from the active magnet list.*/ MGT_fn_vDeleteMagnetFromMagnetList( x_Magnet ); } } /*======================================================================================= * Description * * Creation date 02/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vUpdateModifiedObjectsList( void ) { ACP_tdxIndex xIndex; MGT_tdxHandleToModifiedObject *p_h_ModifiedObject; for( xIndex = 0 , p_h_ModifiedObject = MGT_g_aDEF_hModifiedObjects ; xIndex < MGT_g_xMaxIndexOfModifiedObject ; xIndex++, p_h_ModifiedObject++ ) { if( *p_h_ModifiedObject ) { MGT_fn_vDeleteModifiedObjectIfNeeded( xIndex ); } } } /*======================================================================================= * Description * * Creation date 02/03/98 * Author Marc Trabucato *=====================================================================================*/ void MGT_fn_vUpdateActivatedMagnetsList( void ) { ACP_tdxIndex xIndex; MS_tdxHandleToMSMagnet h_Magnet; HIE_tdxHandleToSuperObject *p_hSO; for ( xIndex = 0 , p_hSO = MGT_g_aDEF_hActivatedMagnets ; xIndex < MGT_g_xMaxIndexOfActivatedMagnet ; xIndex++, p_hSO++ ) { if( *p_hSO ) { h_Magnet = M_GetMSHandle( (*p_hSO) , MSMagnet); MGT_fn_vDeleteMSMagnetIfNeeded( xIndex ); if( h_Magnet ) { fn_vMSMagnetSetStrengthModification( h_Magnet, FALSE ); fn_vMSMagnetSetNearFarModification ( h_Magnet, FALSE ); } } } }