⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientexplosionsfx.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ----------------------------------------------------------------------- //
//
// 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 + -