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

📄 gameprojectiles.h

📁 Blood 2全套源码
💻 H
📖 第 1 页 / 共 2 页
字号:
// ----------------------------------------------------------------------- //

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

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

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

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

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

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

#define		TESLABALL_ATTRACT_MIN		100.0f
#define		TESLABALL_ATTRACT_MAX		400.0f
#define		TESLABALL_ATTRACT_RANGE		(TESLABALL_ATTRACT_MAX - TESLABALL_ATTRACT_MIN)
#define		TESLABALL_ATTRACT_TIME		2.5f
#define		TESLABALL_ATTRACT_DELAY		0.5f

#define		TESLABOLT_DAMAGE			100.0f
#define		TESLABOLT_DAMAGERADIUS		100.0f

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

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

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

		DFLOAT		m_fAttractRadius;
		DFLOAT		m_fStartTime;
		DFLOAT		m_fLastFireTime;
		HOBJECT		m_hLastObj;
};

// ----------------------------------------------------------------------- //
// Singularity projectile
// ----------------------------------------------------------------------- //

#define		SINGULARITY_ATTRACT_RADIUS		600.0f
#define		SINGULARITY_ATTRACT_ALT_RADIUS	350.0f
#define		SINGULARITY_KILL_RADIUS			50.0f
#define		SINGULARITY_ATTRACT_TIME		5.0f
#define		SINGULARITY_MAX_DAMAGE			1000.0f

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

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

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

		DFLOAT		m_fStartTime;
};

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

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

	protected:
		virtual DBOOL	Update(DVector *pMovement);

		DFLOAT		m_fStartTime;
};

// ----------------------------------------------------------------------- //
// Energy blast projectile
// ----------------------------------------------------------------------- //

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

		void Setup(DVector *vDir, DBYTE nType, DFLOAT fDamage, DFLOAT fVelocity,
					int nRadius, HOBJECT hFiredFrom);

	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;

		DBOOL		m_bZealot;
		DBOOL		m_bDivine;
};

// ----------------------------------------------------------------------- //
// Fireball projectile
// ----------------------------------------------------------------------- //

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

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

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;
};

// ----------------------------------------------------------------------- //
// Groundstrike projectile
// ----------------------------------------------------------------------- //

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

	protected:
		virtual DBOOL Update(DVector *pMovement);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;
};


// ----------------------------------------------------------------------- //
// Shockwave projectile
// ----------------------------------------------------------------------- //

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

// ----------------------------------------------------------------------- //
// Behemoth Shockwave projectile
// ----------------------------------------------------------------------- //

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

// ----------------------------------------------------------------------- //
// Shikari acid loogie of death
// ----------------------------------------------------------------------- //

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

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

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
		DVector		m_vColor;
};

// ----------------------------------------------------------------------- //
// Naga back spike
// ----------------------------------------------------------------------- //

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

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

// ----------------------------------------------------------------------- //
// Naga ceiling debris / shockwave
// ----------------------------------------------------------------------- //

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

// ----------------------------------------------------------------------- //
// Undead Gideon projectile vomit!
// ----------------------------------------------------------------------- //

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

	protected:
		virtual DBOOL Update(DVector *pMovement);

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// Undead Gideon goo spit
// ----------------------------------------------------------------------- //

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

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

		DFLOAT		m_fStartTime;
		DFLOAT		m_fDelay;
};

// ----------------------------------------------------------------------- //
// The Skull Primary Projectile
// ----------------------------------------------------------------------- //

#define		SKULL_DETECT_RADIUS			200.0f
#define		SKULL_ATTACH_RANGE			15.0f
#define		SKULL_HEAD_OFFSET			7.5f

#define		SKULL_STATE_TRACKING		0

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

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

	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;
};

#ifdef _ADD_ON

// ----------------------------------------------------------------------- //
// The Flayer Primary Projectile
// ----------------------------------------------------------------------- //

#define		FLAYER_STATE_TRACKING		0
#define		FLAYER_STATE_ATTACHED		1
#define		FLAYER_STATE_RETRACT		2

#define		FLAYER_RETRACT_TIME			1.5f

#define		FLAYER_DAMAGE_INTERVAL		1.0f
#define		FLAYER_TRAP_TIME			8.0f

#define		FLAYER_WIGGLE_VALUES		32

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

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

		virtual void BreakLink(HOBJECT hObj);

		void	SetTarget(HOBJECT hObj)
		{
			if(m_bState == FLAYER_STATE_TRACKING)
			{
				CServerDE* pServerDE = BaseClass::GetServerDE();
				if (!pServerDE) return;
				m_hTrackObj = hObj;
				pServerDE->CreateInterObjectLink(m_hObject, m_hTrackObj);
			}
		}

		void	ReleaseChain();


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

	private:
		void			TrackObject();
		void			AdjustVelocity();
		DBOOL			DamageAttached();
		void			HandleAttachedEffects();
		void			CreateAttachedGIB();
		void			DeleteAttachedGIB();

	private:
		HOBJECT		m_hTrackObj;
		DFLOAT		m_fHitTime;
		DFLOAT		m_fLastDamageTime;
		DFLOAT		m_fRetractTime;
		DBOOL		m_bState;

		DVector		m_vHookPos1;
		DVector		m_vHookPos2;

		DBYTE		m_byNumLinks;
		DFLOAT		m_fScale;
		DFLOAT		m_fStretchedLength;

		HATTACHMENT	m_hGibAttachment;
		BaseClass	*m_hGibObj;

		DBOOL		m_bFirstUpdate;
};

// ----------------------------------------------------------------------- //
// The Flayer Alt Projectile
// ----------------------------------------------------------------------- //

#define		FLAYER_ALT_SEARCH_RANGE		800.0f
#define		FLAYER_ALT_SEARCH_TIME		20.0f

#define		FLAYER_ALT_CHAIN_INTERVAL	2.0f

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

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

	protected:
		virtual DBOOL	InitialUpdate(DVector* vec);
		virtual DBOOL	Update(DVector *pMovement);

	private:
		DFLOAT		m_fSearchTime;
		DFLOAT		m_fLastChainTime;
};

// ----------------------------------------------------------------------- //
// The Gremlin Rock Projectile
// ----------------------------------------------------------------------- //

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

	protected:
		virtual DBOOL	Update(DVector *pMovement);
		virtual void	HandleTouch(HOBJECT hObj);

	private:
		DFLOAT		m_fFadeTime;
		int			m_nBounceCount;
};

// ----------------------------------------------------------------------- //
// The Nightmare Fireballs Projectile
// ----------------------------------------------------------------------- //

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

		virtual void BreakLink(HOBJECT hObj);

		void	SetTarget(HOBJECT hObj)
		{
			CServerDE* pServerDE = BaseClass::GetServerDE();
			if (!pServerDE) return;
			m_hTrackObj = hObj;
			pServerDE->CreateInterObjectLink(m_hObject, m_hTrackObj);
		}

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

	private:
		void			TrackObject();
		void			TrackLocation();
		void			AdjustVelocity();

	private:
		HOBJECT		m_hTrackObj;
		DVector		m_vHitLocation;
};

#endif

#endif //  __GAMEPROJECTILES_H__

⌨️ 快捷键说明

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