📄 projectile.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 + -