You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
5.4 KiB
206 lines
5.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// |
|
//============================================================================= |
|
#ifndef TF_WEAPON_MINIGUN_H |
|
#define TF_WEAPON_MINIGUN_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "GameEventListener.h" |
|
#include "tf_weaponbase_gun.h" |
|
|
|
#ifdef CLIENT_DLL |
|
#include "particles_new.h" |
|
#endif |
|
|
|
// Client specific. |
|
#ifdef CLIENT_DLL |
|
#define CTFMinigun C_TFMinigun |
|
#endif |
|
|
|
#ifdef GAME_DLL |
|
class ITFProjectile; |
|
#endif // GAME_DLL |
|
|
|
enum MinigunState_t |
|
{ |
|
// Firing states. |
|
AC_STATE_IDLE = 0, |
|
AC_STATE_STARTFIRING, |
|
AC_STATE_FIRING, |
|
AC_STATE_SPINNING, |
|
AC_STATE_DRYFIRE |
|
}; |
|
|
|
enum minigun_weapontypes_t |
|
{ |
|
MINIGUN_STANDARD = 0, |
|
MINIGUN_STUN, // Natascha |
|
}; |
|
|
|
//============================================================================= |
|
// |
|
// TF Weapon Minigun |
|
// |
|
class CTFMinigun : public CTFWeaponBaseGun |
|
{ |
|
public: |
|
|
|
DECLARE_CLASS( CTFMinigun, CTFWeaponBaseGun ); |
|
DECLARE_NETWORKCLASS(); |
|
DECLARE_PREDICTABLE(); |
|
|
|
// Server specific. |
|
#ifndef CLIENT_DLL |
|
DECLARE_DATADESC(); |
|
#endif |
|
|
|
CTFMinigun(); |
|
~CTFMinigun(); |
|
|
|
virtual void Precache( void ); |
|
virtual int GetWeaponID( void ) const { return TF_WEAPON_MINIGUN; } |
|
virtual void ItemPostFrame( void ); |
|
virtual void PrimaryAttack(); |
|
virtual void SecondaryAttack(); |
|
void SharedAttack(); |
|
virtual void WeaponIdle(); |
|
virtual bool SendWeaponAnim( int iActivity ); |
|
virtual bool CanHolster( void ) const; |
|
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ); |
|
virtual bool HolsterOnDetach() { return true; } |
|
virtual bool Lower( void ); |
|
virtual void HandleFireOnEmpty( void ); |
|
virtual void WeaponReset( void ); |
|
virtual float GetProjectileDamage( void ); |
|
virtual bool ShouldDoMuzzleFlash( void ) { return false; } |
|
virtual float GetWeaponSpread( void ); |
|
|
|
virtual void FireGameEvent( IGameEvent *event ); |
|
|
|
#ifdef GAME_DLL |
|
virtual int UpdateTransmitState( void ); |
|
|
|
void AttackEnemyProjectiles( void ); |
|
void ActivatePushBackAttackMode( void ); |
|
#endif |
|
|
|
void RingOfFireAttack( int nDamage ); |
|
|
|
virtual int GetCustomDamageType() const { return TF_DMG_CUSTOM_MINIGUN; } |
|
int GetMinigunType( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, set_weapon_mode ); return iMode; }; |
|
bool HasSpinSounds( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, minigun_no_spin_sounds ); return iMode!=1; }; |
|
bool CanHolsterWhileSpinning( void ) const { int iMode = 0; CALL_ATTRIB_HOOK_INT( iMode, mod_minigun_can_holster_while_spinning ); return iMode!=0; }; |
|
|
|
float GetFiringDuration( void ) { return ( m_flStartedFiringAt >= 0.f ) ? ( gpGlobals->curtime - m_flStartedFiringAt ) : 0.f; } |
|
float GetWindUpDuration( void ) { return ( m_flStartedWindUpAt >= 0.f ) ? ( gpGlobals->curtime - m_flStartedWindUpAt ) : 0.f; } |
|
|
|
float GetProgress( void ); |
|
bool IsRageFull( void ); // same as GetProgress() without the division by 100.0f |
|
const char* GetEffectLabelText( void ) { return "#TF_Rage"; } |
|
bool EffectMeterShouldFlash( void ); |
|
|
|
virtual bool CanInspect() const OVERRIDE; |
|
|
|
#ifdef GAME_DLL |
|
virtual CDmgAccumulator *GetDmgAccumulator( void ) { return &m_Accumulator; } |
|
#endif // GAME_DLL |
|
|
|
#ifdef CLIENT_DLL |
|
float GetBarrelRotation(); |
|
#endif |
|
|
|
private: |
|
|
|
CTFMinigun( const CTFMinigun & ) {} |
|
|
|
void WindUp( void ); |
|
void WindDown( void ); |
|
|
|
#ifdef GAME_DLL |
|
CDmgAccumulator m_Accumulator; |
|
#endif // GAME_DLL |
|
|
|
#ifdef CLIENT_DLL |
|
// Barrel spinning |
|
virtual CStudioHdr *OnNewModel( void ); |
|
virtual void StandardBlendingRules( CStudioHdr *hdr, Vector pos[], Quaternion q[], float currentTime, int boneMask ); |
|
|
|
virtual void UpdateOnRemove( void ); |
|
|
|
void CreateMove( float flInputSampleTime, CUserCmd *pCmd, const QAngle &vecOldViewAngles ); |
|
|
|
void OnDataChanged( DataUpdateType_t type ); |
|
|
|
virtual void ItemPreFrame( void ); |
|
|
|
// Firing sound |
|
void WeaponSoundUpdate( void ); |
|
void PlayStopFiringSound(); |
|
|
|
void UpdateBarrelMovement( void ); |
|
virtual void SetDormant( bool bDormant ); |
|
|
|
virtual void ViewModelAttachmentBlending( CStudioHdr *hdr, Vector pos[], Quaternion q[], float currentTime, int boneMask ); |
|
#endif |
|
|
|
virtual bool CanReload( void ){ return false; } |
|
|
|
private: |
|
virtual void PlayWeaponShootSound( void ) {} // override base class call to play shoot sound; we handle that ourselves separately |
|
|
|
void SetWeaponState( MinigunState_t nState ); |
|
|
|
CNetworkVar( MinigunState_t, m_iWeaponState ); |
|
CNetworkVar( bool, m_bCritShot ); |
|
|
|
float m_flNextFiringSpeech; |
|
float m_flStartedFiringAt; |
|
float m_flStartedWindUpAt; |
|
float m_flBarrelCurrentVelocity; |
|
float m_flBarrelTargetVelocity; |
|
int m_iBarrelBone; |
|
float m_flBarrelAngle; |
|
CSoundPatch *m_pSoundCur; // the weapon sound currently being played |
|
int m_iMinigunSoundCur; // the enum value of the weapon sound currently being played |
|
float m_flMinigunSoundCurrentPitch; |
|
|
|
#ifdef GAME_DLL |
|
float m_flAegisCheckTime; |
|
#endif |
|
|
|
float m_flNextRingOfFireAttackTime; |
|
float m_flAccumulatedAmmoDrain; |
|
float m_flLastAmmoDrainTime; |
|
|
|
bool m_bAttack3Down; |
|
|
|
#ifdef CLIENT_DLL |
|
void StartBrassEffect(); |
|
void StopBrassEffect(); |
|
void HandleBrassEffect(); |
|
|
|
EHANDLE m_hEjectBrassWeapon; |
|
CNewParticleEffect *m_pEjectBrassEffect; |
|
int m_iEjectBrassAttachment; |
|
|
|
void StartMuzzleEffect(); |
|
void StopMuzzleEffect(); |
|
void HandleMuzzleEffect(); |
|
|
|
EHANDLE m_hMuzzleEffectWeapon; |
|
CNewParticleEffect *m_pMuzzleEffect; |
|
int m_iMuzzleAttachment; |
|
|
|
int m_nShotsFired; |
|
|
|
bool m_bRageDraining; |
|
bool m_bPrevRageDraining; |
|
|
|
MinigunState_t m_iPrevMinigunState; |
|
#endif |
|
}; |
|
|
|
#endif // TF_WEAPON_MINIGUN_H
|
|
|