Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.

100 lines
2.4 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef WEAPON_DRAINBEAM_H
#define WEAPON_DRAINBEAM_H
#ifdef _WIN32
#pragma once
#endif
#include "weapon_combat_usedwithshieldbase.h"
#if defined( CLIENT_DLL )
#define CWeaponDrainBeam C_WeaponDrainBeam
#endif
//=========================================================
// Medikit Weapon
//=========================================================
class CWeaponDrainBeam : public CWeaponCombatUsedWithShieldBase
{
DECLARE_CLASS( CWeaponDrainBeam, CWeaponCombatUsedWithShieldBase );
public:
DECLARE_NETWORKCLASS();
DECLARE_PREDICTABLE();
CWeaponDrainBeam( void );
virtual void Precache();
virtual bool Holster( CBaseCombatWeapon *pSwitchingTo );
virtual void ItemPostFrame( void );
virtual void PrimaryAttack( void );
virtual void WeaponIdle( void );
virtual void PlayAttackAnimation( int activity );
virtual void GainedNewTechnology( CBaseTechnology *pTechnology );
// Draining
CBaseEntity *GetTargetToDrain( CBaseEntity *pCurDrainTarget );
CBaseEntity *GetCurDrainTarget( void ) { return m_hDrainTarget; }
void RemoveDrainTarget( void );
// All predicted weapons need to implement and return true
virtual bool IsPredicted( void ) const
{
return true;
}
#if defined( CLIENT_DLL )
virtual bool ShouldPredict( void )
{
if ( GetOwner() == C_BasePlayer::GetLocalPlayer() )
return true;
return BaseClass::ShouldPredict();
}
// Stop all sounds being output.
void StopDrainSound( bool bStopHealingSound = true, bool bStopNoTargetSound = true );
// IClientNetworkable.
public:
virtual void OnDataChanged( DataUpdateType_t updateType );
// IClientThinkable.
public:
virtual void ClientThink();
#endif
public:
CNetworkHandle( CBaseEntity, m_hDrainTarget );
// Networked data.
public:
CNetworkVar( bool, m_bDraining );
CNetworkVar( bool, m_bAttacking );
CNetworkVector( m_vFireTarget );
#if defined( CLIENT_DLL )
CSmartPtr<CSimpleEmitter> m_pEmitter;
PMaterialHandle m_hParticleMaterial;
TimedEvent m_PathParticleEvent;
TimedEvent m_DribbleParticleEvent;
bool m_bPlayingSound;
#else
float m_flDrainStartedAt;
#endif
private:
double m_flNextBuzzTime;
CWeaponDrainBeam( const CWeaponDrainBeam & );
};
#endif // WEAPON_DRAINBEAM_H