📄 centerforcelogic.cpp
字号:
#include "StdAfx.h"
#include ".\centerforcelogic.h"
#include "Particle.h"
#include "ParticleEmitter.h"
//////////////////////////////////////////////////////////////////////////
/** 向心外力扰动子
* 说明请看对应头文件
*/
//////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------
CCenterForceLogic::CCenterForceLogic( CParticleEmitter* parent ) : CParticleAffector(parent)
{
type=Center;
m_strTypename = "NF3D内置的轴向外力扰动子";
m_strDesc = "使用m_FloatArray的Slot:0,表示随离心力的大小,默认是0表示无任何离心力。\n\
使用m_FloatArray的Slot:1,表示开始影响的半径,默认是0表示从Emitter核心开始就开始影响。\n\
使用m_FloatArray的Slot:2,表示结束影响的半径,默认是0表示永无结束。\n\
使用m_FloatArray的Slot:3,表示随离心远近而导致的外力的衰减,默认是0表示无衰减。";
DefaultValue();
}
//------------------------------------------------------------
CCenterForceLogic::~CCenterForceLogic()
{
}
//------------------------------------------------------------
void CCenterForceLogic::DefaultValue()
{
if ( m_FloatArray.empty() )
{
// 默认是无影响
m_FloatArray.push_back( 0.0f );
// 默认是核心开始
m_FloatArray.push_back( 0.0f );
// 默认是永无结束
m_FloatArray.push_back( 0.0f );
// 默认无衰减
m_FloatArray.push_back( 0.0f );
}
else
{
SetParamFloat( 0 , 0.0f );
SetParamFloat( 1 , 0.0f );
SetParamFloat( 2 , 0.0f );
SetParamFloat( 3 , 0.0f );
}
}
//------------------------------------------------------------
bool CCenterForceLogic::Logic( CParticle* par , float ref )
{
// 对粒子三个轴向的速度分别施加影响,这个影响将考虑到Emitter位置
// 算出外力方向和长度
D3DXVECTOR3 force = par->m_vecPosition - m_pParentEmitter->GetAbsPosition();
float dist = D3DXVec3Length( &force );
// 长度是否合适
if ( dist >= m_FloatArray[1] && ( m_FloatArray[2] == 0.0f || dist < m_FloatArray[2] ) )
{
// 算出外力
D3DXVec3Normalize( &force , &force );
force *= m_FloatArray[0];
// 影响速度
par->m_vecVelocity += ( force * ref );
}
return true;
}
//------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -