diff options
Diffstat (limited to 'game/server/hl1_CBaseHelicopter.h')
| -rw-r--r-- | game/server/hl1_CBaseHelicopter.h | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/game/server/hl1_CBaseHelicopter.h b/game/server/hl1_CBaseHelicopter.h new file mode 100644 index 0000000..0158612 --- /dev/null +++ b/game/server/hl1_CBaseHelicopter.h @@ -0,0 +1,136 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +//--------------------------------------------------------- +// Helicopter flags +//--------------------------------------------------------- +enum HelicopterFlags_t +{ + BITS_HELICOPTER_GUN_ON = 0x00000001, // Gun is on and aiming + BITS_HELICOPTER_MISSILE_ON = 0x00000002, // Missile turrets are on and aiming +}; + + +//--------------------------------------------------------- +//--------------------------------------------------------- + +#define SF_NOWRECKAGE 0x08 +#define SF_NOROTORWASH 0x20 +#define SF_AWAITINPUT 0x40 + + +//--------------------------------------------------------- +//--------------------------------------------------------- +#define BASECHOPPER_MAX_SPEED 400.0f +#define BASECHOPPER_MAX_FIRING_SPEED 250.0f +#define BASECHOPPER_MIN_ROCKET_DIST 1000.0f +#define BASECHOPPER_MAX_GUN_DIST 2000.0f + + +//========================================================= +//========================================================= +class CBaseHelicopter : public CAI_BaseNPC +{ +public: + DECLARE_CLASS( CBaseHelicopter, CAI_BaseNPC ); + + DECLARE_DATADESC(); + DECLARE_SERVERCLASS(); + + void Spawn( void ); + void Precache( void ); + + void Event_Killed( const CTakeDamageInfo &info ); + void StopLoopingSounds(); + + int BloodColor( void ) { return DONT_BLEED; } + void GibMonster( void ); + + Class_T Classify ( void ) { return CLASS_HUMAN_MILITARY; } + + void CallDyingThink( void ) { DyingThink(); } + + bool HasEnemy( void ) { return GetEnemy() != NULL; } + void CheckEnemy( CBaseEntity *pEnemy ); + virtual bool ChooseEnemy( void ); + virtual void HelicopterThink( void ); + virtual void HelicopterPostThink( void ) { }; + virtual void FlyTouch( CBaseEntity *pOther ); + virtual void CrashTouch( CBaseEntity *pOther ); + virtual void DyingThink( void ); + virtual void Startup( void ); + virtual void NullThink( void ); + + virtual void Flight( void ); + + virtual void ShowDamage( void ) {}; + + virtual void FlyPathCorners( void ); + void UpdatePlayerDopplerShift( void ); + + virtual void Hunt( void ); + + virtual bool IsCrashing( void ) { return m_lifeState != LIFE_ALIVE; } + virtual float GetAcceleration( void ) { return 5; } + virtual bool HasReachedTarget( void ); + virtual void OnReachedTarget( CBaseEntity *pTarget ) {}; + + virtual void ApplySidewaysDrag( const Vector &vecRight ); + virtual void ApplyGeneralDrag( void ); + + + int OnTakeDamage_Alive( const CTakeDamageInfo &info ); + void TraceAttack( const CTakeDamageInfo &info, const Vector &vecDir, trace_t *ptr, CDmgAccumulator *pAccumulator ); + + virtual bool FireGun( void ); + + virtual float GetRotorVolume( void ) { return 1.0; } + virtual void InitializeRotorSound( void ); + virtual void UpdateRotorSoundPitch( int iPitch ); + + virtual void AimRocketGun(void) {}; + virtual void FireRocket( Vector vLaunchPos, Vector vLaunchDir ) {}; + + void DrawDebugGeometryOverlays(void); + + CSoundPatch *m_pRotorSound; + + float m_flForce; + int m_fHelicopterFlags; + + Vector m_vecDesiredFaceDir; + Vector m_vecDesiredPosition; + + Vector m_vecGoalOrientation; // orientation of the goal entity. + + float m_flLastSeen; + float m_flPrevSeen; + + int m_iSoundState; // don't save this + + Vector m_vecTarget; + Vector m_vecTargetPosition; + + float m_flMaxSpeed; // Maximum speed of the helicopter. + float m_flMaxSpeedFiring; // Maximum speed of the helicopter whilst firing guns. + + float m_flGoalSpeed; // Goal speed + float m_flInitialSpeed; + float m_angleVelocity; + + void ChangePathCorner( const char *pszName ); + + // Inputs + void InputChangePathCorner( inputdata_t &inputdata ); + void InputActivate( inputdata_t &inputdata ); + + // Outputs + COutputEvent m_AtTarget; // Fired when pathcorner has been reached + COutputEvent m_LeaveTarget; // Fired when pathcorner is left + + float m_flNextCrashExplosion; +};
\ No newline at end of file |