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