diff options
Diffstat (limited to 'mp/src/game/server/hl2/func_tank.h')
| -rw-r--r-- | mp/src/game/server/hl2/func_tank.h | 704 |
1 files changed, 352 insertions, 352 deletions
diff --git a/mp/src/game/server/hl2/func_tank.h b/mp/src/game/server/hl2/func_tank.h index 8dc2415d..46b444d5 100644 --- a/mp/src/game/server/hl2/func_tank.h +++ b/mp/src/game/server/hl2/func_tank.h @@ -1,353 +1,353 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-//=============================================================================//
-
-#ifndef FUNC_TANK_H
-#define FUNC_TANK_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "triggers.h"
-
-#define SF_TANK_ACTIVE 0x0001
-#define SF_TANK_PLAYER 0x0002
-#define SF_TANK_HUMANS 0x0004
-#define SF_TANK_ALIENS 0x0008
-#define SF_TANK_LINEOFSIGHT 0x0010
-#define SF_TANK_CANCONTROL 0x0020
-#define SF_TANK_DAMAGE_KICK 0x0040 // Kick when take damage
-#define SF_TANK_AIM_AT_POS 0x0080 // Aim at a particular position
-#define SF_TANK_AIM_ASSISTANCE 0x0100
-#define SF_TANK_NPC 0x0200
-#define SF_TANK_NPC_CONTROLLABLE 0x0400 // 1024
-#define SF_TANK_NPC_SET_CONTROLLER 0x0800 // 2048
-#define SF_TANK_ALLOW_PLAYER_HITS 0x1000 // 4096 Allow friendly NPCs to fire upon enemies near the player
-#define SF_TANK_IGNORE_RANGE_IN_VIEWCONE 0x2000 // 8192 Don't use range as a factor in determining if something is in view cone
-#define SF_TANK_NOTSOLID 0x8000 // 32768
-#define SF_TANK_SOUNDON 0x10000 // FIXME: This is not really a spawnflag! It holds transient state!!!
-#define SF_TANK_HACKPLAYERHIT 0x20000 // 131072 Make this func_tank cheat and hit the player regularly
-
-#define FUNCTANK_DISTANCE_MAX 1200 // 100 ft.
-#define FUNCTANK_DISTANCE_MIN_TO_ENEMY 180
-#define FUNCTANK_FIREVOLUME 1000
-#define FUNCTANK_NPC_ROUTE_TIME 5.0f
-
-// Effect handling
-// If the func_tank has a chosen method of handling effects, use that
-// instead of the individual effect settings. (muzzleflash, sound, tracer, etc)
-enum FUNCTANK_EFFECT_HANDLING
-{
- EH_NONE, // Use the effect settings
- EH_AR2, // Use AR2 effects
- EH_COMBINE_CANNON // Large Combine cannon
-};
-
-enum TANKBULLET
-{
- TANK_BULLET_NONE = 0,
- TANK_BULLET_SMALL = 1,
- TANK_BULLET_MEDIUM = 2,
- TANK_BULLET_LARGE = 3,
-};
-
-#define MORTAR_BLAST_RADIUS 350
-
-
-// Custom damage
-// env_laser (duration is 0.5 rate of fire)
-// rockets
-// explosion?
-
-class CFuncTank : public CBaseEntity
-{
-
- DECLARE_CLASS( CFuncTank, CBaseEntity );
-
-public:
-
- CFuncTank();
- ~CFuncTank();
- void Spawn( void );
- void Activate( void );
- void Precache( void );
- bool CreateVPhysics( void );
- bool KeyValue( const char *szKeyName, const char *szValue );
- void UpdateOnRemove();
-
- void SetYawRate( float flYawRate ) { m_yawRate = flYawRate; }
- void SetPitchRate( float flPitchRate ) { m_pitchRate = flPitchRate; }
-
- int ObjectCaps( void )
- {
- return ( BaseClass::ObjectCaps() | FCAP_IMPULSE_USE | FCAP_USE_IN_RADIUS );
- }
-
- void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value );
-
- virtual void FuncTankPreThink() { return; }
- void Think( void );
- virtual void FuncTankPostThink() { return; }
-
- int GetAmmoCount( void ) { return m_iAmmoCount; }
-
- // NPC
- bool NPC_FindManPoint( Vector &vecPos );
- bool NPC_HasEnemy( void );
- void NPC_Fire( void );
- void NPC_InterruptRoute( void );
- void NPC_JustSawPlayer( CBaseEntity *pTarget );
- void NPC_SetInRoute( bool bInRoute ) { m_bNPCInRoute = bInRoute; }
- void NPC_SetIdleAngle( Vector vecIdle ) { m_vecNPCIdleTarget = vecIdle; }
-
- // LOS
- bool IsEntityInViewCone( CBaseEntity *pEntity );
- bool HasLOSTo( CBaseEntity *pEntity );
-
- // Controller
- CBaseCombatCharacter *GetController( void );
- bool StartControl( CBaseCombatCharacter *pController );
- void StopControl( void );
- Vector GetTargetPosition() { return m_vTargetPosition; }
- void SetTargetPosition( const Vector &vecPos ) { m_vTargetPosition = vecPos; }
-
- const float YawCenter() const { return m_yawCenter; }
- const float YawCenterWorld() const { return m_yawCenterWorld; }
- const float YawRange() const { return m_yawRange; }
- const float PitchCenter() const { return m_pitchCenter; }
- const float PitchCenterWorld() const { return m_pitchCenterWorld; }
- const float PitchRange() const { return m_pitchRange; }
-
- virtual void PhysicsSimulate( void );
-
- virtual void OnStartControlled() {}
- virtual void OnStopControlled() {}
-
- // SF Tests.
- inline bool IsControllable( void ) { return ( m_spawnflags & SF_TANK_CANCONTROL ) ? true : false; }
- inline bool IsActive( void ) { return ( m_spawnflags & SF_TANK_ACTIVE ) ? true : false; }
- inline bool IsNPCControllable( void ) { return ( m_spawnflags & SF_TANK_NPC_CONTROLLABLE ) ? true : false; }
- inline bool IsNPCSetController( void ) { return ( m_spawnflags & SF_TANK_NPC_SET_CONTROLLER ) ? true : false; }
-
- virtual void DoMuzzleFlash( void );
- virtual const char *GetTracerType( void );
-
-protected:
- virtual float GetShotSpeed() { return 0; }
-
- virtual Vector WorldBarrelPosition( void );
- void UpdateMatrix( void );
-
- float GetNextAttack() const { return m_flNextAttack; }
- virtual void SetNextAttack( float flWait ) { m_flNextAttack = flWait; }
-
- virtual void Fire( int bulletCount, const Vector &barrelEnd, const Vector &forward, CBaseEntity *pAttacker, bool bIgnoreSpread );
- void TankTrace( const Vector &vecStart, const Vector &vecForward, const Vector &vecSpread, trace_t &tr );
- int GetRandomBurst( void );
- float GetRandomFireTime( void );
-
- void CalcPlayerCrosshairTarget( Vector *pVecTarget );
- void CalcNPCEnemyTarget( Vector *pVecTarget );
-
- inline bool IsPlayerManned( void ) { return m_hController && m_hController->IsPlayer() && ( m_spawnflags & SF_TANK_PLAYER ); }
- inline bool IsNPCManned( void ) { return m_hController && m_hController->MyNPCPointer() && ( m_spawnflags & SF_TANK_NPC ); }
-
-private:
- void TrackTarget( void );
- int DrawDebugTextOverlays(void);
- void DrawDebugGeometryOverlays(void);
-
- virtual void FiringSequence( const Vector &barrelEnd, const Vector &forward, CBaseEntity *pAttacker );
-
- void StartRotSound( void );
- void StopRotSound( void );
-
- // Input handlers.
- void InputActivate( inputdata_t &inputdata );
- void InputDeactivate( inputdata_t &inputdata );
- void InputSetFireRate( inputdata_t &inputdata );
- void InputSetDamage( inputdata_t &inputdata );
- void InputSetTargetDir( inputdata_t &inputdata );
- void InputSetTargetPosition( inputdata_t &inputdata );
- void InputSetTargetEntityName( inputdata_t &inputdata );
-
-protected:
- virtual void InputSetTargetEntity( inputdata_t &inputdata );
- virtual void InputClearTargetEntity( inputdata_t &inputdata );
-
-private:
- void InputFindNPCToManTank( inputdata_t &inputdata );
- void InputStopFindingNPCs( inputdata_t &inputdata );
- void InputStartFindingNPCs( inputdata_t &inputdata );
- void InputForceNPCOff( inputdata_t &inputdata );
- void InputSetMaxRange( inputdata_t &inputdata );
-
- inline bool CanFire( void );
- bool InRange( float range );
- bool InRange2( float flRange2 );
-
- void TraceAttack( CBaseEntity *pAttacker, float flDamage, const Vector &vecDir, trace_t *ptr, int bitsDamageType);
-
- QAngle AimBarrelAt( const Vector &parentTarget );
-
- DECLARE_DATADESC();
-
- bool OnControls( CBaseEntity *pTest );
- bool HasController( void );
-
- CBaseEntity *FindTarget( string_t targetName, CBaseEntity *pActivator );
-
- // NPC
- void NPC_FindController( void );
- bool NPC_InRoute( void ) { return m_bNPCInRoute; }
- bool NPC_InterruptController( void );
-
- // Aim the tank at the player crosshair
- void AimBarrelAtPlayerCrosshair( QAngle *pAngles );
-
- // Aim the tank at the NPC's enemy
- void AimBarrelAtNPCEnemy( QAngle *pAngles );
-
- // Aim the tank at the func_tank's enemy
- void AimFuncTankAtTarget( void );
-
- // Returns true if the desired angles are out of range
- bool RotateTankToAngles( const QAngle &angles, float *pDistX = NULL, float *pDistY = NULL );
-
- // We lost our target!
- void LostTarget( void );
-
- // Purpose:
- void ComputeLeadingPosition( const Vector &vecShootPosition, CBaseEntity *pTarget, Vector *pLeadPosition );
-
-protected:
- virtual void ControllerPostFrame( void );
-
- virtual void TankActivate(void);
- virtual void TankDeactivate(void);
-
- float m_fireLast; // Last time I fired
- float m_fireRate; // How many rounds/second
-
- EHANDLE m_hTarget;
-
- TANKBULLET m_bulletType; // Bullet type
- int m_iBulletDamage; // 0 means use Bullet type's default damage
- int m_iBulletDamageVsPlayer; // Damage vs player. 0 means use m_iBulletDamage
-
-#ifdef HL2_EPISODIC
- string_t m_iszAmmoType; // The name of the ammodef that we use when we fire. Bullet damage still comes from keyvalues.
- int m_iAmmoType; // The cached index of the ammodef that we use when we fire.
-#else
- int m_iSmallAmmoType;
- int m_iMediumAmmoType;
- int m_iLargeAmmoType;
-#endif // HL2_EPISODIC
-
- int m_spread; // firing spread
-
- EntityMatrix m_parentMatrix;
-
- Vector m_sightOrigin; // Last sight of target
- EHANDLE m_hFuncTankTarget;
-
- int m_nBulletCount;
-
-private:
-
- // This is either the player manning the func_tank, or an NPC. The NPC is either manning the tank, or running
- // to the man point. If he's en-route, m_bNPCInRoute will be true.
- CHandle<CBaseCombatCharacter> m_hController;
-
- float m_flNextAttack;
- Vector m_vecControllerUsePos;
-
- float m_yawCenter; // "Center" yaw
- float m_yawCenterWorld; // "Center" yaw in world space
- float m_yawRate; // Max turn rate to track targets
- float m_yawRange; // Range of turning motion (one-sided: 30 is +/- 30 degress from center)
- // Zero is full rotation
- float m_yawTolerance; // Tolerance angle
-
- float m_pitchCenter; // "Center" pitch
- float m_pitchCenterWorld; // "Center" pitch in world space
- float m_pitchRate; // Max turn rate on pitch
- float m_pitchRange; // Range of pitch motion as above
- float m_pitchTolerance; // Tolerance angle
-
- float m_fireTime; // How much time has been used to fire the weapon so far.
- float m_lastSightTime;// Last time I saw target
- float m_persist; // Persistence of firing (how long do I shoot when I can't see)
- float m_persist2; // Secondary persistence of firing (randomly shooting when I can't see)
- float m_persist2burst;// How long secondary persistence burst lasts
- float m_minRange; // Minimum range to aim/track
- float m_maxRange; // Max range to aim/track
- float m_flMinRange2;
- float m_flMaxRange2;
- int m_iAmmoCount; // ammo
-
- Vector m_barrelPos; // Length of the freakin barrel
- float m_spriteScale; // Scale of any sprites we shoot
- string_t m_iszSpriteSmoke;
- string_t m_iszSpriteFlash;
-
- string_t m_iszMaster; // Master entity (game_team_master or multisource)
-
- string_t m_soundStartRotate;
- string_t m_soundStopRotate;
- string_t m_soundLoopRotate;
-
- float m_flPlayerGracePeriod;
- float m_flIgnoreGraceUpto;
- float m_flPlayerLockTimeBeforeFire;
- float m_flLastSawNonPlayer;
-
- string_t m_targetEntityName;
- Vector m_vTargetPosition;
- Vector m_vecNPCIdleTarget;
-
- // Used for when the gun is attached to another entity
- string_t m_iszBarrelAttachment;
- int m_nBarrelAttachment;
- string_t m_iszBaseAttachment;
-
- // Used when the gun is actually a part of the parent entity, and pose params aim it
- string_t m_iszYawPoseParam;
- string_t m_iszPitchPoseParam;
- float m_flYawPoseCenter;
- float m_flPitchPoseCenter;
- bool m_bUsePoseParameters;
-
- // Lead the target?
- bool m_bPerformLeading;
- float m_flStartLeadFactor;
- float m_flStartLeadFactorTime;
- float m_flNextLeadFactor;
- float m_flNextLeadFactorTime;
-
- COutputEvent m_OnFire;
- COutputEvent m_OnLoseTarget;
- COutputEvent m_OnAquireTarget;
- COutputEvent m_OnAmmoDepleted;
- COutputEvent m_OnGotController;
- COutputEvent m_OnLostController;
- COutputEvent m_OnGotPlayerController;
- COutputEvent m_OnLostPlayerController;
- COutputEvent m_OnReadyToFire;
-
- CHandle<CBaseTrigger> m_hControlVolume;
- string_t m_iszControlVolume;
-
- float m_flNextControllerSearch;
- bool m_bShouldFindNPCs;
- bool m_bNPCInRoute;
- string_t m_iszNPCManPoint;
-
- bool m_bReadyToFire;
-
- int m_iEffectHandling;
-};
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef FUNC_TANK_H +#define FUNC_TANK_H +#ifdef _WIN32 +#pragma once +#endif + +#include "triggers.h" + +#define SF_TANK_ACTIVE 0x0001 +#define SF_TANK_PLAYER 0x0002 +#define SF_TANK_HUMANS 0x0004 +#define SF_TANK_ALIENS 0x0008 +#define SF_TANK_LINEOFSIGHT 0x0010 +#define SF_TANK_CANCONTROL 0x0020 +#define SF_TANK_DAMAGE_KICK 0x0040 // Kick when take damage +#define SF_TANK_AIM_AT_POS 0x0080 // Aim at a particular position +#define SF_TANK_AIM_ASSISTANCE 0x0100 +#define SF_TANK_NPC 0x0200 +#define SF_TANK_NPC_CONTROLLABLE 0x0400 // 1024 +#define SF_TANK_NPC_SET_CONTROLLER 0x0800 // 2048 +#define SF_TANK_ALLOW_PLAYER_HITS 0x1000 // 4096 Allow friendly NPCs to fire upon enemies near the player +#define SF_TANK_IGNORE_RANGE_IN_VIEWCONE 0x2000 // 8192 Don't use range as a factor in determining if something is in view cone +#define SF_TANK_NOTSOLID 0x8000 // 32768 +#define SF_TANK_SOUNDON 0x10000 // FIXME: This is not really a spawnflag! It holds transient state!!! +#define SF_TANK_HACKPLAYERHIT 0x20000 // 131072 Make this func_tank cheat and hit the player regularly + +#define FUNCTANK_DISTANCE_MAX 1200 // 100 ft. +#define FUNCTANK_DISTANCE_MIN_TO_ENEMY 180 +#define FUNCTANK_FIREVOLUME 1000 +#define FUNCTANK_NPC_ROUTE_TIME 5.0f + +// Effect handling +// If the func_tank has a chosen method of handling effects, use that +// instead of the individual effect settings. (muzzleflash, sound, tracer, etc) +enum FUNCTANK_EFFECT_HANDLING +{ + EH_NONE, // Use the effect settings + EH_AR2, // Use AR2 effects + EH_COMBINE_CANNON // Large Combine cannon +}; + +enum TANKBULLET +{ + TANK_BULLET_NONE = 0, + TANK_BULLET_SMALL = 1, + TANK_BULLET_MEDIUM = 2, + TANK_BULLET_LARGE = 3, +}; + +#define MORTAR_BLAST_RADIUS 350 + + +// Custom damage +// env_laser (duration is 0.5 rate of fire) +// rockets +// explosion? + +class CFuncTank : public CBaseEntity +{ + + DECLARE_CLASS( CFuncTank, CBaseEntity ); + +public: + + CFuncTank(); + ~CFuncTank(); + void Spawn( void ); + void Activate( void ); + void Precache( void ); + bool CreateVPhysics( void ); + bool KeyValue( const char *szKeyName, const char *szValue ); + void UpdateOnRemove(); + + void SetYawRate( float flYawRate ) { m_yawRate = flYawRate; } + void SetPitchRate( float flPitchRate ) { m_pitchRate = flPitchRate; } + + int ObjectCaps( void ) + { + return ( BaseClass::ObjectCaps() | FCAP_IMPULSE_USE | FCAP_USE_IN_RADIUS ); + } + + void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + + virtual void FuncTankPreThink() { return; } + void Think( void ); + virtual void FuncTankPostThink() { return; } + + int GetAmmoCount( void ) { return m_iAmmoCount; } + + // NPC + bool NPC_FindManPoint( Vector &vecPos ); + bool NPC_HasEnemy( void ); + void NPC_Fire( void ); + void NPC_InterruptRoute( void ); + void NPC_JustSawPlayer( CBaseEntity *pTarget ); + void NPC_SetInRoute( bool bInRoute ) { m_bNPCInRoute = bInRoute; } + void NPC_SetIdleAngle( Vector vecIdle ) { m_vecNPCIdleTarget = vecIdle; } + + // LOS + bool IsEntityInViewCone( CBaseEntity *pEntity ); + bool HasLOSTo( CBaseEntity *pEntity ); + + // Controller + CBaseCombatCharacter *GetController( void ); + bool StartControl( CBaseCombatCharacter *pController ); + void StopControl( void ); + Vector GetTargetPosition() { return m_vTargetPosition; } + void SetTargetPosition( const Vector &vecPos ) { m_vTargetPosition = vecPos; } + + const float YawCenter() const { return m_yawCenter; } + const float YawCenterWorld() const { return m_yawCenterWorld; } + const float YawRange() const { return m_yawRange; } + const float PitchCenter() const { return m_pitchCenter; } + const float PitchCenterWorld() const { return m_pitchCenterWorld; } + const float PitchRange() const { return m_pitchRange; } + + virtual void PhysicsSimulate( void ); + + virtual void OnStartControlled() {} + virtual void OnStopControlled() {} + + // SF Tests. + inline bool IsControllable( void ) { return ( m_spawnflags & SF_TANK_CANCONTROL ) ? true : false; } + inline bool IsActive( void ) { return ( m_spawnflags & SF_TANK_ACTIVE ) ? true : false; } + inline bool IsNPCControllable( void ) { return ( m_spawnflags & SF_TANK_NPC_CONTROLLABLE ) ? true : false; } + inline bool IsNPCSetController( void ) { return ( m_spawnflags & SF_TANK_NPC_SET_CONTROLLER ) ? true : false; } + + virtual void DoMuzzleFlash( void ); + virtual const char *GetTracerType( void ); + +protected: + virtual float GetShotSpeed() { return 0; } + + virtual Vector WorldBarrelPosition( void ); + void UpdateMatrix( void ); + + float GetNextAttack() const { return m_flNextAttack; } + virtual void SetNextAttack( float flWait ) { m_flNextAttack = flWait; } + + virtual void Fire( int bulletCount, const Vector &barrelEnd, const Vector &forward, CBaseEntity *pAttacker, bool bIgnoreSpread ); + void TankTrace( const Vector &vecStart, const Vector &vecForward, const Vector &vecSpread, trace_t &tr ); + int GetRandomBurst( void ); + float GetRandomFireTime( void ); + + void CalcPlayerCrosshairTarget( Vector *pVecTarget ); + void CalcNPCEnemyTarget( Vector *pVecTarget ); + + inline bool IsPlayerManned( void ) { return m_hController && m_hController->IsPlayer() && ( m_spawnflags & SF_TANK_PLAYER ); } + inline bool IsNPCManned( void ) { return m_hController && m_hController->MyNPCPointer() && ( m_spawnflags & SF_TANK_NPC ); } + +private: + void TrackTarget( void ); + int DrawDebugTextOverlays(void); + void DrawDebugGeometryOverlays(void); + + virtual void FiringSequence( const Vector &barrelEnd, const Vector &forward, CBaseEntity *pAttacker ); + + void StartRotSound( void ); + void StopRotSound( void ); + + // Input handlers. + void InputActivate( inputdata_t &inputdata ); + void InputDeactivate( inputdata_t &inputdata ); + void InputSetFireRate( inputdata_t &inputdata ); + void InputSetDamage( inputdata_t &inputdata ); + void InputSetTargetDir( inputdata_t &inputdata ); + void InputSetTargetPosition( inputdata_t &inputdata ); + void InputSetTargetEntityName( inputdata_t &inputdata ); + +protected: + virtual void InputSetTargetEntity( inputdata_t &inputdata ); + virtual void InputClearTargetEntity( inputdata_t &inputdata ); + +private: + void InputFindNPCToManTank( inputdata_t &inputdata ); + void InputStopFindingNPCs( inputdata_t &inputdata ); + void InputStartFindingNPCs( inputdata_t &inputdata ); + void InputForceNPCOff( inputdata_t &inputdata ); + void InputSetMaxRange( inputdata_t &inputdata ); + + inline bool CanFire( void ); + bool InRange( float range ); + bool InRange2( float flRange2 ); + + void TraceAttack( CBaseEntity *pAttacker, float flDamage, const Vector &vecDir, trace_t *ptr, int bitsDamageType); + + QAngle AimBarrelAt( const Vector &parentTarget ); + + DECLARE_DATADESC(); + + bool OnControls( CBaseEntity *pTest ); + bool HasController( void ); + + CBaseEntity *FindTarget( string_t targetName, CBaseEntity *pActivator ); + + // NPC + void NPC_FindController( void ); + bool NPC_InRoute( void ) { return m_bNPCInRoute; } + bool NPC_InterruptController( void ); + + // Aim the tank at the player crosshair + void AimBarrelAtPlayerCrosshair( QAngle *pAngles ); + + // Aim the tank at the NPC's enemy + void AimBarrelAtNPCEnemy( QAngle *pAngles ); + + // Aim the tank at the func_tank's enemy + void AimFuncTankAtTarget( void ); + + // Returns true if the desired angles are out of range + bool RotateTankToAngles( const QAngle &angles, float *pDistX = NULL, float *pDistY = NULL ); + + // We lost our target! + void LostTarget( void ); + + // Purpose: + void ComputeLeadingPosition( const Vector &vecShootPosition, CBaseEntity *pTarget, Vector *pLeadPosition ); + +protected: + virtual void ControllerPostFrame( void ); + + virtual void TankActivate(void); + virtual void TankDeactivate(void); + + float m_fireLast; // Last time I fired + float m_fireRate; // How many rounds/second + + EHANDLE m_hTarget; + + TANKBULLET m_bulletType; // Bullet type + int m_iBulletDamage; // 0 means use Bullet type's default damage + int m_iBulletDamageVsPlayer; // Damage vs player. 0 means use m_iBulletDamage + +#ifdef HL2_EPISODIC + string_t m_iszAmmoType; // The name of the ammodef that we use when we fire. Bullet damage still comes from keyvalues. + int m_iAmmoType; // The cached index of the ammodef that we use when we fire. +#else + int m_iSmallAmmoType; + int m_iMediumAmmoType; + int m_iLargeAmmoType; +#endif // HL2_EPISODIC + + int m_spread; // firing spread + + EntityMatrix m_parentMatrix; + + Vector m_sightOrigin; // Last sight of target + EHANDLE m_hFuncTankTarget; + + int m_nBulletCount; + +private: + + // This is either the player manning the func_tank, or an NPC. The NPC is either manning the tank, or running + // to the man point. If he's en-route, m_bNPCInRoute will be true. + CHandle<CBaseCombatCharacter> m_hController; + + float m_flNextAttack; + Vector m_vecControllerUsePos; + + float m_yawCenter; // "Center" yaw + float m_yawCenterWorld; // "Center" yaw in world space + float m_yawRate; // Max turn rate to track targets + float m_yawRange; // Range of turning motion (one-sided: 30 is +/- 30 degress from center) + // Zero is full rotation + float m_yawTolerance; // Tolerance angle + + float m_pitchCenter; // "Center" pitch + float m_pitchCenterWorld; // "Center" pitch in world space + float m_pitchRate; // Max turn rate on pitch + float m_pitchRange; // Range of pitch motion as above + float m_pitchTolerance; // Tolerance angle + + float m_fireTime; // How much time has been used to fire the weapon so far. + float m_lastSightTime;// Last time I saw target + float m_persist; // Persistence of firing (how long do I shoot when I can't see) + float m_persist2; // Secondary persistence of firing (randomly shooting when I can't see) + float m_persist2burst;// How long secondary persistence burst lasts + float m_minRange; // Minimum range to aim/track + float m_maxRange; // Max range to aim/track + float m_flMinRange2; + float m_flMaxRange2; + int m_iAmmoCount; // ammo + + Vector m_barrelPos; // Length of the freakin barrel + float m_spriteScale; // Scale of any sprites we shoot + string_t m_iszSpriteSmoke; + string_t m_iszSpriteFlash; + + string_t m_iszMaster; // Master entity (game_team_master or multisource) + + string_t m_soundStartRotate; + string_t m_soundStopRotate; + string_t m_soundLoopRotate; + + float m_flPlayerGracePeriod; + float m_flIgnoreGraceUpto; + float m_flPlayerLockTimeBeforeFire; + float m_flLastSawNonPlayer; + + string_t m_targetEntityName; + Vector m_vTargetPosition; + Vector m_vecNPCIdleTarget; + + // Used for when the gun is attached to another entity + string_t m_iszBarrelAttachment; + int m_nBarrelAttachment; + string_t m_iszBaseAttachment; + + // Used when the gun is actually a part of the parent entity, and pose params aim it + string_t m_iszYawPoseParam; + string_t m_iszPitchPoseParam; + float m_flYawPoseCenter; + float m_flPitchPoseCenter; + bool m_bUsePoseParameters; + + // Lead the target? + bool m_bPerformLeading; + float m_flStartLeadFactor; + float m_flStartLeadFactorTime; + float m_flNextLeadFactor; + float m_flNextLeadFactorTime; + + COutputEvent m_OnFire; + COutputEvent m_OnLoseTarget; + COutputEvent m_OnAquireTarget; + COutputEvent m_OnAmmoDepleted; + COutputEvent m_OnGotController; + COutputEvent m_OnLostController; + COutputEvent m_OnGotPlayerController; + COutputEvent m_OnLostPlayerController; + COutputEvent m_OnReadyToFire; + + CHandle<CBaseTrigger> m_hControlVolume; + string_t m_iszControlVolume; + + float m_flNextControllerSearch; + bool m_bShouldFindNPCs; + bool m_bNPCInRoute; + string_t m_iszNPCManPoint; + + bool m_bReadyToFire; + + int m_iEffectHandling; +}; + #endif // FUNC_TANK_H
\ No newline at end of file |