source-engine/game/server/hl2/grenade_bugbait.h

136 lines
2.8 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef GRENADE_BUGBAIT_H
#define GRENADE_BUGBAIT_H
#ifdef _WIN32
#pragma once
#endif
#include "smoke_trail.h"
#include "basegrenade_shared.h"
//Radius of the bugbait's effect on other creatures
extern ConVar bugbait_radius;
extern ConVar bugbait_hear_radius;
extern ConVar bugbait_distract_time;
extern ConVar bugbait_grenade_radius;
#define SF_BUGBAIT_SUPPRESS_CALL 0x00000001
#define SF_BUGBAIT_NOT_THROWN 0x00000002 // Don't detect player throwing the bugbait near this point
#define SF_BUGBAIT_NOT_SQUEEZE 0x00000004 // Don't detect player squeezing the bugbait
//=============================================================================
// Bugbait sensor
//=============================================================================
class CBugBaitSensor : public CPointEntity
{
public:
DECLARE_CLASS( CBugBaitSensor, CPointEntity );
DECLARE_DATADESC();
CBugBaitSensor( void );
~CBugBaitSensor( void );
bool Baited( CBaseEntity *pOther )
{
if ( !m_bEnabled )
return false;
m_OnBaited.FireOutput( pOther, this );
return true;
}
void InputEnable( inputdata_t &data )
{
m_bEnabled = true;
}
void InputDisable( inputdata_t &data )
{
m_bEnabled = false;
}
void InputToggle( inputdata_t &data )
{
m_bEnabled = !m_bEnabled;
}
bool SuppressCall( void )
{
return ( HasSpawnFlags( SF_BUGBAIT_SUPPRESS_CALL ) );
}
bool DetectsSqueeze( void )
{
return ( !HasSpawnFlags( SF_BUGBAIT_NOT_SQUEEZE ) );
}
bool DetectsThrown( void )
{
return ( !HasSpawnFlags( SF_BUGBAIT_NOT_THROWN ) );
}
float GetRadius( void ) const
{
if ( m_flRadius == 0 )
return bugbait_radius.GetFloat();
return m_flRadius;
}
bool IsDisabled( void ) const
{
return !m_bEnabled;
}
protected:
float m_flRadius;
bool m_bEnabled;
COutputEvent m_OnBaited;
public:
CBugBaitSensor *m_pNext;
};
//
// Bug Bait Grenade
//
class CGrenadeBugBait : public CBaseGrenade
{
DECLARE_CLASS( CGrenadeBugBait, CBaseGrenade );
public:
void Spawn( void );
void Precache( void );
void ThinkBecomeSolid( void );
void SetGracePeriod( float duration );
void BugBaitTouch( CBaseEntity *pOther );
// Activate nearby bugbait targets
static bool ActivateBugbaitTargets( CBaseEntity *pOwner, Vector vecOrigin, bool bSqueezed );
DECLARE_DATADESC();
protected:
void CreateTarget( const Vector &position, CBaseEntity *pOther );
float m_flGracePeriodEndsAt;
SporeTrail *m_pSporeTrail;
};
extern CGrenadeBugBait *BugBaitGrenade_Create( const Vector &position, const QAngle &angles, const Vector &velocity, const QAngle &angVelocity, CBaseEntity *owner );
#endif // GRENADE_BUGBAIT_H