1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-01-09 18:48:51 +08:00
hl2sdk/game/client/swarm/c_asw_weapon.h
2010-07-22 01:46:14 -05:00

218 lines
8.8 KiB
C++

#ifndef _INCLUDED_C_ASW_WEAPON_H
#define _INCLUDED_C_ASW_WEAPON_H
#ifdef _WIN32
#pragma once
#endif
#include "asw_weapon_shared.h"
#include "iasw_client_usable_entity.h"
#include "basecombatweapon_shared.h"
#include "glow_outline_effect.h"
class C_ASW_Player;
class C_ASW_Marine;
class CASW_WeaponInfo;
class C_BreakableProp;
class C_ASW_Weapon : public C_BaseCombatWeapon, public IASW_Client_Usable_Entity
{
DECLARE_CLASS( C_ASW_Weapon, C_BaseCombatWeapon );
public:
DECLARE_CLIENTCLASS();
DECLARE_PREDICTABLE();
C_ASW_Weapon();
virtual ~C_ASW_Weapon();
virtual void Precache();
virtual void UpdateOnRemove();
virtual void Spawn();
virtual void ItemPostFrame( void );
virtual void ItemBusyFrame(void);
virtual void ClientPostFrame() { } // in singleplayer the client_dll doesn't run a standard itempostframe on the weapon, some items need this though, so use this function
virtual void OnDataChanged( DataUpdateType_t type );
virtual bool ShouldPredict( void );
virtual C_BasePlayer* GetPredictionOwner( void );
virtual void CreateBayonet();
virtual bool SupportsBayonet();
virtual void CreateLaserSight();
CHandle<C_BreakableProp> m_hBayonet;
EHANDLE m_hLaserSight;
virtual int DrawModel( int flags, const RenderableInstance_t &instance );
virtual IClientModelRenderable* GetClientModelRenderable();
void DiffPrint( char const *fmt, ... );
// effects
virtual int GetMuzzleAttachment( void );
virtual void SetMuzzleAttachment( int nNewAttachment );
virtual float GetMuzzleFlashScale( void );
virtual bool GetMuzzleFlashRed(); // returns true of the muzzle flash should be a mean red
virtual void ProcessMuzzleFlashEvent();
virtual int LookupAttachment( const char *pAttachmentName );
virtual const char* GetUTracerType();
virtual const char* GetTracerEffectName() { return "tracer_default"; } // particle effect name
virtual const char* GetMuzzleEffectName() { return "muzzle_rifle"; } // particle effect name
virtual bool Simulate();
virtual bool ShouldMarineFlame() { return false; } // if true, the marine emits flames from his flame emitter
virtual bool ShouldMarineFireExtinguish() { return false; } // is true, the marine emits fire extinguisher stuff from his emitter
virtual void OnMuzzleFlashed() { } // called when the weapon muzzle flashes
virtual bool HasMuzzleFlashSmoke() { return false; }
virtual void ASWReloadSound(int iType); // play one of the 3 part reload sounds
virtual const char* GetPartialReloadSound(int iPart);
virtual int GetChargesForHUD() { return Clip1(); }
virtual float GetBatteryCharge() { return -1.0f; } // for weapons which want a battery charge display on the HUD
virtual float GetMinBatteryChargeToActivate() { return -1.0f; }
virtual bool PrefersFlatAiming() const { return false; }
virtual void ClientThink();
float m_fLastMuzzleFlashTime;
float m_fMuzzleFlashScale;
virtual bool HasSecondaryExplosive( void ) const { return false; }
virtual bool IsCarriedByLocalPlayer( void );
virtual bool IsActiveByLocalPlayer( void );
virtual ShadowType_t ShadowCastType();
bool ShouldDraw();
virtual void MouseOverEntity(C_BaseEntity* pEnt, Vector vecWorldCursor) { }
// shared code
virtual void PrimaryAttack( void );
virtual void SecondaryAttack();
virtual bool SecondaryAttackUsesPrimaryAmmo() { return false; }
virtual bool ReloadOrSwitchWeapons( void );
virtual const char *GetASWShootSound( int iIndex, int &iPitch );
virtual void WeaponSound( WeaponSound_t sound_type, float soundtime = 0.0f );
virtual bool HasAmmo();
virtual bool PrimaryAmmoLoaded( void );
virtual float GetReloadTime();
virtual float GetReloadFailTime();
virtual bool Reload();
virtual bool ASWReload( int iClipSize1, int iClipSize2, int iActivity );
virtual void SendReloadEvents();
bool IsReloading() const;
virtual void FinishReload( void );
virtual float GetFireRate( void );
bool IsFiring();// const;
virtual void GetButtons(bool& bAttack1, bool& bAttack2, bool& bReload, bool& bOldReload, bool& bOldAttack1 );
virtual bool ShouldMarineMoveSlow();
virtual float GetMovementScale(); // get overall current movement scale (incorporates slowdown from heavy weapons, reloading, firing)
virtual float GetTurnRateModifier();
C_ASW_Player* GetCommander();
C_ASW_Marine* GetMarine();
virtual bool IsPredicted( void ) const;
bool Holster( CBaseCombatWeapon *pSwitchingTo );
virtual void Equip(CBaseCombatCharacter *pOwner);
virtual void SetWeaponVisible( bool visible );
virtual void ApplyWeaponSwitchTime();
bool m_bSwitchingWeapons;
virtual void SendWeaponSwitchEvents();
virtual const float GetAutoAimAmount();
virtual const float GetVerticalAdjustOnlyAutoAimAmount();
virtual const float GetAutoAimRadiusScale() { return 1.0f; }
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 void CalcBoneMerge( CStudioHdr *hdr, int boneMask, CBoneBitList &boneComputed );
virtual int ASW_SelectWeaponActivity(int idealActivity);
virtual float GetWeaponDamage();
virtual bool AllowsAutoSwitchFrom( void ) const;
virtual int AmmoClickPoint(); // when this many rounds or less left in the gun, it will click when firing
virtual void LowAmmoSound();
virtual bool IsOffensiveWeapon() { return true; } // is this weapon an offensive gun type weapon (as opposed to a utility item)
virtual bool DisplayClipsDoubled() { return false; } // dual weilded guns should show ammo doubled up to complete the illusion of holding two guns
virtual bool CanDoForcedAction( int iForcedAction ) { return true; } // check if we're allowed to perform a forced action (certain abilities limit this)
void PlaySoundDirectlyToOwner( const char *szSoundName );
void PlaySoundToOthers( const char *szSoundName );
virtual float GetPassiveMeleeDamageScale() { return 1.0f; }
virtual void OnStoppedFiring();
virtual void OnStartedRoll();
virtual void ClearIsFiring();
bool m_bIsFiring;
float m_fTurnRateModifier;
float m_fFiringTurnRateModifier;
float m_fReloadClearFiringTime;
// delayed firing (flares, hand grenades, etc.)
virtual void DelayedAttack() { }
virtual float GetThrowGravity() { return 1.0f; }
bool m_bShotDelayed;
float m_flDelayedFire;
bool bOldHidden;
// powerups
void MakePoweredUp( bool bPoweredUp ) { m_bPoweredUp = bPoweredUp; }
bool m_bPoweredUp;
// fast reload
float m_fReloadStart;
float m_fReloadProgress;
float m_fFastReloadStart;
float m_fFastReloadEnd;
bool m_bFastReloadSuccess;
bool m_bFastReloadFailure;
float m_flReloadFailTime; // time from when you fail an active reload until you can shoot again
// attachments
int m_nMuzzleAttachment;
int m_nLastMuzzleAttachment;
// ground shooting (aiming at the ground)
virtual bool SupportsGroundShooting() { return false; }
// Functions for weapons on the ground
virtual bool AllowedToPickup(C_ASW_Marine *pMarine);
bool m_bSwappingWeapon;
// check if this weapon wants to perform a sync kill
virtual bool CheckSyncKill( byte &forced_action, short &sync_kill_ent ) { return false; }
// IASW_Client_Usable_Entity
virtual C_BaseEntity* GetEntity() { return this; }
virtual bool IsUsable(C_BaseEntity *pUser);
virtual bool GetUseAction(ASWUseAction &action, C_ASW_Marine *pUser);
virtual void CustomPaint(int ix, int iy, int alpha, vgui::Panel *pUseIcon) { }
virtual bool ShouldPaintBoxAround() { return true; }
virtual bool NeedsLOSCheck() { return true; }
virtual int GetUseIconTextureID();
int m_nUseIconTextureID;
bool m_bWeaponCreated;
// laser pointer
virtual bool ShouldShowLaserPointer();
virtual bool ShouldAlignWeaponToLaserPointer();
void SimulateLaserPointer();
void CreateLaserPointerEffect( bool bLocalPlayer, int iAttachment );
void RemoveLaserPointerEffect();
CUtlReference<CNewParticleEffect> m_pLaserPointerEffect;
virtual float GetLaserPointerRange( void ) { return 600; }
void SetLaserTargetEntity( C_BaseEntity* pEnt ) { m_hLaserTargetEntity = pEnt; }
C_BaseEntity* GetLaserTargetEntity() { return m_hLaserTargetEntity.Get(); }
bool m_bLocalPlayerControlling;
EHANDLE m_hLaserTargetEntity;
Vector m_vecLaserPointerDirection;
// muzzle flash
void CreateMuzzleFlashEffect( int iAttachment );
void RemoveMuzzleFlashEffect();
CUtlReference<CNewParticleEffect> m_pMuzzleFlashEffect;
float m_fMuzzleFlashTime;
private:
C_ASW_Weapon( const C_ASW_Weapon & ); // not defined, not accessible
protected:
int m_iEquipmentListIndex;
CGlowObject m_GlowObject;
};
#endif /* _INCLUDED_C_ASW_WEAPON_H */