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

📄 gameprojectiles.h

📁 Blood 2全套源码
💻 H
📖 第 1 页 / 共 2 页
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : GameProjectiles.h
//
// PURPOSE : GameProjectiles class - definition
//
// CREATED : 10/3/97
//
// ----------------------------------------------------------------------- //

#ifndef __GAMEPROJECTILES_H__
#define __GAMEPROJECTILES_H__

#include "Projectile.h"

// ----------------------------------------------------------------------- //
// Standard grenades
// ----------------------------------------------------------------------- //

class CGrenade : public CProjectile
{
	public :
		CGrenade();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void  HandleTouch(HOBJECT hObj);
	
	private:
		int			m_nBounceCount;
};

#ifdef _ADD_ON

// ----------------------------------------------------------------------- //
// Gas grenades
// ----------------------------------------------------------------------- //

#define		GAS_GRENADE_SMOKE_TIME		10.0f
#define		GAS_GRENADE_DAMAGE_DIST		200.0f
#define		GAS_GRENADE_MAX_DAMAGE		3.0f
#define		GAS_GRENADE_DAMAGE_DELAY	0.5f

class CGasGrenade : public CProjectile
{
	public :
		CGasGrenade();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void  HandleTouch(HOBJECT hObj);
		virtual void  AddExplosion(DVector vPos, DVector vNormal);
	
	private:
		void	DamageAndWonky(DFLOAT fWonkyTime);

		DBOOL		m_bSmoking;
		DFLOAT		m_fSmokeTime;
		int			m_nBounceCount;
		DFLOAT		m_fLastWonkyTime;
};

#endif

#ifndef _DEMO // [gjk] 10/28 disable for demo

// ----------------------------------------------------------------------- //
// Time bomb
// ----------------------------------------------------------------------- //

class CTimeBomb : public CProjectile
{
	public :
		CTimeBomb();

	protected:
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);
		virtual void	AddExplosion(DVector vPos, DVector vNormal);
	
	private:
		float	m_fTimeDelay;
};


// ----------------------------------------------------------------------- //
// Proximity bomb
// ----------------------------------------------------------------------- //

class CProximityBomb : public CProjectile
{
	public :
		CProximityBomb();

	protected:
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);
		virtual void	AddExplosion(DVector vPos, DVector vNormal);
	
	private:
		float	m_fDetectRadius;
		float	m_fGetAwayTime;
		float	m_fExplodeDelay;
		DBOOL	m_bHitCharacter;
		DBOOL	m_bPlayArmSound;
		DBOOL	m_bPlayDetectSound;
};

// ----------------------------------------------------------------------- //
// Remote bomb
// ----------------------------------------------------------------------- //

class CRemoteBomb : public CProjectile
{
	public :
		CRemoteBomb();
		void	Detonate()		{ m_bExplode = DTRUE; }

	protected:
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);
		virtual void	AddExplosion(DVector vPos, DVector vNormal);
	
	private:
		DBOOL	m_bFalling;
};

#endif // _DEMO

// ----------------------------------------------------------------------- //
// Howitzer projectile
// ----------------------------------------------------------------------- //

class CHowitzerShell : public CProjectile
{
	public :
		CHowitzerShell();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);
};

// ----------------------------------------------------------------------- //
// Howitzer Alt projectile
// ----------------------------------------------------------------------- //

class CHowitzerAltShell : public CProjectile
{
	public :
		CHowitzerAltShell();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);
};

// ----------------------------------------------------------------------- //
// Howitzer Alt Fragment projectile
// ----------------------------------------------------------------------- //

class CHowitzerAltFrag : public CProjectile
{
	public :
		CHowitzerAltFrag();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void HandleTouch(HOBJECT hObj);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DVector		tempNorm;
};

// ----------------------------------------------------------------------- //
// Napalm Primary Fire Projectile
// ----------------------------------------------------------------------- //

