diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf/entity_capture_flag.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/shared/tf/entity_capture_flag.h')
| -rw-r--r-- | game/shared/tf/entity_capture_flag.h | 453 |
1 files changed, 453 insertions, 0 deletions
diff --git a/game/shared/tf/entity_capture_flag.h b/game/shared/tf/entity_capture_flag.h new file mode 100644 index 0000000..d4cefa8 --- /dev/null +++ b/game/shared/tf/entity_capture_flag.h @@ -0,0 +1,453 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: CTF Flag. +// +//=============================================================================// +#ifndef ENTITY_CAPTURE_FLAG_H +#define ENTITY_CAPTURE_FLAG_H +#ifdef _WIN32 +#pragma once +#endif + +#include "tf_item.h" +#include "tf_shareddefs.h" + +#ifdef CLIENT_DLL +#define CCaptureFlag C_CaptureFlag +#else +class CTFBot; +#endif + +#define TF_FLAG_THINK_TIME 0.25f +#define TF_FLAG_OWNER_PICKUP_TIME 3.0f + +#define TF_FLAG_TRAIL_ALPHA 96 +#define TF_FLAG_NUMBEROFSKINS 3 + +#define TF_FLAG_MODEL "models/flag/briefcase.mdl" +#define TF_FLAG_ICON "../hud/objectives_flagpanel_carried" +#define TF_FLAG_EFFECT "player_intel_papertrail" +#define TF_FLAG_TRAIL "flagtrail" + +//============================================================================= +// +// CTF Flag defines. +// + +#define TF_CTF_ENEMY_STOLEN "CaptureFlag.EnemyStolen" +#define TF_CTF_ENEMY_DROPPED "CaptureFlag.EnemyDropped" +#define TF_CTF_ENEMY_CAPTURED "CaptureFlag.EnemyCaptured" +#define TF_CTF_ENEMY_RETURNED "CaptureFlag.EnemyReturned" + +#define TF_CTF_TEAM_STOLEN "CaptureFlag.TeamStolen" +#define TF_CTF_TEAM_DROPPED "CaptureFlag.TeamDropped" +#define TF_CTF_TEAM_CAPTURED "CaptureFlag.TeamCaptured" +#define TF_CTF_TEAM_RETURNED "CaptureFlag.TeamReturned" + +#define TF_CTF_FLAGSPAWN "CaptureFlag.FlagSpawn" + +#define TF_CTF_CAPTURED_TEAM_SCORE 1 + +//============================================================================= +// +// Attack/Defend Flag defines. +// + +#define TF_AD_ENEMY_STOLEN "AttackDefend.EnemyStolen" +#define TF_AD_ENEMY_DROPPED "AttackDefend.EnemyDropped" +#define TF_AD_ENEMY_CAPTURED "AttackDefend.EnemyCaptured" +#define TF_AD_ENEMY_RETURNED "AttackDefend.EnemyReturned" + +#define TF_MVM_AD_ENEMY_STOLEN "MVM.AttackDefend.EnemyStolen" +#define TF_MVM_AD_ENEMY_DROPPED "MVM.AttackDefend.EnemyDropped" +#define TF_MVM_AD_ENEMY_CAPTURED "MVM.AttackDefend.EnemyCaptured" +#define TF_MVM_AD_ENEMY_RETURNED "MVM.AttackDefend.EnemyReturned" + +#define TF_AD_TEAM_STOLEN "AttackDefend.TeamStolen" +#define TF_AD_TEAM_DROPPED "AttackDefend.TeamDropped" +#define TF_AD_TEAM_CAPTURED "AttackDefend.TeamCaptured" +#define TF_AD_TEAM_RETURNED "AttackDefend.TeamReturned" + +#define TF_AD_CAPTURED_SOUND "AttackDefend.Captured" + +//============================================================================= +// +// Invade Flag defines. +// + +#define TF_INVADE_ENEMY_STOLEN "Invade.EnemyStolen" +#define TF_INVADE_ENEMY_DROPPED "Invade.EnemyDropped" +#define TF_INVADE_ENEMY_CAPTURED "Invade.EnemyCaptured" + +#define TF_INVADE_TEAM_STOLEN "Invade.TeamStolen" +#define TF_INVADE_TEAM_DROPPED "Invade.TeamDropped" +#define TF_INVADE_TEAM_CAPTURED "Invade.TeamCaptured" + +#define TF_INVADE_FLAG_RETURNED "Invade.FlagReturned" + +#define TF_INVADE_CAPTURED_TEAM_SCORE 1 + +#define TF_INVADE_NEUTRAL_TIME 30.0f + +//============================================================================= +// +// Resource Flag defines. +// + +#define TF_RESOURCE_FLAGSPAWN "Resource.FlagSpawn" + +#define TF_RESOURCE_ENEMY_STOLEN "Announcer.SD_TheirTeamHasFlag" +#define TF_RESOURCE_ENEMY_DROPPED "Announcer.SD_TheirTeamDroppedFlag" +#define TF_RESOURCE_ENEMY_CAPTURED "Announcer.SD_TheirTeamCapped" +#define TF_RESOURCE_TEAM_STOLEN "Announcer.SD_OurTeamHasFlag" +#define TF_RESOURCE_TEAM_DROPPED "Announcer.SD_OurTeamDroppedFlag" +#define TF_RESOURCE_TEAM_CAPTURED "Announcer.SD_OurTeamCapped" +#define TF_RESOURCE_RETURNED "Announcer.SD_FlagReturned" + +// Halloween event strings +#define TF_RESOURCE_EVENT_ENEMY_STOLEN "Announcer.SD_Event_TheirTeamHasFlag" +#define TF_RESOURCE_EVENT_ENEMY_DROPPED "Announcer.SD_Event_TheirTeamDroppedFlag" +#define TF_RESOURCE_EVENT_TEAM_STOLEN "Announcer.SD_Event_OurTeamHasFlag" +#define TF_RESOURCE_EVENT_TEAM_DROPPED "Announcer.SD_Event_OurTeamDroppedFlag" +#define TF_RESOURCE_EVENT_RETURNED "Announcer.SD_Event_FlagReturned" +#define TF_RESOURCE_EVENT_NAGS "Announcer.SD_Event_FlagNags" +#define TF_RESOURCE_EVENT_RED_CAPPED "Announcer.SD_Event_CappedRed" +#define TF_RESOURCE_EVENT_BLUE_CAPPED "Announcer.SD_Event_CappedBlu" + +//============================================================================= +// +// Robot Destruction Flag defines. +// + +#define TF_RD_ENEMY_STOLEN "RD.EnemyStolen" +#define TF_RD_ENEMY_DROPPED "RD.EnemyDropped" +#define TF_RD_ENEMY_CAPTURED "RD.EnemyCaptured" +#define TF_RD_ENEMY_RETURNED "RD.EnemyReturned" + +#define TF_RD_TEAM_STOLEN "RD.TeamStolen" +#define TF_RD_TEAM_DROPPED "RD.TeamDropped" +#define TF_RD_TEAM_CAPTURED "RD.TeamCaptured" +#define TF_RD_TEAM_RETURNED "RD.TeamReturned" + +#define TF_RESOURCE_CAPTURED_TEAM_SCORE 1 + +//============================================================================= +// +// Powerup mode defines. +// + +#define TF_RUNE_INTEL_CAPTURED "CaptureFlag.TeamCapturedExcited" + +//============================================================================= +// +// Robot Destruction defines +// + +#ifdef CLIENT_DLL + #define CCaptureFlagReturnIcon C_CaptureFlagReturnIcon + #define CBaseAnimating C_BaseAnimating +#endif + +class CCaptureFlagReturnIcon: public CBaseAnimating +{ +public: + DECLARE_CLASS( CCaptureFlagReturnIcon, CBaseEntity ); + DECLARE_NETWORKCLASS(); + + CCaptureFlagReturnIcon(); + +#ifdef CLIENT_DLL + + virtual int DrawModel( int flags ); + void DrawReturnProgressBar( void ); + + virtual RenderGroup_t GetRenderGroup( void ); + virtual bool ShouldDraw( void ) { return true; } + + virtual void GetRenderBounds( Vector& theMins, Vector& theMaxs ); + +private: + + IMaterial *m_pReturnProgressMaterial_Empty; // For labels above players' heads. + IMaterial *m_pReturnProgressMaterial_Full; + +#else +public: + virtual void Spawn( void ); + virtual int UpdateTransmitState( void ); + +#endif + +}; + +//============================================================================= +// +// CTF Flag class. +// +DECLARE_AUTO_LIST( ICaptureFlagAutoList ); +class CCaptureFlag : public CTFItem, public ICaptureFlagAutoList +{ +public: + + DECLARE_CLASS( CCaptureFlag, CTFItem ); + DECLARE_NETWORKCLASS(); + + CCaptureFlag(); + ~CCaptureFlag(); + + unsigned int GetItemID( void ) const OVERRIDE; + + void Precache( void ); + void Spawn( void ); + + virtual void UpdateOnRemove( void ); + + void FlagTouch( CBaseEntity *pOther ); + + bool IsDisabled( void ) const; + void SetDisabled( bool bDisabled ); + void SetVisibleWhenDisabled( bool bVisible ); + bool IsPoisonous( void ) { return m_flTimeToSetPoisonous > 0 && gpGlobals->curtime > m_flTimeToSetPoisonous; } + float GetPoisonTime( void ) const { return m_flTimeToSetPoisonous; } + + bool IsVisibleWhenDisabled( void ) { return m_bVisibleWhenDisabled; } + + CBaseEntity *GetPrevOwner( void ) { return m_hPrevOwner.Get(); } + + //----------------------------------------------------------------------------- + // Purpose: Sets the flag status + //----------------------------------------------------------------------------- + void SetFlagStatus( int iStatus, CBasePlayer *pNewOwner = NULL ); + +// Game DLL Functions +#ifdef GAME_DLL + CCaptureFlag &operator=( const CCaptureFlag& rhs ); + virtual void Activate( void ); + + static CCaptureFlag* Create( const Vector& vecOrigin, const char *pszModelName, ETFFlagType type ); + + // Input handlers + void InputEnable( inputdata_t &inputdata ); + void InputDisable( inputdata_t &inputdata ); + void InputRoundActivate( inputdata_t &inputdata ); + void InputForceDrop( inputdata_t &inputdata ); + void InputForceReset( inputdata_t &inputdata ); + void InputForceResetSilent( inputdata_t &inputdata ); + void InputForceResetAndDisableSilent( inputdata_t &inputdata ); + void InputSetReturnTime( inputdata_t &inputdata ); + void InputShowTimer( inputdata_t &inputdata ); + void InputForceGlowDisabled( inputdata_t &inputdata ); + + void Think( void ); + + void CreateReturnIcon( void ); + void DestroyReturnIcon( void ); + + void ResetFlagReturnTime( void ) { m_flResetTime = 0; } + void SetFlagReturnIn( float flTime ) + { + m_flResetTime = gpGlobals->curtime + flTime; + m_flMaxResetTime = flTime; + } + + void SetFlagReturnIn( float flTime, float flMaxResetTime ) + { + m_flResetTime = gpGlobals->curtime + flTime; + m_flMaxResetTime = flMaxResetTime; + } + + void ResetFlagNeutralTime( void ) { m_flNeutralTime = 0; } + void SetFlagNeutralIn( float flTime ) + { + m_flNeutralTime = gpGlobals->curtime + flTime; + m_flMaxResetTime = flTime; + } + bool IsCaptured( void ){ return m_bCaptured; } + + int UpdateTransmitState(); + + void StartFlagTrail ( void ); + void RemoveFlagTrail ( void ); + EHANDLE m_pFlagTrail; + float m_flFlagTrailLife; + bool m_bInstantTrailRemove; + + int GetNumTags() const { return m_tags.Count(); } + const char* GetTag( int i ) const { return m_tags[i]; } + void AddFollower( CTFBot* pBot ); + void RemoveFollower( CTFBot* pBot ); + int GetNumFollowers() const { return m_followers.Count(); } + + void AddPointValue( int nPoints ); + +#else // CLIENT DLL Functions + virtual bool ShouldDraw() OVERRIDE; + virtual bool IsVisibleToTargetID() const OVERRIDE; + virtual const char *GetIDString( void ) { return "entity_capture_flag"; }; + + virtual void OnPreDataChanged( DataUpdateType_t updateType ); + virtual void OnDataChanged( DataUpdateType_t updateType ); + + void CreateSiren( void ); + void DestroySiren( void ); + + void ManageTrailEffects( void ); + + CNewParticleEffect *m_pGlowTrailEffect; + CNewParticleEffect *m_pPaperTrailEffect; + + virtual void Simulate( void ); + + float GetMaxResetTime() { return m_flMaxResetTime; } + float GetReturnProgress( void ); + +public: + + void UpdateGlowEffect( void ); + virtual bool ShouldHideGlowEffect( void ); + +#endif + + // TODO: Both of these should be updated to work with floats instead of ints. + int GetReturnTime( int nMaxReturnTime ); + int GetMaxReturnTime( void ); + + void Capture( CTFPlayer *pPlayer, int nCapturePoint ); + virtual void PickUp( CTFPlayer *pPlayer, bool bInvisible ); + virtual void Drop( CTFPlayer *pPlayer, bool bVisible, bool bThrown = false, bool bMessage = true ); + + ETFFlagType GetType( void ) const { return (ETFFlagType)m_nType.Get(); } + + bool IsDropped( void ); + bool IsHome( void ); + bool IsStolen( void ); + + void ResetFlag( void ) + { + Reset(); + ResetMessage(); + } + + const char *GetFlagModel( void ); + void GetHudIcon( int nTeam, char *pchName, int nBuffSize ); + const char *GetPaperEffect( void ); + void GetTrailEffect( int nTeam, char *pchName, int nBuffSize ); + + int GetPointValue() const { return m_nPointValue.Get(); } +private: + + void Reset( void ); + void ResetMessage( void ); + void InternalForceReset( bool bSilent = false ); + +#ifdef GAME_DLL + void PlaySound( IRecipientFilter& filter, const char *pszString, int iTeam = TEAM_ANY ); + + float m_flNextTeamSoundTime[TF_TEAM_COUNT]; + + void SetGlowEnabled( bool bGlowEnabled ){ m_bGlowEnabled = bGlowEnabled; } +#endif + + bool IsGlowEnabled( void ){ return m_bGlowEnabled; } + +private: + + CNetworkVar( bool, m_bDisabled ); // Enabled/Disabled? + CNetworkVar( bool, m_bVisibleWhenDisabled ); + CNetworkVar( int, m_nType ); // Type of game this flag will be used for. + + CNetworkVar( int, m_nFlagStatus ); + CNetworkVar( float, m_flResetTime ); // Time until the flag is placed back at spawn. + CNetworkVar( float, m_flMaxResetTime ); // Time the flag takes to return in the current mode + CNetworkVar( float, m_flNeutralTime ); // Time until the flag becomes neutral (used for the invade gametype) + CNetworkHandle( CBaseEntity, m_hPrevOwner ); + CNetworkVar( int, m_nPointValue ); // How many points this flag is worth when scored. Used in Robot Destruction mode. + CNetworkVar( float, m_flAutoCapTime ); + CNetworkVar( bool, m_bGlowEnabled ); + +#ifdef GAME_DLL + string_t m_iszModel; + string_t m_iszHudIcon; + string_t m_iszPaperEffect; + string_t m_iszTrailEffect; + + string_t m_iszTags; + CUtlStringList m_tags; + + CUtlVector< CHandle< CTFBot > > m_followers; +#endif + + CNetworkString( m_szModel, MAX_PATH ); + CNetworkString( m_szHudIcon, MAX_PATH ); + CNetworkString( m_szPaperEffect, MAX_PATH ); + CNetworkString( m_szTrailEffect, MAX_PATH ); + CNetworkVar( int, m_nUseTrailEffect ); + + + int m_iOriginalTeam; + float m_flOwnerPickupTime; + + int GetReturnTimeShotClockMode( int nStartReturnTime ); + inline bool IsFlagShotClockModePossible() const + { + return m_nType == TF_FLAGTYPE_CTF + || m_nType == TF_FLAGTYPE_ROBOT_DESTRUCTION + || m_nType == TF_FLAGTYPE_RESOURCE_CONTROL; + } + + float m_flLastPickupTime; // What the time was of the last pickup by any player. + float m_flLastResetDuration; // How long was the last time to reset before being picked up? + + int m_nReturnTime; // Length of time (in seconds) before dropped flag/intelligence returns to base. + int m_nNeutralType; // Type of neutral flag (only used for Invade game type). + int m_nScoringType; // Type of scoring for flag capture (only used for Invade game type). + + bool m_bReturnBetweenWaves; // Used in MvM mode to determine if the flag should return between waves. + bool m_bUseShotClockMode; // Used to determine whether we should be using shot clock mode or not. + + CNetworkVar( float, m_flTimeToSetPoisonous ); // Time to set the flag as poisonous + + EHANDLE m_hReturnIcon; + +#ifdef GAME_DLL + Vector m_vecResetPos; // The position the flag should respawn (reset) at. + QAngle m_vecResetAng; // The angle the flag should respawn (reset) at. + + COutputEvent m_outputOnReturn; // Fired when the flag is returned via timer. + COutputEvent m_outputOnPickUp; // Fired when the flag is picked up. + COutputEvent m_outputOnPickUpTeam1; // Fired when the flag is picked up by RED. + COutputEvent m_outputOnPickUpTeam2; // Fired when the flag is picked up by BLU. + COutputEvent m_outputOnDrop; // Fired when the flag is dropped. + COutputEvent m_outputOnCapture; // Fired when the flag is captured. + COutputEvent m_OnCapTeam1; + COutputEvent m_OnCapTeam2; + COutputEvent m_OnTouchSameTeam; + + bool m_bAllowOwnerPickup; + + bool m_bCaptured; + + EHANDLE m_hInitialPlayer; + + EHANDLE m_hInitialParent; + Vector m_vecOffset; + +#else + + IMaterial *m_pReturnProgressMaterial_Empty; // For labels above players' heads. + IMaterial *m_pReturnProgressMaterial_Full; + + int m_nOldTeamNumber; + EHANDLE m_hOldOwner; + + CGlowObject *m_pGlowEffect; + CGlowObject *m_pCarrierGlowEffect; + HPARTICLEFFECT m_hSirenEffect; + + bool m_bOldGlowEnabled; +#endif + + DECLARE_DATADESC(); +}; + +#endif // ENTITY_CAPTURE_FLAG_H |