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.
289 lines
9.5 KiB
289 lines
9.5 KiB
//========= 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
|
|
|