//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Projectile shot by city scanner // // $Workfile: $ // $Date: $ // $NoKeywords: $ //=============================================================================// #ifndef GRENADEHOMER_H #define GRENADEHOMER_H #ifdef _WIN32 #pragma once #endif #include "basegrenade_shared.h" #include "weapon_rpg.h" enum HomerRocketTrail_t { HOMER_SMOKE_TRAIL_OFF, // No smoke trail HOMER_SMOKE_TRAIL_ON, // Smoke trail always on HOMER_SMOKE_TRAIL_ON_HOMING, // Smoke trail on when homing turned on HOMER_SMOKE_TRAIL_ALIEN, // Alien colors on smoke trail }; class CGrenadeHomer : public CBaseGrenade { public: DECLARE_CLASS( CGrenadeHomer, CBaseGrenade ); static CGrenadeHomer* CreateGrenadeHomer( string_t nModelName, string_t sFlySound, const Vector &vecOrigin, const QAngle &vecAngles, edict_t *pentOwner ); virtual void Precache( void ); void Spawn( void ); void Launch( CBaseEntity *pOwner, CBaseEntity *pTarget, const Vector &vInitVelocity, float m_flHomingSpeed, float fFallSpeed, int nRocketTrailType); void SetSpin(float flSpinMagnitude, float flSpinSpeed); void SetHoming(float flStrength, float flDelay, float flRampUp, float flDuration, float flRampDown); CHandle m_hRocketTrail[3]; private: string_t m_sFlySound; float m_flNextFlySoundTime; // Input Parameters float m_flHomingStrength; float m_flHomingDelay; // How long before homing starts float m_flHomingRampUp; // How long it take to reach full strength float m_flHomingDuration; // How long does homing last float m_flHomingRampDown; // How long to reach no homing again float m_flHomingSpeed; float m_flSpinMagnitude; float m_flSpinSpeed; int m_nRocketTrailType; int m_spriteTexture; // In flight data float m_flHomingLaunchTime; float m_flHomingStartTime; float m_flHomingEndTime; float m_flSpinOffset; // For randomization EHANDLE m_hTarget; void AimThink( void ); void StartRocketTrail(void); void UpdateRocketTrail(float fScale); void StopRocketTrail(void); void PlayFlySound( void ); void GrenadeHomerTouch( CBaseEntity *pOther ); void Event_Killed( const CTakeDamageInfo &info ); int OnTakeDamage( const CTakeDamageInfo &info ); public: void EXPORT Detonate(void); CGrenadeHomer(void); DECLARE_DATADESC(); }; #endif //GRENADEHOMER_H