reman3/Rayman_X/cpa/tempgrp/Mgt/MGTInit.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 );
}
}
}
}