summaryrefslogtreecommitdiff
path: root/game/server/team_objectiveresource.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/team_objectiveresource.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/server/team_objectiveresource.h')
-rw-r--r--game/server/team_objectiveresource.h242
1 files changed, 242 insertions, 0 deletions
diff --git a/game/server/team_objectiveresource.h b/game/server/team_objectiveresource.h
new file mode 100644
index 0000000..81f2f06
--- /dev/null
+++ b/game/server/team_objectiveresource.h
@@ -0,0 +1,242 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef TEAM_OBJECTIVERESOURCE_H
+#define TEAM_OBJECTIVERESOURCE_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "shareddefs.h"
+
+#define TEAM_ARRAY( index, team ) (index + (team * MAX_CONTROL_POINTS))
+
+//-----------------------------------------------------------------------------
+// Purpose: An entity that networks the state of the game's objectives.
+// May contain data for objectives that aren't used by your mod, but
+// the extra data will never be networked as long as it's zeroed out.
+//-----------------------------------------------------------------------------
+class CBaseTeamObjectiveResource : public CBaseEntity
+{
+ DECLARE_CLASS( CBaseTeamObjectiveResource, CBaseEntity );
+public:
+ DECLARE_SERVERCLASS();
+ DECLARE_DATADESC();
+
+ CBaseTeamObjectiveResource();
+ ~CBaseTeamObjectiveResource();
+
+ virtual void Spawn( void );
+ virtual int UpdateTransmitState(void);
+
+ virtual void ObjectiveThink( void );
+
+ //--------------------------------------------------------------------
+ // CONTROL POINT DATA
+ //--------------------------------------------------------------------
+public:
+ void ResetControlPoints( void );
+
+ // Data functions, called to set up the state at the beginning of a round
+ void SetNumControlPoints( int num );
+ int GetNumControlPoints( void ) { return m_iNumControlPoints; }
+ void SetCPIcons( int index, int iTeam, int iIcon );
+ void SetCPOverlays( int index, int iTeam, int iIcon );
+ void SetTeamBaseIcons( int iTeam, int iBaseIcon );
+ void SetCPPosition( int index, const Vector& vPosition );
+ void SetCPVisible( int index, bool bVisible );
+ void SetCPRequiredCappers( int index, int iTeam, int iReqPlayers );
+ void SetCPCapTime( int index, int iTeam, float flTime );
+ void SetCPCapPercentage( int index, float flTime );
+ float GetCPCapPercentage( int index );
+ void SetTeamCanCap( int index, int iTeam, bool bCanCap );
+ void SetBaseCP( int index, int iTeam );
+ void SetPreviousPoint( int index, int iTeam, int iPrevIndex, int iPrevPoint );
+ int GetPreviousPointForPoint( int index, int team, int iPrevIndex );
+ bool TeamCanCapPoint( int index, int team );
+ void SetCapLayoutInHUD( const char *pszLayout ) { Q_strncpy(m_pszCapLayoutInHUD.GetForModify(), pszLayout, MAX_CAPLAYOUT_LENGTH ); }
+ void SetCapLayoutCustomPosition( float flPositionX, float flPositionY ) { m_flCustomPositionX = flPositionX; m_flCustomPositionY = flPositionY; }
+ void SetWarnOnCap( int index, int iWarnLevel );
+ void SetWarnSound( int index, string_t iszSound );
+ void SetCPGroup( int index, int iCPGroup );
+ void SetCPLocked( int index, bool bLocked );
+ void SetTrackAlarm( int index, bool bAlarm );
+ void SetCPUnlockTime( int index, float flTime );
+ void SetCPTimerTime( int index, float flTime );
+ void SetCPCapTimeScalesWithPlayers( int index, bool bScales );
+
+ // State functions, called many times
+ void SetNumPlayers( int index, int team, int iNumPlayers );
+ void StartCap( int index, int team );
+ void SetOwningTeam( int index, int team );
+ void SetCappingTeam( int index, int team );
+ void SetTeamInZone( int index, int team );
+ void SetCapBlocked( int index, bool bBlocked );
+ int GetOwningTeam( int index );
+
+ void AssertValidIndex( int index )
+ {
+ Assert( 0 <= index && index <= MAX_CONTROL_POINTS && index < m_iNumControlPoints );
+ }
+
+ int GetBaseControlPointForTeam( int iTeam )
+ {
+ Assert( iTeam < MAX_TEAMS );
+ return m_iBaseControlPoints[iTeam];
+ }
+
+ int GetCappingTeam( int index )
+ {
+ if ( index >= m_iNumControlPoints )
+ return TEAM_UNASSIGNED;
+
+ return m_iCappingTeam[index];
+ }
+
+ void SetTimerInHUD( CBaseEntity *pTimer )
+ {
+ m_iTimerToShowInHUD = pTimer ? pTimer->entindex() : 0;
+ }
+
+
+ void SetStopWatchTimer( CBaseEntity *pTimer )
+ {
+ m_iStopWatchTimer = pTimer ? pTimer->entindex() : 0;
+ }
+
+ int GetStopWatchTimer( void ) { return m_iStopWatchTimer; }
+
+ int GetTimerInHUD( void ) { return m_iTimerToShowInHUD; }
+
+ // Mini-rounds data
+ void SetPlayingMiniRounds( bool bPlayingMiniRounds ){ m_bPlayingMiniRounds = bPlayingMiniRounds; }
+ bool PlayingMiniRounds( void ){ return m_bPlayingMiniRounds; }
+ void SetInMiniRound( int index, bool bInRound ) { m_bInMiniRound.Set( index, bInRound ); }
+ bool IsInMiniRound( int index ) { return m_bInMiniRound[index]; }
+
+ void UpdateCapHudElement( void );
+
+ // Train Path data
+ void SetTrainPathDistance( int index, float flDistance );
+
+ bool GetCPLocked( int index )
+ {
+ Assert( index < m_iNumControlPoints );
+ return m_bCPLocked[index];
+ }
+
+ void ResetHillData( int team )
+ {
+ if ( team < TEAM_TRAIN_MAX_TEAMS )
+ {
+ m_nNumNodeHillData.Set( team, 0 );
+
+ int nNumEntriesPerTeam = TEAM_TRAIN_MAX_HILLS * TEAM_TRAIN_FLOATS_PER_HILL;
+ int iStartingIndex = team * nNumEntriesPerTeam;
+ for ( int i = 0 ; i < nNumEntriesPerTeam ; i++ )
+ {
+ m_flNodeHillData.Set( iStartingIndex + i, 0 );
+ }
+
+ iStartingIndex = team * TEAM_TRAIN_MAX_HILLS;
+ for ( int i = 0; i < TEAM_TRAIN_MAX_HILLS; i++ )
+ {
+ m_bHillIsDownhill.Set( iStartingIndex + i, 0 );
+ }
+ }
+ }
+
+ void SetHillData( int team, float flStart, float flEnd, bool bDownhill )
+ {
+ if ( team < TEAM_TRAIN_MAX_TEAMS )
+ {
+ int index = ( m_nNumNodeHillData[team] * TEAM_TRAIN_FLOATS_PER_HILL ) + ( team * TEAM_TRAIN_MAX_HILLS * TEAM_TRAIN_FLOATS_PER_HILL );
+ if ( index < TEAM_TRAIN_HILLS_ARRAY_SIZE - 1 ) // - 1 because we want to add 2 entries
+ {
+ m_flNodeHillData.Set( index, flStart );
+ m_flNodeHillData.Set( index + 1, flEnd );
+
+ if ( m_nNumNodeHillData[team] < TEAM_TRAIN_MAX_HILLS )
+ {
+ m_bHillIsDownhill.Set( m_nNumNodeHillData[team] + ( team * TEAM_TRAIN_MAX_HILLS ), bDownhill );
+ }
+
+ m_nNumNodeHillData.Set( team, m_nNumNodeHillData[team] + 1);
+ }
+ }
+ }
+
+private:
+ CNetworkVar( int, m_iTimerToShowInHUD );
+ CNetworkVar( int, m_iStopWatchTimer );
+
+ CNetworkVar( int, m_iNumControlPoints );
+ CNetworkVar( bool, m_bPlayingMiniRounds );
+ CNetworkVar( bool, m_bControlPointsReset );
+ CNetworkVar( int, m_iUpdateCapHudParity );
+
+ // data variables
+ CNetworkArray( Vector, m_vCPPositions, MAX_CONTROL_POINTS );
+ CNetworkArray( int, m_bCPIsVisible, MAX_CONTROL_POINTS );
+ CNetworkArray( float, m_flLazyCapPerc, MAX_CONTROL_POINTS );
+ CNetworkArray( int, m_iTeamIcons, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+ CNetworkArray( int, m_iTeamOverlays, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+ CNetworkArray( int, m_iTeamReqCappers, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+ CNetworkArray( float, m_flTeamCapTime, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+ CNetworkArray( int, m_iPreviousPoints, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS * MAX_PREVIOUS_POINTS );
+ CNetworkArray( bool, m_bTeamCanCap, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+ CNetworkArray( int, m_iTeamBaseIcons, MAX_TEAMS );
+ CNetworkArray( int, m_iBaseControlPoints, MAX_TEAMS );
+ CNetworkArray( bool, m_bInMiniRound, MAX_CONTROL_POINTS );
+ CNetworkArray( int, m_iWarnOnCap, MAX_CONTROL_POINTS );
+ CNetworkArray( string_t, m_iszWarnSound, MAX_CONTROL_POINTS );
+ CNetworkArray( float, m_flPathDistance, MAX_CONTROL_POINTS );
+ CNetworkArray( bool, m_bCPLocked, MAX_CONTROL_POINTS );
+ CNetworkArray( float, m_flUnlockTimes, MAX_CONTROL_POINTS );
+ CNetworkArray( float, m_flCPTimerTimes, MAX_CONTROL_POINTS );
+
+ // change when players enter/exit an area
+ CNetworkArray( int, m_iNumTeamMembers, MAX_CONTROL_POINTS * MAX_CONTROL_POINT_TEAMS );
+
+ // changes when a cap starts. start and end times are calculated on client
+ CNetworkArray( int, m_iCappingTeam, MAX_CONTROL_POINTS );
+
+ CNetworkArray( int, m_iTeamInZone, MAX_CONTROL_POINTS );
+ CNetworkArray( bool, m_bBlocked, MAX_CONTROL_POINTS );
+
+ // changes when a point is successfully captured
+ CNetworkArray( int, m_iOwner, MAX_CONTROL_POINTS );
+ CNetworkArray( bool, m_bCPCapRateScalesWithPlayers, MAX_CONTROL_POINTS );
+
+ // describes how to lay out the cap points in the hud
+ CNetworkString( m_pszCapLayoutInHUD, MAX_CAPLAYOUT_LENGTH );
+
+ // custom screen position for the cap points in the hud
+ CNetworkVar( float, m_flCustomPositionX );
+ CNetworkVar( float, m_flCustomPositionY );
+
+ // the groups the points belong to
+ CNetworkArray( int, m_iCPGroup, MAX_CONTROL_POINTS );
+
+ // Not networked, because the client recalculates it
+ float m_flCapPercentages[ MAX_CONTROL_POINTS ];
+
+ // hill data for multi-escort payload maps
+ CNetworkArray( int, m_nNumNodeHillData, TEAM_TRAIN_MAX_TEAMS );
+ CNetworkArray( float, m_flNodeHillData, TEAM_TRAIN_HILLS_ARRAY_SIZE );
+
+ CNetworkArray( bool, m_bTrackAlarm, TEAM_TRAIN_MAX_TEAMS );
+ CNetworkArray( bool, m_bHillIsDownhill, TEAM_TRAIN_MAX_HILLS*TEAM_TRAIN_MAX_TEAMS );
+};
+
+extern CBaseTeamObjectiveResource *g_pObjectiveResource;
+
+inline CBaseTeamObjectiveResource *ObjectiveResource()
+{
+ return g_pObjectiveResource;
+}
+
+#endif // TEAM_OBJECTIVERESOURCE_H