📄 clientexplosionsfx.cpp
字号:
// ----------------------------------------------------------------------- //
//
// MODULE : ClientExplosionSFX.cpp
//
// PURPOSE : CClientExplosionSFX - Definition
//
// CREATED : 7-1-98
//
// ----------------------------------------------------------------------- //
#include "ClientExplosionSFX.h"
#include "ObjectUtilities.h"
#include "cpp_server_de.h"
#include "SFXMsgIds.h"
#include "ClientServerShared.h"
#include "SoundTypes.h"
BEGIN_CLASS(CClientExplosionSFX)
ADD_LONGINTPROP(ExplosionType, 0)
ADD_REALPROP(Damage, 50.0f)
ADD_REALPROP_FLAG(DamageRadius, 200.0f, PF_RADIUS)
ADD_VECTORPROP_VAL(Direction, 0.0f, 1.0f, 0.0f)
ADD_STRINGPROP(WaveFile, "Sounds\\exp_tnt.wav")
END_CLASS_DEFAULT(CClientExplosionSFX, CClientSFX, NULL, NULL)
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::Setup(DVector *vPos, DVector *vNormal, DFLOAT fOffset)
{
VEC_COPY(m_vPos, *vPos);
VEC_COPY(m_vNormal, *vNormal);
m_fOffset = fOffset;
if(m_fOffset)
{
DVector temp;
VEC_NORM(m_vNormal);
VEC_MULSCALAR(temp, m_vNormal, m_fOffset);
VEC_ADD(m_vPos, m_vPos, temp);
}
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupModel(DVector *vScale1, DVector *vScale2, DFLOAT fDuration, DFLOAT fInitAlpha,
DBYTE bWaveForm, DBYTE bFade, DBOOL bRandRot, char *szModel, char *szSkin)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
HSTRING hszModel, hszModelSkin;
if(szModel) hszModel = pServerDE->CreateString(szModel);
else hszModel = pServerDE->CreateString("Models\\Explosions\\exp_sphere.abc");
if(szSkin) hszModelSkin = pServerDE->CreateString(szSkin);
else hszModelSkin = pServerDE->CreateString("Skins\\Explosions\\Explosion_1.dtx");
// Tell the clients about the Explosion...
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&m_vPos);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSION_ID);
// pServerDE->WriteToMessageByte(hMessage, DFALSE);
pServerDE->WriteToMessageVector(hMessage, &m_vPos);
pServerDE->WriteToMessageVector(hMessage, &m_vNormal);
pServerDE->WriteToMessageVector(hMessage, vScale1);
pServerDE->WriteToMessageVector(hMessage, vScale2);
pServerDE->WriteToMessageFloat(hMessage, fDuration);
pServerDE->WriteToMessageFloat(hMessage, fInitAlpha);
pServerDE->WriteToMessageByte(hMessage, bWaveForm);
pServerDE->WriteToMessageByte(hMessage, bFade);
pServerDE->WriteToMessageByte(hMessage, bRandRot);
pServerDE->WriteToMessageHString(hMessage, hszModel);
pServerDE->WriteToMessageHString(hMessage, hszModelSkin);
pServerDE->EndMessage(hMessage);
pServerDE->FreeString( hszModel );
pServerDE->FreeString( hszModelSkin );
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupSprite(DVector *vScale1, DVector *vScale2, DFLOAT fDuration,
DFLOAT fInitAlpha, DBYTE bWaveForm, DBYTE bFade, DBOOL bAlign, char *szSprite)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
HSTRING hszSprite;
if(szSprite) hszSprite = pServerDE->CreateString(szSprite);
else hszSprite = pServerDE->CreateString("Sprites\\Explode128.spr");
// Tell the clients about the Explosion...
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&m_vPos);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONSPRITE_ID);
// pServerDE->WriteToMessageByte(hMessage, DFALSE);
pServerDE->WriteToMessageVector(hMessage, &m_vPos);
pServerDE->WriteToMessageVector(hMessage, &m_vNormal);
pServerDE->WriteToMessageVector(hMessage, vScale1);
pServerDE->WriteToMessageVector(hMessage, vScale2);
pServerDE->WriteToMessageFloat(hMessage, fDuration);
pServerDE->WriteToMessageFloat(hMessage, fInitAlpha);
pServerDE->WriteToMessageByte(hMessage, bWaveForm);
pServerDE->WriteToMessageByte(hMessage, bFade);
pServerDE->WriteToMessageByte(hMessage, bAlign);
pServerDE->WriteToMessageHString(hMessage, hszSprite);
pServerDE->EndMessage(hMessage);
pServerDE->FreeString( hszSprite );
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupRing(DVector *vColor, DFLOAT fRadius, DFLOAT fPosRadius,
DFLOAT fVelocity, DFLOAT fGravity, DDWORD nParticles, DFLOAT fDuration,
DFLOAT fInitAlpha, DFLOAT fDelay, DBYTE bFade, DBOOL bAlign, char *szParticle)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
HSTRING hszRingParticle;
if(szParticle) hszRingParticle = pServerDE->CreateString(szParticle);
else hszRingParticle = pServerDE->CreateString("SpriteTextures\\smoke64_2.dtx");
// Tell the clients about the Explosion...
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&m_vPos);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONRING_ID);
// pServerDE->WriteToMessageByte(hMessage, DFALSE);
pServerDE->WriteToMessageVector(hMessage, &m_vPos);
pServerDE->WriteToMessageVector(hMessage, &m_vNormal);
pServerDE->WriteToMessageVector(hMessage, vColor);
pServerDE->WriteToMessageFloat(hMessage, fRadius);
pServerDE->WriteToMessageFloat(hMessage, fPosRadius);
pServerDE->WriteToMessageFloat(hMessage, fVelocity);
pServerDE->WriteToMessageFloat(hMessage, fGravity);
pServerDE->WriteToMessageDWord(hMessage, nParticles);
pServerDE->WriteToMessageFloat(hMessage, fDuration);
pServerDE->WriteToMessageFloat(hMessage, fInitAlpha);
pServerDE->WriteToMessageFloat(hMessage, fDelay);
pServerDE->WriteToMessageByte(hMessage, bFade);
pServerDE->WriteToMessageByte(hMessage, bAlign);
pServerDE->WriteToMessageHString(hMessage, hszRingParticle);
pServerDE->EndMessage(hMessage);
pServerDE->FreeString( hszRingParticle );
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupWave(DVector *vScale1, DVector *vScale2, DFLOAT fDuration, DFLOAT fInitAlpha,
DFLOAT fDelay, DBYTE bWaveForm, DBYTE bFade, DBOOL bAlign, char *szWave)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
HSTRING hszWave;
if(szWave) hszWave = pServerDE->CreateString(szWave);
else hszWave = pServerDE->CreateString("Sprites\\Shockring.spr");
// Tell the clients about the Explosion...
HMESSAGEWRITE hMessage = pServerDE->StartInstantSpecialEffectMessage(&m_vPos);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONWAVE_ID);
// pServerDE->WriteToMessageByte(hMessage, DFALSE);
pServerDE->WriteToMessageVector(hMessage, &m_vPos);
pServerDE->WriteToMessageVector(hMessage, &m_vNormal);
pServerDE->WriteToMessageVector(hMessage, vScale1);
pServerDE->WriteToMessageVector(hMessage, vScale2);
pServerDE->WriteToMessageFloat(hMessage, fDuration);
pServerDE->WriteToMessageFloat(hMessage, fInitAlpha);
pServerDE->WriteToMessageFloat(hMessage, fDelay);
pServerDE->WriteToMessageByte(hMessage, bWaveForm);
pServerDE->WriteToMessageByte(hMessage, bFade);
pServerDE->WriteToMessageByte(hMessage, bAlign);
pServerDE->WriteToMessageHString(hMessage, hszWave);
pServerDE->EndMessage(hMessage);
pServerDE->FreeString( hszWave );
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupLight(DVector *vColor1, DVector *vColor2, DFLOAT fDuration,
DFLOAT fDelay, DFLOAT fRadius1, DFLOAT fRadius2)
{
CServerDE* pServerDE = GetServerDE();
if (!pServerDE) return;
// Tell the clients about the light...
HMESSAGEWRITE hMessage = pServerDE->StartSpecialEffectMessage(this);
pServerDE->WriteToMessageByte(hMessage, SFX_EXPLOSIONLIGHT_ID);
//pServerDE->WriteToMessageByte(hMessage, DFALSE);
pServerDE->WriteToMessageVector(hMessage, &m_vPos);
pServerDE->WriteToMessageVector(hMessage, vColor1);
pServerDE->WriteToMessageVector(hMessage, vColor2);
pServerDE->WriteToMessageFloat(hMessage, fDuration);
pServerDE->WriteToMessageFloat(hMessage, fDelay);
pServerDE->WriteToMessageFloat(hMessage, fRadius1);
pServerDE->WriteToMessageFloat(hMessage, fRadius2);
pServerDE->EndMessage(hMessage);
}
// ----------------------------------------------------------------------- //
void CClientExplosionSFX::SetupFrag(DVector *vScale, DVector *vRotateMax, DFLOAT fSpread,
DFLOAT fDuration, DFLOAT fVelocity, DFLOAT fBounceMod, DFLOAT fGravity,
DFLOAT fFadeTime, DBOOL bRandDir, char *szModel, char *szSkin)
{
CServerDE* pServerDE = GetServerDE();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -