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

📄 projectile.h

📁 Blood 2全套源码
💻 H
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : Projectile.h
//
// PURPOSE : Projectile class - definition
//
// CREATED : 9/25/97
//
// ----------------------------------------------------------------------- //

#ifndef __PROJECTILE_H__
#define __PROJECTILE_H__

#include "cpp_engineobjects_de.h"
#include "Destructable.h"
#include "ObjectUtilities.h"

class CImpact;

class CProjectile : public BaseClass
{
	public :

		CProjectile(DBYTE nType = OT_MODEL);
		virtual ~CProjectile();
		
		virtual void Setup(DVector *vDir, DBYTE nType, DFLOAT fDamage, DFLOAT fVelocity,
							int nRadius, HOBJECT hFiredFrom);
		void SetFlags(DDWORD dwFlags);

		virtual void Explode();
		virtual void BreakLink(HOBJECT hObj);

	protected :

		DDWORD EngineMessageFn(DDWORD messageID, void *pData, DFLOAT lData);

		virtual void  PostPropRead(ObjectCreateStruct *pStruct);
		virtual DBOOL InitialUpdate(DVector* pMovement);
		virtual DBOOL Update(DVector* pMovement);
		virtual void  HandleTouch(HOBJECT hObj);

		virtual void DamageObjectsWithinRadius();

		virtual void AddImpact(DVector vPos, DVector vNormal, HOBJECT hObj);
		virtual void AddBloodImpact(DVector *vPos, DVector *vNormal, DFLOAT fDamage);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		virtual void AddLight(DFLOAT fRadius, DFLOAT fRed, DFLOAT fGreen, DFLOAT fBlue);
		virtual void AddSmokeTrail(DVector vVel);
		virtual void AddSparks(DVector vPos, DVector vNormal, DFLOAT fDamage, HOBJECT hObject);

	private:

		void	Save(HMESSAGEWRITE hWrite, DDWORD dwSaveFlags);
		void	Load(HMESSAGEREAD hWrite, DDWORD dwLoadFlags);

	protected:
		// Member Variables

		CDestructable	m_damage;

		char*			m_pProjectileFilename;
		char*			m_pProjectileSkin;

		DBYTE			m_nWeaponType;			// Type of the weapon that fired this, for SFX
		DVector			m_vDir;					// What direction our we moving
		DVector			m_vInitScale;			// Initial scale for the object
		DFLOAT			m_fVelocity;			// What is our velocity
		DDWORD			m_dwFlags;				// Model flags

		DBYTE			m_nDamageType;
		HOBJECT			m_hFiredFrom;			// Who fired us
		HOBJECT			m_hSmokeTrail;
		int				m_nRadius;				// What is our damage radius
		DFLOAT			m_fStartTime;			// When did we start
		DBOOL			m_bRemoveFromWorld;		// Should we be removed?
		DFLOAT			m_fDamage;				// How much damage do we do
		DFLOAT			m_fLifeTime;			// How long do we stay around
		DDWORD			m_nDamageMsgID;			// Message to send for damage, MID_DAMAGE default

		DBOOL			m_bSmokeTrail;			// Do we generate a smoke trail

		DBOOL			m_bShockwave;			// Do we generate a shockwave
		DBOOL			m_bExplosion;			// Do we generate an explosion?
		DBOOL			m_bSparks;				// Do we generate sparks on impact?
		DBOOL			m_bClientFX;			// Do we generate client fx?
		DVector			m_vShockwaveScaleMin;	// Minimum shockwave size
		DVector			m_vShockwaveScaleMax;	// Maximum shockwave size
		DVector			m_vLightColor;			// Color for dynamic light and explosion
		DFLOAT			m_fShockwaveDuration;	// Length of shockwave
		HSTRING			m_hstrShockwaveFilename;	// Name of shockwave  file

		DFLOAT			m_fImpactScaleMin;		// Minimum impact sprite size
		DFLOAT			m_fImpactScaleMax;		// Maximum impact sprite size
		DFLOAT			m_fImpactDuration;		// Duration of impact
		DVector			m_vDims;				// Dimensions of the projectile
		HOBJECT			m_hLight;				// To light the way..
		DBOOL			m_bExplode;				// Explode on the next update
		HOBJECT			m_hHitObject;			// Object we hit

		HSOUNDDE		m_hSound;				// Sound to follow the projectile

		DDWORD			m_dwClientID;			// Client ID of owner (zero if not a player)

		// Various object specific members
		// I put them here so I didn't have to write Save/Load functions for each one.
		// GK
		DVector m_LastPos;
		DBOOL	m_bArmed;
		DFLOAT	m_fPitchVel;
		DFLOAT	m_fYawVel;
		DFLOAT	m_fPitch;
		DFLOAT	m_fYaw;

		// Particle trail variables
		DVector	m_vTrailOffset;
		DFLOAT	m_fTrailScale;
		DDWORD	m_dwTrailScaleFlags;
		DDWORD	m_dwTrailFXID;
		DDWORD	m_dwTrailFXFlags;
};


#endif //  __PROJECTILE_H__

⌨️ 快捷键说明

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