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

📄 explosionfx.h

📁 Blood 2全套源码
💻 H
📖 第 1 页 / 共 2 页
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : ExplosionFX.h
//
// PURPOSE : Explosion special fx class - Definition
//
// CREATED : 7/1/98
//
// ----------------------------------------------------------------------- //

#ifndef __EXPLOSION_FX_H__
#define __EXPLOSION_FX_H__

// ----------------------------------------------------------------------- //

#include "SpecialFX.h"
#include "BaseParticleSystemFX.h"

// ----------------------------------------------------------------------- //

struct EXPLOSIONMODELCS : public SFXCREATESTRUCT
{
	EXPLOSIONMODELCS::EXPLOSIONMODELCS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vScale1;
	DVector	vScale2;
	DVector	vRotations;
	DFLOAT	fDuration;
	DFLOAT	fAlpha;
	DBYTE	bWaveForm;
	DBYTE	bFadeType;
	DBYTE	bRandomRot;
	HSTRING	szModel;
	HSTRING	szSkin;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONMODELCS::EXPLOSIONMODELCS()
{
	memset(this, 0, sizeof(EXPLOSIONMODELCS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONSPRITECS : public SFXCREATESTRUCT
{
	EXPLOSIONSPRITECS::EXPLOSIONSPRITECS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vScale1;
	DVector	vScale2;
	DFLOAT	fDuration;
	DFLOAT	fAlpha;
	DBYTE	bWaveForm;
	DBYTE	bFadeType;
	DBYTE	bAlign;
	HSTRING	szSprite;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONSPRITECS::EXPLOSIONSPRITECS()
{
	memset(this, 0, sizeof(EXPLOSIONSPRITECS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONRINGCS : public SFXCREATESTRUCT
{
	EXPLOSIONRINGCS::EXPLOSIONRINGCS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vColor;
	DFLOAT	fRadius;
	DFLOAT	fPosRadius;
	DFLOAT	fVelocity;
	DFLOAT	fGravity;
	DFLOAT	fRotation;
	DDWORD	nParticles;
	DFLOAT	fDuration;
	DFLOAT	fAlpha;
	DFLOAT	fDelay;
	DBYTE	bFadeType;
	DBYTE	bRotateType;
	DBYTE	bAlign;
	HSTRING	szParticle;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONRINGCS::EXPLOSIONRINGCS()
{
	memset(this, 0, sizeof(EXPLOSIONRINGCS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONFLAMECS : public SFXCREATESTRUCT
{
	EXPLOSIONFLAMECS::EXPLOSIONFLAMECS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vColor1;		// Core color
	DVector	vColor2;		// Median color
	DVector	vColor3;		// Edge color
	DVector	vLifeTimes;
	DVector	vLifeOffsets;
	DVector	vFXTimes;
	DDWORD	nParticles;
	DFLOAT	fRadius;
	DFLOAT	fPosRadius;
	DFLOAT	fGravity;
	DFLOAT	fVelocity;
	DFLOAT	fDelay;
	DFLOAT	fAlpha;
	DBYTE	bFadeType;
	DBYTE	bRampFlags;
	HSTRING	szParticle;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONFLAMECS::EXPLOSIONFLAMECS()
{
	memset(this, 0, sizeof(EXPLOSIONFLAMECS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONWAVECS : public SFXCREATESTRUCT
{
	EXPLOSIONWAVECS::EXPLOSIONWAVECS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vScale1;
	DVector	vScale2;
	DFLOAT	fDuration;
	DFLOAT	fAlpha;
	DFLOAT	fDelay;
	DBYTE	bWaveForm;
	DBYTE	bFadeType;
	DBYTE	bAlign;
	HSTRING	szWave;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONWAVECS::EXPLOSIONWAVECS()
{
	memset(this, 0, sizeof(EXPLOSIONWAVECS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONLIGHTCS : public SFXCREATESTRUCT
{
	EXPLOSIONLIGHTCS::EXPLOSIONLIGHTCS();

	DVector	vPos;
	DVector	vColor1;
	DVector vColor2;
	DFLOAT	fDuration;
	DFLOAT	fDelay;
	DFLOAT	fRadius1;
	DFLOAT	fRadius2;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONLIGHTCS::EXPLOSIONLIGHTCS()
{
	memset(this, 0, sizeof(EXPLOSIONLIGHTCS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONFRAGCS : public SFXCREATESTRUCT
{
	EXPLOSIONFRAGCS::EXPLOSIONFRAGCS();

	DVector	vPos;
	DVector	vNormal;
	DVector	vScale;
	DVector	vRotateMax;
	DFLOAT	fSpread;
	DFLOAT	fDuration;
	DFLOAT	fVelocity;
	DFLOAT	fBounceMod;
	DFLOAT	fGravity;
	DFLOAT	fFadeTime;
	DFLOAT	fInitAlpha;
	DBOOL	bRandDir;
	DBOOL	bSpawnExp;
	DDWORD	nSpawnType;
	DDWORD	nTrailType;
	HSTRING	szModel;
	HSTRING	szSkin;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONFRAGCS::EXPLOSIONFRAGCS()
{
	memset(this, 0, sizeof(EXPLOSIONFRAGCS));
}

// ----------------------------------------------------------------------- //

struct EXPLOSIONFXCS : public SFXCREATESTRUCT
{
	EXPLOSIONFXCS::EXPLOSIONFXCS();

	DVector	vPos;
	DVector	vNormal;
	DDWORD	nType;
};

// ----------------------------------------------------------------------- //

inline EXPLOSIONFXCS::EXPLOSIONFXCS()
{
	memset(this, 0, sizeof(EXPLOSIONFXCS));
}

// ----------------------------------------------------------------------- //

class CExplosionModelFX : public CSpecialFX
{
	public :

		CExplosionModelFX()
		{
			VEC_SET(m_vNormal, 0.0f, 1.0f, 0.0f);
			m_fDuration	= 1.0f;
			VEC_SET(m_vScale2, 1.0f, 1.0f, 1.0f);
			m_szModel = DNULL;
			m_szSkin = DNULL;
		}

		~CExplosionModelFX()
		{
			g_pClientDE->FreeString( m_szModel );
			g_pClientDE->FreeString( m_szSkin );
		}

		virtual DBOOL CreateObject(CClientDE* pClientDE);
		virtual DBOOL Init(SFXCREATESTRUCT* psfxCreateStruct);
		virtual DBOOL Update();

	private :

		DVector	m_vPos;				// Position of the explosion
		DVector m_vNormal;			// Normal of the surface that was hit

		DVector	m_vRotations;		// Rotation values for the model

		DFLOAT	m_fStartTime;		// When did we start
		DFLOAT	m_fDuration;		// Time to scale between
		DFLOAT	m_fInitAlpha;		// Initial alpha value

		DBOOL	m_bScale;			// Scale the object?
		DVector	m_vScale1;			// Initial scale
		DVector	m_vScale2;			// Final scale

		DBYTE	m_bWaveForm;		// Type of waveform to scale with
		DBYTE	m_bFadeType;		// Type of fade to apply
		DBYTE	m_bRandomRot;		// Place the model in a random inital rotation

		HSTRING	m_szModel;			// File to use for the model
		HSTRING	m_szSkin;			// File to use for the skin
};

// ----------------------------------------------------------------------- //

class CExplosionSpriteFX : public CSpecialFX
{
	public :

		CExplosionSpriteFX()
		{
			VEC_SET(m_vNormal, 0.0f, 1.0f, 0.0f);
			m_fDuration	= 1.0f;
			VEC_SET(m_vScale2, 1.0f, 1.0f, 1.0f);
			m_szSprite = DNULL;
		}

		~CExplosionSpriteFX()
		{
			g_pClientDE->FreeString( m_szSprite );
		}

		virtual DBOOL CreateObject(CClientDE* pClientDE);
		virtual DBOOL Init(SFXCREATESTRUCT* psfxCreateStruct);
		virtual DBOOL Update();

	private :

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -