summaryrefslogtreecommitdiff
path: root/game/server/hl2/grenade_bugbait.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/hl2/grenade_bugbait.h')
-rw-r--r--game/server/hl2/grenade_bugbait.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/game/server/hl2/grenade_bugbait.h b/game/server/hl2/grenade_bugbait.h
new file mode 100644
index 0000000..7a5df99
--- /dev/null
+++ b/game/server/hl2/grenade_bugbait.h
@@ -0,0 +1,135 @@
+//========= 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