313 lines
9.0 KiB
C
313 lines
9.0 KiB
C
/**********************************************************
|
|
* *
|
|
* 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 );
|
|
}
|
|
}
|
|
}
|
|
}
|