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.
128 lines
3.4 KiB
128 lines
3.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: CTF Flag Capture Zone. |
|
// |
|
//=============================================================================// |
|
#ifndef FUNC_CAPTURE_ZONE_H |
|
#define FUNC_CAPTURE_ZONE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "triggers.h" |
|
|
|
// This class is to get around the fact that DEFINE_FUNCTION doesn't like multiple inheritance |
|
class CCaptureZoneShim : public CBaseTrigger |
|
{ |
|
virtual void ShimTouch( CBaseEntity *pOther ) = 0; |
|
public: |
|
void Touch( CBaseEntity *pOther ) { return ShimTouch( pOther ) ; } |
|
}; |
|
|
|
//============================================================================= |
|
// |
|
// CTF Flag Capture Zone class. |
|
// |
|
DECLARE_AUTO_LIST( ICaptureZoneAutoList ); |
|
class CCaptureZone : public CCaptureZoneShim, public ICaptureZoneAutoList |
|
{ |
|
DECLARE_CLASS( CCaptureZone, CCaptureZoneShim ); |
|
|
|
public: |
|
DECLARE_SERVERCLASS(); |
|
|
|
CCaptureZone(); |
|
|
|
void Spawn(); |
|
virtual void Activate(); |
|
virtual void ShimTouch( CBaseEntity *pOther ) OVERRIDE; |
|
|
|
void Capture( CBaseEntity *pOther ); |
|
|
|
bool IsDisabled( void ); |
|
void SetDisabled( bool bDisabled ); |
|
|
|
// Input handlers |
|
void InputEnable( inputdata_t &inputdata ); |
|
void InputDisable( inputdata_t &inputdata ); |
|
|
|
int UpdateTransmitState( void ); |
|
|
|
void PlayerDestructionThink( void ); |
|
|
|
private: |
|
|
|
CNetworkVar( bool, m_bDisabled ); // Enabled/Disabled? |
|
|
|
int m_nCapturePoint; // Used in non-CTF maps to identify this capture point |
|
|
|
COutputEvent m_outputOnCapture; // Fired a flag is captured on this point. |
|
COutputEvent m_OnCapTeam1; |
|
COutputEvent m_OnCapTeam2; |
|
COutputEvent m_OnCapTeam1_PD; |
|
COutputEvent m_OnCapTeam2_PD; |
|
|
|
DECLARE_DATADESC(); |
|
|
|
float m_flNextTouchingEnemyZoneWarning; // don't spew warnings to the player who is touching the wrong cap |
|
bool m_bShouldBlock; |
|
float m_flCaptureDelay; |
|
float m_flCaptureDelayOffset; |
|
}; |
|
|
|
|
|
//============================================================================= |
|
// |
|
// CTF Flag Detection Zone class. |
|
// |
|
DECLARE_AUTO_LIST( IFlagDetectionZoneAutoList ); |
|
class CFlagDetectionZone : public CBaseTrigger, public IFlagDetectionZoneAutoList |
|
{ |
|
DECLARE_CLASS( CFlagDetectionZone, CBaseTrigger ); |
|
|
|
public: |
|
|
|
CFlagDetectionZone(); |
|
|
|
void Spawn(); |
|
void StartTouch( CBaseEntity *pOther ); |
|
void EndTouch( CBaseEntity *pOther ); |
|
|
|
bool IsDisabled( void ) { return m_bDisabled; } |
|
void SetDisabled( bool bDisabled ); |
|
bool IsAlarmZone( void ){ return m_bShouldAlarm; } |
|
|
|
// Input handlers |
|
void InputEnable( inputdata_t &inputdata ); |
|
void InputDisable( inputdata_t &inputdata ); |
|
void InputTest( inputdata_t &inputdata ); |
|
|
|
void FlagDropped( CBasePlayer *pPlayer ); |
|
void FlagPickedUp( CBasePlayer *pPlayer ); |
|
void FlagCaptured( CBasePlayer *pPlayer ); |
|
|
|
private: |
|
|
|
bool EntityIsFlagCarrier( CBaseEntity *pEntity ); |
|
|
|
bool m_bDisabled; // Enabled/Disabled? |
|
bool m_bShouldAlarm; |
|
|
|
COutputEvent m_outputOnStartTouchFlag; // Fired when a flag or player holding the flag touches |
|
COutputEvent m_outputOnEndTouchFlag; |
|
COutputEvent m_outputOnDroppedFlag; |
|
COutputEvent m_outputOnPickedUpFlag; |
|
|
|
// Entities currently being touched by this trigger |
|
CUtlVector< EHANDLE > m_hTouchingPlayers; |
|
|
|
DECLARE_DATADESC(); |
|
}; |
|
|
|
// Fire output for detection zones if entity is in a the zone |
|
void HandleFlagDroppedInDetectionZone( CBasePlayer *pPlayer ); |
|
void HandleFlagPickedUpInDetectionZone( CBasePlayer *pPlayer ); |
|
void HandleFlagCapturedInDetectionZone( CBasePlayer *pPlayer ); |
|
|
|
|
|
#endif // FUNC_CAPTURE_ZONE_H
|
|
|