class CNapalmProjectile : public CProjectile
{
	public :
		CNapalmProjectile();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// Napalm Alt Fire Projectile
// ----------------------------------------------------------------------- //

class CNapalmAltProjectile : public CProjectile
{
	public :
		CNapalmAltProjectile();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// Napalm Alt Fireball Projectile
// ----------------------------------------------------------------------- //

class CNapalmFireball : public CProjectile
{
	public :
		CNapalmFireball();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void HandleTouch(HOBJECT hObj);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DBYTE		m_nBounces;
};

// ----------------------------------------------------------------------- //
// Bug spray primary
// ----------------------------------------------------------------------- //

class CBugSprayProjectile : public CProjectile
{
	public :
		CBugSprayProjectile();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// Bug spray alt
// ----------------------------------------------------------------------- //

class CBugSprayAltProjectile : public CProjectile
{
	public :
		CBugSprayAltProjectile();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// Death ray primary
// ----------------------------------------------------------------------- //

#define		DEATHRAY_BOUNCE_DIST		1500.0f
#define		DEATHRAY_BOUNCE_DELAY		0.1f

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

class CDeathRayProjectile : public CProjectile
{
	public :
		CDeathRayProjectile();

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fBounceDist;
		DVector		m_vBeamDir;
		DBOOL		m_bFirstUpdate;
		DBOOL		m_bFirstShot;
};

// ----------------------------------------------------------------------- //
// Life Leech primary fire projectile
// ----------------------------------------------------------------------- //

class CLeechPrimeProjectile : public CProjectile
{
	public :
		CLeechPrimeProjectile();
	protected:
		virtual DBOOL InitialUpdate(DVector* vec);
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;

		DFLOAT		m_fCurve;
		DFLOAT		m_fAmp;
};

// ----------------------------------------------------------------------- //
// Life Leech alt fire explosion
// ----------------------------------------------------------------------- //

#define		LIFELEECH_PUSH_RADIUS		450.0f
#define		LIFELEECH_ROTATE_AMOUNT		0.2f

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

class CLeechAltProjectile : public CProjectile
{
	public :
		CLeechAltProjectile();
	protected:
		virtual DBOOL Update(DVector *pMovement);
};

// ----------------------------------------------------------------------- //
// Flares
// ----------------------------------------------------------------------- //

class CFlareProjectile : public CProjectile
{
	public :
		CFlareProjectile();
	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void HandleTouch(HOBJECT hObj);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DVector		m_vObjOffset;
		DBOOL		m_bTrackObj;

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;

		DFLOAT		m_fLastDamageTime;
		DFLOAT		m_fDamageTime;
		int			m_nColor;
};

// ----------------------------------------------------------------------- //
// Burst flares
// ----------------------------------------------------------------------- //

class CFlareAltProjectile : public CProjectile
{
	public :
		CFlareAltProjectile();
	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fBurstTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;
		DVector		m_vVel;
		DDWORD		m_nExpType;
		DBOOL		m_bGetVelocity;
};

// ----------------------------------------------------------------------- //
// Flare burst fragments
// ----------------------------------------------------------------------- //

class CFlareBurstProjectile : public CProjectile
{
	public :
		CFlareBurstProjectile();
		void	SetColor(DVector *vColor);

	protected:
		virtual DBOOL Update(DVector *pMovement);
		virtual void AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fStartTime;
		DVector		m_vColor;
};

// ----------------------------------------------------------------------- //
// The Orb Primary Projectile
// ----------------------------------------------------------------------- //

#define		THEORB_DETECT_RADIUS		175.0f
#define		THEORB_ATTACH_RANGE			15.0f
#define		THEORB_ATTACH_RANGE_ALT		45.0f
#define		THEORB_DAMAGE_TIME			5.1f
#define		THEORB_DAMAGE_DELAY			1.0f
#define		THEORB_HEAD_OFFSET			7.5f

#define		THEORB_STATE_TRACKING		0
#define		THEORB_STATE_ATTACHED		1

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

class COrbProjectile : public CProjectile
{
	public :
		COrbProjectile();

	protected:
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);
		virtual void	AddExplosion(DVector vPos, DVector vNormal);

		HOBJECT			FindTrackObj();
		void			TrackObjInRange();

		HOBJECT		m_hTrackObj;
		DFLOAT		m_fRotateAmount;
		DFLOAT		m_fHitTime;
		DFLOAT		m_fLastDamageTime;
		DBOOL		m_bState;
};

// ----------------------------------------------------------------------- //
// The Orb Alt Projectile
// ----------------------------------------------------------------------- //

class COrbAltProjectile : public CProjectile
{
	public :
		COrbAltProjectile();

	protected:
		virtual DBOOL	InitialUpdate(DVector* pMovement);
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);
		virtual void	AddExplosion(DVector vPos, DVector vNormal);

		DFLOAT		m_fHitTime;
		DFLOAT		m_fLastDamageTime;
		DBOOL		m_bState;
		DBOOL		m_bSwitchView;
		DBOOL		m_bCreateCamera;
};

// ----------------------------------------------------------------------- //
// Tesla projectile

⌨️ 快捷键说明

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