summaryrefslogtreecommitdiff
path: root/game/server/team_control_point.h
diff options
context:
space:
mode:
Diffstat (limited to 'game/server/team_control_point.h')
-rw-r--r--game/server/team_control_point.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/game/server/team_control_point.h b/game/server/team_control_point.h
new file mode 100644
index 0000000..7c957ec
--- /dev/null
+++ b/game/server/team_control_point.h
@@ -0,0 +1,198 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef TEAM_CONTROL_POINT_H
+#define TEAM_CONTROL_POINT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "basemultiplayerplayer.h"
+
+// Spawnflags
+#define SF_CAP_POINT_HIDEFLAG (1<<0)
+#define SF_CAP_POINT_HIDE_MODEL (1<<1)
+#define SF_CAP_POINT_HIDE_SHADOW (1<<2)
+#define SF_CAP_POINT_NO_CAP_SOUNDS (1<<3)
+#define SF_CAP_POINT_BOTS_IGNORE (1<<4)
+//#define SF_CAP_POINT_NO_ANNOUNCER (1<<4) Unused?
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class CTeamControlPoint : public CBaseAnimating
+{
+ DECLARE_CLASS( CTeamControlPoint, CBaseAnimating );
+public:
+ DECLARE_DATADESC();
+
+ CTeamControlPoint();
+
+ // Derived, game-specific control points must override these functions
+public:
+ // Used to find game specific entities
+ virtual const char *GetControlPointMasterName( void ) { return "team_control_point_master"; }
+
+public:
+ virtual void Spawn( void );
+ virtual bool KeyValue( const char *szKeyName, const char *szValue );
+ virtual void Precache( void );
+ virtual int DrawDebugTextOverlays( void );
+
+ //Inputs
+ inline void Enable( inputdata_t &input ) { SetActive( false ); }
+ inline void Disable( inputdata_t &input ) { SetActive( true ); }
+ void InputReset( inputdata_t &input );
+ void InputSetOwner( inputdata_t &input );
+ void InputShowModel( inputdata_t &input );
+ void InputHideModel( inputdata_t &input );
+ void InputRoundActivate( inputdata_t &inputdata );
+ void InputSetLocked( inputdata_t &inputdata );
+ void InputSetUnlockTime( inputdata_t &inputdata );
+
+ // Owner handling
+ void ForceOwner( int iTeam ); // used when selecting a specific round to play
+ void SetOwner( int iCapTeam, bool bMakeSound = true, int iNumCappers = 0, int *iCappingPlayers = NULL );
+ int GetOwner( void ) const;
+ int GetDefaultOwner( void ) const;
+ bool RandomOwnerOnRestart( void ){ return m_bRandomOwnerOnRestart; }
+
+ void SetActive( bool active );
+ inline bool IsActive( void ) { return m_bActive; }
+ void AnimThink( void );
+
+ bool PointIsVisible( void ) { return !( FBitSet( m_spawnflags, SF_CAP_POINT_HIDEFLAG ) ); }
+
+ inline const char *GetName( void ) { return STRING(m_iszPrintName); }
+ int GetCPGroup( void );
+ int GetPointIndex( void ) { return m_iPointIndex; }
+ void SetPointIndex( int index ) { m_iPointIndex = index; }
+
+ int GetWarnOnCap( void ) { return m_iWarnOnCap; }
+ string_t GetWarnSound( void ) { return m_iszWarnSound; }
+
+ int GetTeamIcon( int iTeam );
+
+ int GetCurrentHudIconIndex( void );
+ int GetHudIconIndexForTeam( int iGameTeam );
+ int GetHudOverlayIndexForTeam( int iGameTeam );
+ int GetPreviousPointForTeam( int iGameTeam, int iPrevPoint );
+
+ void SetCappersRequiredForTeam( int iGameTeam, int iCappers );
+
+ void CaptureBlocked( CBaseMultiplayerPlayer *pPlayer, CBaseMultiplayerPlayer *pVictim );
+
+ int PointValue( void );
+
+ bool HasBeenContested( void ) const; // return true if this point has ever been contested, false if the enemy has never contested this point yet
+ float LastContestedAt( void );
+ void SetLastContestedAt( float flTime );
+
+ void UpdateCapPercentage( void );
+ float GetTeamCapPercentage( int iTeam );
+
+ // The specified player took part in capping this point.
+ virtual void PlayerCapped( CBaseMultiplayerPlayer *pPlayer );
+
+ // The specified player blocked the enemy team from capping this point.
+ virtual void PlayerBlocked( CBaseMultiplayerPlayer *pPlayer );
+
+ void CaptureEnd( void );
+ void CaptureStart( int iCapTeam, int iNumCappingPlayers, int *pCappingPlayers );
+ void CaptureInterrupted( bool bBlocked );
+
+ virtual void StopLoopingSounds( void );
+
+ bool IsLocked( void ){ return m_bLocked; }
+ bool ShouldBotsIgnore( void ) { return m_bBotsIgnore; }
+
+ void EXPORT UnlockThink( void );
+
+private:
+ void SendCapString( int iCapTeam, int iNumCappingPlayers, int *pCappingPlayers );
+ void InternalSetOwner( int iCapTeam, bool bMakeSound = true, int iNumCappers = 0, int *iCappingPlayers = NULL );
+ void HandleScoring( int iTeam );
+ void InternalSetLocked( bool bLocked );
+
+ int m_iTeam;
+ int m_iDefaultOwner; // Team that initially owns the cap point
+ int m_iIndex; // The index of this point in the controlpointArray
+ int m_iWarnOnCap; // Warn the team that owns the control point when the opposing team starts to capture it.
+ string_t m_iszPrintName;
+ string_t m_iszWarnSound; // Sound played if the team needs to be warned about this point being captured
+ bool m_bRandomOwnerOnRestart; // Do we want to randomize the owner after a restart?
+ bool m_bLocked;
+ float m_flUnlockTime; // Time to unlock
+
+ // We store a copy of this data for each team, +1 for the un-owned state.
+ struct perteamdata_t
+ {
+ perteamdata_t()
+ {
+ iszCapSound = NULL_STRING;
+ iszModel = NULL_STRING;
+ iModelBodygroup = -1;
+ iIcon = 0;
+ iszIcon = NULL_STRING;
+ iOverlay = 0;
+ iszOverlay = NULL_STRING;
+ iPlayersRequired = 0;
+ iTimedPoints = 0;
+ for ( int i = 0; i < MAX_PREVIOUS_POINTS; i++ )
+ {
+ iszPreviousPoint[i] = NULL_STRING;
+ }
+ iTeamPoseParam = 0;
+ }
+
+ string_t iszCapSound;
+ string_t iszModel;
+ int iModelBodygroup;
+ int iTeamPoseParam;
+ int iIcon;
+ string_t iszIcon;
+ int iOverlay;
+ string_t iszOverlay;
+ int iPlayersRequired;
+ int iTimedPoints;
+ string_t iszPreviousPoint[MAX_PREVIOUS_POINTS];
+ };
+ CUtlVector<perteamdata_t> m_TeamData;
+
+ COutputEvent m_OnCapReset;
+
+ COutputEvent m_OnCapTeam1;
+ COutputEvent m_OnCapTeam2;
+
+ COutputEvent m_OnOwnerChangedToTeam1;
+ COutputEvent m_OnOwnerChangedToTeam2;
+
+ COutputEvent m_OnRoundStartOwnedByTeam1;
+ COutputEvent m_OnRoundStartOwnedByTeam2;
+
+ COutputEvent m_OnUnlocked;
+
+ int m_bPointVisible; //should this capture point be visible on the hud?
+ int m_iPointIndex; //the mapper set index value of this control point
+
+ int m_iCPGroup; //the group that this control point belongs to
+ bool m_bActive; //
+
+ string_t m_iszName; //Name used in cap messages
+
+ bool m_bStartDisabled;
+
+ float m_flLastContestedAt;
+
+ CSoundPatch *m_pCaptureInProgressSound;
+ string_t m_iszCaptureStartSound;
+ string_t m_iszCaptureEndSound;
+ string_t m_iszCaptureInProgress;
+ string_t m_iszCaptureInterrupted;
+ bool m_bBotsIgnore;
+};
+
+#endif // TEAM_CONTROL_POINT_H