119 lines
3.1 KiB
C++
119 lines
3.1 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef GRENADE_BUGBAIT_H
|
|
#define GRENADE_BUGBAIT_H
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "basegrenade_shared.h"
|
|
#include "smoke_trail.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
|