📄 gameprojectiles.h
字号:
// ----------------------------------------------------------------------- //
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 + -