diff options
Diffstat (limited to 'game/shared/cstrike/weapon_csbase.h')
| -rw-r--r-- | game/shared/cstrike/weapon_csbase.h | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/game/shared/cstrike/weapon_csbase.h b/game/shared/cstrike/weapon_csbase.h new file mode 100644 index 0000000..9a81b61 --- /dev/null +++ b/game/shared/cstrike/weapon_csbase.h @@ -0,0 +1,289 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef WEAPON_CSBASE_H +#define WEAPON_CSBASE_H +#ifdef _WIN32 +#pragma once +#endif + +#include "cs_playeranimstate.h" +#include "cs_weapon_parse.h" + + +#if defined( CLIENT_DLL ) + #define CWeaponCSBase C_WeaponCSBase +#endif + +extern CSWeaponID AliasToWeaponID( const char *alias ); +extern const char *WeaponIDToAlias( int id ); +extern const char *GetTranslatedWeaponAlias( const char *alias); +extern const char * GetWeaponAliasFromTranslated(const char *translatedAlias); +extern bool IsPrimaryWeapon( CSWeaponID id ); +extern bool IsSecondaryWeapon( CSWeaponID id ); +extern int GetShellForAmmoType( const char *ammoname ); + +#define SHIELD_VIEW_MODEL "models/weapons/v_shield.mdl" +#define SHIELD_WORLD_MODEL "models/weapons/w_shield.mdl" + +class CCSPlayer; + +// These are the names of the ammo types that go in the CAmmoDefs and that the +// weapon script files reference. +#define BULLET_PLAYER_50AE "BULLET_PLAYER_50AE" +#define BULLET_PLAYER_762MM "BULLET_PLAYER_762MM" +#define BULLET_PLAYER_556MM "BULLET_PLAYER_556MM" +#define BULLET_PLAYER_556MM_BOX "BULLET_PLAYER_556MM_BOX" +#define BULLET_PLAYER_338MAG "BULLET_PLAYER_338MAG" +#define BULLET_PLAYER_9MM "BULLET_PLAYER_9MM" +#define BULLET_PLAYER_BUCKSHOT "BULLET_PLAYER_BUCKSHOT" +#define BULLET_PLAYER_45ACP "BULLET_PLAYER_45ACP" +#define BULLET_PLAYER_357SIG "BULLET_PLAYER_357SIG" +#define BULLET_PLAYER_57MM "BULLET_PLAYER_57MM" +#define AMMO_TYPE_HEGRENADE "AMMO_TYPE_HEGRENADE" +#define AMMO_TYPE_FLASHBANG "AMMO_TYPE_FLASHBANG" +#define AMMO_TYPE_SMOKEGRENADE "AMMO_TYPE_SMOKEGRENADE" + +#define CROSSHAIR_CONTRACT_PIXELS_PER_SECOND 7.0f + +// Given an ammo type (like from a weapon's GetPrimaryAmmoType()), this compares it +// against the ammo name you specify. +// MIKETODO: this should use indexing instead of searching and strcmp()'ing all the time. +bool IsAmmoType( int iAmmoType, const char *pAmmoName ); + +enum CSWeaponMode +{ + Primary_Mode = 0, + Secondary_Mode, + WeaponMode_MAX +}; + +#if defined( CLIENT_DLL ) + + //-------------------------------------------------------------------------------------------------------------- + /** + * Returns the client's ID_* value for the currently owned weapon, or ID_NONE if no weapon is owned + */ + CSWeaponID GetClientWeaponID( bool primary ); + +#endif + + //-------------------------------------------------------------------------------------------------------------- + CCSWeaponInfo * GetWeaponInfo( CSWeaponID weaponID ); + + +class CWeaponCSBase : public CBaseCombatWeapon +{ +public: + DECLARE_CLASS( CWeaponCSBase, CBaseCombatWeapon ); + DECLARE_NETWORKCLASS(); + DECLARE_PREDICTABLE(); + + CWeaponCSBase(); + + #ifdef GAME_DLL + DECLARE_DATADESC(); + + virtual void CheckRespawn(); + virtual CBaseEntity* Respawn(); + + virtual const Vector& GetBulletSpread(); + virtual float GetDefaultAnimSpeed(); + + virtual void BulletWasFired( const Vector &vecStart, const Vector &vecEnd ); + virtual bool ShouldRemoveOnRoundRestart(); + + //============================================================================= + // HPE_BEGIN: + // [dwenger] Handle round restart processing for the weapon. + //============================================================================= + + virtual void OnRoundRestart(); + + //============================================================================= + // HPE_END + //============================================================================= + + virtual bool DefaultReload( int iClipSize1, int iClipSize2, int iActivity ); + + void SendReloadEvents(); + + void Materialize(); + void AttemptToMaterialize(); + virtual void Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); + + virtual bool IsRemoveable(); + + #endif + + virtual bool Holster( CBaseCombatWeapon *pSwitchingTo ); + virtual void AddViewmodelBob( CBaseViewModel *viewmodel, Vector &origin, QAngle &angles ); + virtual float CalcViewmodelBob( void ); + // All predicted weapons need to implement and return true + virtual bool IsPredicted() const; + + // Pistols reset m_iShotsFired to 0 when the attack button is released. + bool IsPistol() const; + + virtual bool IsFullAuto() const; + + CCSPlayer* GetPlayerOwner() const; + + virtual float GetMaxSpeed() const; // What's the player's max speed while holding this weapon. + + // Get CS-specific weapon data. + CCSWeaponInfo const &GetCSWpnData() const; + + // Get specific CS weapon ID (ie: WEAPON_AK47, etc) + virtual CSWeaponID GetWeaponID( void ) const { return WEAPON_NONE; } + + // return true if this weapon is an instance of the given weapon type (ie: "IsA" WEAPON_GLOCK) + bool IsA( CSWeaponID id ) const { return GetWeaponID() == id; } + + // return true if this weapon is a kinf of the given weapon type (ie: "IsKindOf" WEAPONTYPE_RIFLE ) + bool IsKindOf( CSWeaponType type ) const { return GetCSWpnData().m_WeaponType == type; } + + // return true if this weapon has a silencer equipped + virtual bool IsSilenced( void ) const { return false; } + + virtual void SetWeaponModelIndex( const char *pName ); + virtual void OnPickedUp( CBaseCombatCharacter *pNewOwner ); + + virtual void OnJump( float fImpulse ); + virtual void OnLand( float fVelocity ); + +public: + #if defined( CLIENT_DLL ) + + virtual void ProcessMuzzleFlashEvent(); + virtual bool OnFireEvent( C_BaseViewModel *pViewModel, const Vector& origin, const QAngle& angles, int event, const char *options ); + virtual bool ShouldPredict(); + virtual void DrawCrosshair(); + virtual void OnDataChanged( DataUpdateType_t type ); + + virtual int GetMuzzleAttachment( void ); + virtual bool HideViewModelWhenZoomed( void ) { return true; } + + float m_flCrosshairDistance; + int m_iAmmoLastCheck; + int m_iAlpha; + int m_iScopeTextureID; + int m_iCrosshairTextureID; // for white additive texture + + virtual int GetMuzzleFlashStyle( void ); + + #else + + virtual bool Reload(); + virtual void Spawn(); + virtual bool KeyValue( const char *szKeyName, const char *szValue ); + + virtual bool PhysicsSplash( const Vector ¢erPoint, const Vector &normal, float rawSpeed, float scaledSpeed ); + + #endif + + bool IsUseable(); + virtual bool CanDeploy( void ); + virtual void UpdateShieldState( void ); + virtual bool SendWeaponAnim( int iActivity ); + virtual void SecondaryAttack( void ); + virtual void Precache( void ); + virtual bool CanBeSelected( void ); + virtual Activity GetDeployActivity( void ); + virtual bool DefaultDeploy( char *szViewModel, char *szWeaponModel, int iActivity, char *szAnimExt ); + virtual void DefaultTouch( CBaseEntity *pOther ); // default weapon touch + virtual bool DefaultPistolReload(); + + virtual bool Deploy(); + virtual void Drop( const Vector &vecVelocity ); + bool PlayEmptySound(); + virtual void ItemPostFrame(); + virtual void ItemBusyFrame(); + virtual const char *GetViewModel( int viewmodelindex = 0 ) const; + + + bool m_bDelayFire; // This variable is used to delay the time between subsequent button pressing. + float m_flAccuracy; + + //============================================================================= + // HPE_BEGIN: + // [pfreese] new accuracy model + //============================================================================= + + CNetworkVar( CSWeaponMode, m_weaponMode); + + virtual float GetInaccuracy() const; + virtual float GetSpread() const; + + virtual void UpdateAccuracyPenalty(); + + CNetworkVar( float, m_fAccuracyPenalty ); + + //============================================================================= + // HPE_END + //============================================================================= + + void SetExtraAmmoCount( int count ) { m_iExtraPrimaryAmmo = count; } + int GetExtraAmmoCount( void ) { return m_iExtraPrimaryAmmo; } + + //============================================================================= + // HPE_BEGIN: + //============================================================================= + + // [tj] Accessors for the previous owner of the gun + void SetPreviousOwner(CCSPlayer* player) { m_prevOwner = player; } + CCSPlayer* GetPreviousOwner() { return m_prevOwner; } + + // [tj] Accessors for the donor system + void SetDonor(CCSPlayer* player) { m_donor = player; } + CCSPlayer* GetDonor() { return m_donor; } + void SetDonated(bool donated) { m_donated = true;} + bool GetDonated() { return m_donated; } + + //[dwenger] Accessors for the prior owner list + void AddToPriorOwnerList(CCSPlayer* pPlayer); + bool IsAPriorOwner(CCSPlayer* pPlayer); + + //============================================================================= + // HPE_END + //============================================================================= + +protected: + + float CalculateNextAttackTime( float flCycleTime ); + +private: + + float m_flDecreaseShotsFired; + + CWeaponCSBase( const CWeaponCSBase & ); + + int m_iExtraPrimaryAmmo; + + float m_nextPrevOwnerTouchTime; + CCSPlayer *m_prevOwner; + + int m_iDefaultExtraAmmo; + + //============================================================================= + // HPE_BEGIN: + //============================================================================= + + // [dwenger] track all prior owners of this weapon + CUtlVector< CCSPlayer* > m_PriorOwners; + + // [tj] To keep track of people who drop weapons for teammates during the buy round + CHandle<CCSPlayer> m_donor; + bool m_donated; + + //============================================================================= + // HPE_END + //============================================================================= +}; + +extern ConVar weapon_accuracy_model; + +#endif // WEAPON_CSBASE_H |