This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

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