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.
167 lines
6.6 KiB
167 lines
6.6 KiB
1 year ago
|
#ifndef _INCLUDED_ASW_WEAPON_H
|
||
|
#define _INCLUDED_ASW_WEAPON_H
|
||
|
#pragma once
|
||
|
|
||
|
#include "asw_weapon_shared.h"
|
||
|
#include "basecombatweapon_shared.h"
|
||
|
#include "iasw_server_usable_entity.h"
|
||
|
|
||
|
class CASW_Player;
|
||
|
class CASW_Marine;
|
||
|
class CASW_WeaponInfo;
|
||
|
|
||
|
class CASW_Weapon : public CBaseCombatWeapon, public IASW_Server_Usable_Entity
|
||
|
{
|
||
|
public:
|
||
|
DECLARE_CLASS( CASW_Weapon, CBaseCombatWeapon );
|
||
|
DECLARE_SERVERCLASS();
|
||
|
DECLARE_DATADESC();
|
||
|
DECLARE_PREDICTABLE();
|
||
|
|
||
|
CASW_Weapon();
|
||
|
virtual ~CASW_Weapon();
|
||
|
virtual void Precache();
|
||
|
bool DestroyIfEmpty( bool bDestroyWhenActive, bool bCheckSecondaryAmmo=false );
|
||
|
|
||
|
virtual void ItemPostFrame(void);
|
||
|
virtual void ItemBusyFrame(void);
|
||
|
virtual const char* GetPickupClass() { return "asw_pickup_rifle"; }
|
||
|
|
||
|
virtual void SetClip1(int i) { m_iClip1 = i; }
|
||
|
virtual void SetClip2(int i) { m_iClip2 = i; }
|
||
|
virtual int GetNumPellets() { return 1; } // how many projectiles are fired off per firerate
|
||
|
|
||
|
int UpdateTransmitState();
|
||
|
int ShouldTransmit( const CCheckTransmitInfo *pInfo );
|
||
|
|
||
|
void DiffPrint( char const *fmt, ... );
|
||
|
|
||
|
// shared code
|
||
|
virtual const char *GetASWShootSound( int iIndex, int &iPitch );
|
||
|
virtual void WeaponSound( WeaponSound_t sound_type, float soundtime = 0.0f );
|
||
|
virtual void PrimaryAttack(void);
|
||
|
virtual void SecondaryAttack();
|
||
|
virtual bool SecondaryAttackUsesPrimaryAmmo() { return false; }
|
||
|
virtual bool IsPredicted( void ) const;
|
||
|
void PlaySoundDirectlyToOwner( const char *szSoundName );
|
||
|
void PlaySoundToOthers( const char *szSoundName );
|
||
|
|
||
|
virtual float GetFireRate( void );
|
||
|
virtual bool HasAmmo();
|
||
|
virtual bool PrimaryAmmoLoaded( void );
|
||
|
|
||
|
virtual int LookupAttachment( const char *pAttachmentName );
|
||
|
virtual bool ShouldMarineMoveSlow(); // is the weapon in slow mode (when firing or reloading)
|
||
|
virtual float GetMovementScale(); // get overall current movement scale (incorporates slowdown from heavy weapons, reloading, firing)
|
||
|
virtual float GetTurnRateModifier();
|
||
|
virtual float GetMadFiringBias() { return 1.0f; } // scales the rate at which the mad firing counter goes up when we shoot aliens with this weapon
|
||
|
virtual void OnStoppedFiring();
|
||
|
virtual void OnStartedRoll();
|
||
|
virtual bool IsFiring();// const;
|
||
|
virtual void ClearIsFiring();
|
||
|
virtual void GetButtons(bool& bAttack1, bool& bAttack2, bool& bReload, bool& bOldReload, bool& bOldAttack1 );
|
||
|
bool Holster( CBaseCombatWeapon *pSwitchingTo );
|
||
|
virtual void Equip(CBaseCombatCharacter *pOwner);
|
||
|
virtual void SetWeaponVisible( bool visible );
|
||
|
virtual void ApplyWeaponSwitchTime();
|
||
|
CNetworkVar(bool, m_bSwitchingWeapons);
|
||
|
virtual void SendWeaponSwitchEvents();
|
||
|
virtual const float GetAutoAimAmount();
|
||
|
virtual const float GetVerticalAdjustOnlyAutoAimAmount();
|
||
|
virtual void MarineDropped(CASW_Marine* pMarine);
|
||
|
virtual bool ASWCanBeSelected() { return true; }
|
||
|
virtual bool ShouldFlareAutoaim() { return false; }
|
||
|
virtual int GetEquipmentListIndex() { return m_iEquipmentListIndex; }
|
||
|
const CASW_WeaponInfo* GetWeaponInfo() const;
|
||
|
virtual bool OffhandActivate() { return false; };
|
||
|
virtual bool WantsOffhandPostFrame() { return m_bShotDelayed; }
|
||
|
virtual bool SendWeaponAnim( int iActivity );
|
||
|
virtual int WeaponRangeAttack1Condition( float flDot, float flDist );
|
||
|
virtual bool IsOffensiveWeapon() { return true; } // is this weapon an offensive gun type weapon (as opposed to a utility item)
|
||
|
virtual bool IsRapidFire() { return true; }
|
||
|
virtual int AmmoClickPoint(); // when this many rounds or less left in the gun, it will click when firing
|
||
|
virtual void LowAmmoSound();
|
||
|
virtual int ASW_SelectWeaponActivity(int idealActivity);
|
||
|
virtual bool SupportsBayonet();
|
||
|
virtual float GetWeaponDamage();
|
||
|
virtual bool ShouldAlienFlinch(CBaseEntity *pEntity, const CTakeDamageInfo &info);
|
||
|
virtual bool AllowsAutoSwitchFrom( void ) const;
|
||
|
virtual bool WeaponLOSCondition( const Vector &ownerPos, const Vector &targetPos, bool bSetConditions );
|
||
|
virtual bool CanDoForcedAction( int iForcedAction ) { return true; } // check if we're allowed to perform a forced action (certain abilities limit this)
|
||
|
virtual float GetPassiveMeleeDamageScale() { return 1.0f; }
|
||
|
|
||
|
CNetworkVar(bool, m_bIsFiring);
|
||
|
|
||
|
CASW_Player* GetCommander();
|
||
|
CASW_Marine* GetMarine();
|
||
|
virtual void OnMarineDamage(const CTakeDamageInfo &info) { } // marine was hurt when holding this weapon
|
||
|
|
||
|
// delayed firing (flares, hand grenades, etc.)
|
||
|
virtual void DelayedAttack() { }
|
||
|
virtual float GetThrowGravity() { return 1.0f; }
|
||
|
bool m_bShotDelayed;
|
||
|
float m_flDelayedFire;
|
||
|
|
||
|
// powerups
|
||
|
void MakePoweredUp( bool bPoweredUp ) { m_bPoweredUp = bPoweredUp; }
|
||
|
CNetworkVar(bool, m_bPoweredUp);
|
||
|
|
||
|
// reloading
|
||
|
virtual float GetReloadTime();
|
||
|
virtual float GetReloadFailTime();
|
||
|
virtual bool Reload();
|
||
|
virtual bool ASWReload( int iClipSize1, int iClipSize2, int iActivity );
|
||
|
virtual void SendReloadEvents();
|
||
|
bool ReloadOrSwitchWeapons(void);
|
||
|
bool IsReloading() const;
|
||
|
virtual void FinishReload( void );
|
||
|
float m_fReloadClearFiringTime;
|
||
|
float m_flReloadFailTime; // time from when you fail an active reload until you can shoot again
|
||
|
// fast reload
|
||
|
CNetworkVar(float, m_fReloadStart);
|
||
|
CNetworkVar(float, m_fFastReloadStart);
|
||
|
CNetworkVar(float, m_fFastReloadEnd);
|
||
|
CNetworkVar(bool, m_bFastReloadSuccess);
|
||
|
CNetworkVar(bool, m_bFastReloadFailure);
|
||
|
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iClip1 );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iClip2 );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iPrimaryAmmoType );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_iSecondaryAmmoType );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_flNextPrimaryAttack );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_flNextSecondaryAttack );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_nNextThinkTick );
|
||
|
IMPLEMENT_NETWORK_VAR_FOR_DERIVED( m_flTimeWeaponIdle );
|
||
|
|
||
|
// effects
|
||
|
virtual const char* GetUTracerType();
|
||
|
|
||
|
virtual void Spawn();
|
||
|
virtual void UpdateOnRemove();
|
||
|
|
||
|
// Functions for weapons on the ground
|
||
|
virtual void Drop( const Vector &vecVelocity );
|
||
|
virtual bool AllowedToPickup(CASW_Marine *pMarine);
|
||
|
bool IsBeingCarried() const;
|
||
|
bool IsCarriedByLocalPlayer();
|
||
|
|
||
|
// check if this weapon wants to perform a sync kill
|
||
|
virtual bool CheckSyncKill( byte &forced_action, short &sync_kill_ent ) { return false; }
|
||
|
|
||
|
// IASW_Server_Usable_Entity implementation
|
||
|
virtual CBaseEntity* GetEntity() { return this; }
|
||
|
virtual bool IsUsable(CBaseEntity *pUser);
|
||
|
virtual bool RequirementsMet( CBaseEntity *pUser ) { return true; }
|
||
|
virtual void ActivateUseIcon( CASW_Marine* pMarine, int nHoldType );
|
||
|
virtual void MarineUsing(CASW_Marine* pMarine, float deltatime) { }
|
||
|
virtual void MarineStartedUsing(CASW_Marine* pMarine) { }
|
||
|
virtual void MarineStoppedUsing(CASW_Marine* pMarine) { }
|
||
|
virtual bool NeedsLOSCheck() { return true; }
|
||
|
|
||
|
protected:
|
||
|
int m_iEquipmentListIndex;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif /* _INCLUDED_ASW_WEAPON_H */
|