187 lines
6.6 KiB
C
187 lines
6.6 KiB
C
/*
|
|
0 1 2 3 4 5 6 7
|
|
01234567890123456789012345678901234567890123456789012345678901234567890123456789
|
|
--------------------------------------------------------------------------------
|
|
-- Description : Particles system
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
#ifndef D_THROW_PRT
|
|
|
|
#include "acp_base.h"
|
|
#include "MTH.h"
|
|
#include "RND.h"
|
|
#include "MEC.h"
|
|
#include "GMT.h"
|
|
#include "GEO.h"
|
|
#include "GLI.h"
|
|
#include "COL.h"
|
|
|
|
#include "PRT/PrtSrc.h"
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description : Global variables
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
MTH_tdxReal PRT_g_xNbParticlesFactor = MTH_C_ONE;
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description : Particles source creation
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 15 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
void PRT_fn_vCreateParticlesSource ( PRT_tdstParticlesSource **_p_pstParticlesSource )
|
|
{
|
|
GEO_M_CPAMalloc
|
|
(
|
|
*_p_pstParticlesSource,
|
|
PRT_tdstParticlesSource *,
|
|
sizeof ( PRT_tdstParticlesSource ),
|
|
E_uwGEONotEnoughtMemory
|
|
);
|
|
(*_p_pstParticlesSource)->ucLifeMode = PRT_C_ucNoLifeTime;
|
|
}
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description : Particles source destruction
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 15 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void PRT_fn_vDestructParticlesSource ( PRT_tdstParticlesSource *_p_stParticlesSource )
|
|
{
|
|
GEO_M_CPAFree ( _p_stParticlesSource );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description :
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
void PRT_fn_vSetQuadParticlesSource
|
|
(
|
|
PRT_tdstParticlesSource *_p_stParticlesSource,
|
|
MTH3D_tdstVector *_p_stVertex1,
|
|
MTH3D_tdstVector *_p_stVertex2,
|
|
MTH3D_tdstVector *_p_stVertex3
|
|
)
|
|
{
|
|
MTH3D_tdstVector stEdge12;
|
|
MTH3D_tdstVector stEdge13;
|
|
|
|
MTH3D_M_vCopyVector ( &(_p_stParticlesSource->stVertex1), _p_stVertex1 );
|
|
MTH3D_M_vCopyVector ( &(_p_stParticlesSource->stVertex2), _p_stVertex2 );
|
|
MTH3D_M_vCopyVector ( &(_p_stParticlesSource->stVertex3), _p_stVertex3 );
|
|
|
|
MTH3D_M_vSubVector ( &stEdge12, _p_stVertex2, _p_stVertex1 );
|
|
MTH3D_M_vSubVector ( &stEdge13, _p_stVertex3, _p_stVertex1 );
|
|
|
|
MTH3D_M_vCrossProductVectorWithoutBuffer ( &(_p_stParticlesSource->stNormal) , &stEdge12 , &stEdge13 );
|
|
|
|
MTH3D_M_vNormalizeVector ( &(_p_stParticlesSource->stNormal), &(_p_stParticlesSource->stNormal) );
|
|
}
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description :
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void PRT_fn_vSetPointParticlesSource( PRT_tdstParticlesSource *_p_stParticlesSource,MTH3D_tdstVector *_p_stVertex )
|
|
{
|
|
MTH3D_M_vCopyVector( &(_p_stParticlesSource->stVertex1), _p_stVertex );
|
|
MTH3D_M_vNullVector( &(_p_stParticlesSource->stNormal) );
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description :
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
ACP_tdxBool PRT_fn_bComputeParticlesGeneration ( PRT_tdstParticlesSource *_p_stParticlesSource )
|
|
{
|
|
/* continuous generation */
|
|
if ( _p_stParticlesSource->ucGenerationMode == PRT_C_ucContinousGeneration )
|
|
return TRUE;
|
|
|
|
/* probabilist generattion */
|
|
if ( _p_stParticlesSource->ucGenerationMode == PRT_C_ucProbabilistGeneration )
|
|
{
|
|
if ( _p_stParticlesSource->xGenerationProbability > RND_fn_xGetRealRandomValue ( 0, MTH_C_ZERO, MTH_C_ONE ) )
|
|
return TRUE;
|
|
return FALSE;
|
|
}
|
|
|
|
/* Crenel generation */
|
|
if ( _p_stParticlesSource->ucGenerationMode == PRT_C_ucCrenelGeneration )
|
|
{
|
|
if ( _p_stParticlesSource->xFramesCounter < _p_stParticlesSource->xNbFramesNoGeneration )
|
|
{
|
|
_p_stParticlesSource->xFramesCounter ++;
|
|
return FALSE;
|
|
}
|
|
_p_stParticlesSource->xFramesCounter = (_p_stParticlesSource->xFramesCounter+1)%_p_stParticlesSource->xNbFramesTotal;
|
|
return TRUE;
|
|
}
|
|
|
|
/* bad generation code or no generation */
|
|
return FALSE;
|
|
}
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description :
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
ACP_tdxIndex PRT_fn_xComputeNbParticlesToInject ( PRT_tdstParticlesSource *_p_stParticlesSource )
|
|
{
|
|
if ( _p_stParticlesSource->ucNbParticlesToGenerateMode == PRT_C_ucConstantNb )
|
|
return _p_stParticlesSource->xNbParticlesToGenerate;
|
|
|
|
if ( _p_stParticlesSource->ucNbParticlesToGenerateMode == PRT_C_ucProbabilistNb )
|
|
return (ACP_tdxIndex) RND_fn_ulGetUnsignedLongRandomValue ( 0, _p_stParticlesSource->xNbMin, _p_stParticlesSource->xNbMax );
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
--------------------------------------------------------------------------------
|
|
-- Description :
|
|
--------------------------------------------------------------------------------
|
|
-- Creation date : 12 jun 1997 Author : FPI
|
|
--------------------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
|
|
void PRT_fn_vSetNbParticlesFactor ( MTH_tdxReal _xNbParticlesFactor )
|
|
{
|
|
PRT_g_xNbParticlesFactor = _xNbParticlesFactor;
|
|
}
|
|
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
|
|
|
|
#endif /* D_THROW_PRT */
|