1
0
mirror of https://github.com/alliedmodders/hl2sdk.git synced 2025-01-08 10:13:28 +08:00
hl2sdk/game/shared/swarm/asw_weapon_heal_gun_shared.h
2010-07-22 01:46:14 -05:00

116 lines
3.6 KiB
C++

#ifndef _INCLUDED_ASW_WEAPON_HEAL_GUN_SHARED_H
#define _INCLUDED_ASW_WEAPON_HEAL_GUN_SHARED_H
#ifdef _WIN32
#pragma once
#endif
// Mining Laser
// "Weapon" that causes heat damage at short range. Can be used to blast through certain kinds of rocks.
#ifdef CLIENT_DLL
#include "c_asw_weapon.h"
#define CASW_Weapon_Heal_Gun C_ASW_Weapon_Heal_Gun
#else
#include "asw_weapon.h"
#endif
enum ASW_Weapon_HealGunFireState_t {
ASW_HG_FIRE_OFF,
ASW_HG_FIRE_DISCHARGE,
ASW_HG_FIRE_ATTACHED,
ASW_HG_FIRE_HEALSELF,
ASW_HG_NUM_FIRE_STATES
};
class CASW_Weapon_Heal_Gun : public CASW_Weapon
{
public:
DECLARE_CLASS( CASW_Weapon_Heal_Gun, CASW_Weapon );
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CASW_Weapon_Heal_Gun(void);
virtual void Precache( void );
virtual void PrimaryAttack( void );
virtual void SecondaryAttack();
virtual bool SecondaryAttackUsesPrimaryAmmo() { return true; }
virtual bool Reload( void );
virtual bool HasAmmo();
virtual void WeaponIdle( void );
virtual void ItemPostFrame();
virtual void ItemBusyFrame();
virtual void CheckEndFiringState();
virtual void UpdateOnRemove();
virtual const float GetAutoAimAmount() { return AUTOAIM_2DEGREES; };
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo = NULL );
virtual void Drop( const Vector &vecVelocity );
virtual bool ShouldMarineMoveSlow();
static float GetWeaponRange( void ) { return 240; }
virtual bool IsOffensiveWeapon() { return false; }
virtual Class_T Classify( void ) { return (Class_T)CLASS_ASW_HEAL_GUN; }
virtual bool DestroyOnButtonRelease() { return true; } // whether this item should destroy on release of the fire button or not
#ifdef CLIENT_DLL
virtual void MouseOverEntity(C_BaseEntity *pEnt, Vector vecWorldCursor);
virtual void ClientThink( void );
virtual const char* GetPartialReloadSound( int iPart );
virtual void UpdateEffects();
virtual bool ShouldShowLaserPointer();
virtual float GetLaserPointerRange( void ) { return 240; }// Give a chance for non-local weapons to update their effects on the client
#else
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; }
virtual void GetButtons(bool& bAttack1, bool& bAttack2, bool& bReload, bool& bOldReload, bool& bOldAttack1 );
float m_fLastForcedFireTime;
#endif
private:
void Attack( void );
void EndAttack( void );
void Fire( const Vector &vecOrigSrc, const Vector &vecDir );
void SetFiringState( ASW_Weapon_HealGunFireState_t state );
bool TargetCanBeHealed( CBaseEntity* pTargetMarine );
void HealSelf();
void HealEntity();
virtual int GetHealAmount();
virtual float GetInfestationCureAmount();
#ifdef GAME_DLL
//void DoArcingHeal( float flBaseDamage, CBaseEntity *pLastHealed );
#endif
public:
bool HealAttach( CBaseEntity *pEntity );
bool HasHealAttachTarget( void ) { return (m_hHealEntity.Get()) ? true : false; }
private:
void HealDetach();
void StartSearchSound();
void StartHealSound();
void StopHealSound();
CSoundPatch *m_pSearchSound;
CSoundPatch *m_pHealSound;
#ifdef CLIENT_DLL
CUtlReference<CNewParticleEffect> m_pDischargeEffect;
#endif
CNetworkVar(unsigned char, m_FireState); // one of the ASW_Weapon_HealGunFireState_t enums
CNetworkVar(float, m_fSlowTime); // marine moves slow until this moment
CNetworkVar(EHANDLE, m_hHealEntity); // entity we're attached too and healing
CNetworkVar(Vector, m_vecHealPos); // place we're zapping
float m_flLastDischargeTime;
trace_t m_AttackTrace;
float m_flLastHealTime;
float m_flNextHealMessageTime;
float m_flTotalAmountHealed;
};
#endif // _INCLUDED_ASW_WEAPON_HEAL_GUN_SHARED_H