diff options
Diffstat (limited to 'game/server/tf/tf_passtime_logic.h')
| -rw-r--r-- | game/server/tf/tf_passtime_logic.h | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/game/server/tf/tf_passtime_logic.h b/game/server/tf/tf_passtime_logic.h new file mode 100644 index 0000000..d9b7d03 --- /dev/null +++ b/game/server/tf/tf_passtime_logic.h @@ -0,0 +1,152 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef TF_PASSTIME_LOGIC_H +#define TF_PASSTIME_LOGIC_H +#ifdef _WIN32 +#pragma once +#endif + +#include "baseentity.h" +#include "tf_passtime_ball.h" +#include "GameEventListener.h" + +//----------------------------------------------------------------------------- +class CTFPlayer; +class CTFPasstimeBall; +class CPasstimeBallSpawn; +class CFuncPasstimeGoal; +class CCountdownAnnouncer; +class CTrackPath; +struct SetSectionParams; +enum HudNotification_t; + +//----------------------------------------------------------------------------- +class CTFPasstimeLogic : public CPointEntity, public CGameEventListener +{ +public: + DECLARE_CLASS( CTFPasstimeLogic, CBaseEntity ); + DECLARE_SERVERCLASS(); + DECLARE_DATADESC(); + + CTFPasstimeLogic(); + virtual ~CTFPasstimeLogic(); + virtual void Spawn() OVERRIDE; + virtual void Precache() OVERRIDE; + virtual int UpdateTransmitState() OVERRIDE; + virtual void FireGameEvent( IGameEvent *pEvent ) OVERRIDE; + + void LaunchBall( CTFPlayer *pPlayer, const Vector &pos, const Vector &vel ); + void EjectBall( CTFPlayer *pPlayer, CTFPlayer *pAttacker ); + + bool BCanPlayerPickUpBall( CTFPlayer *pPlayer, HudNotification_t *pReason = 0 ) const; + CPasstimeBall *GetBall() const; + + void OnBallCarrierDamaged( CTFPlayer *pPlayer, CTFPlayer *pAttacker, const CTakeDamageInfo& info ); + void OnBallCarrierMeleeHit( CTFPlayer *pPlayer, CTFPlayer *pAttacker ); + void OnPlayerTouchBall( CTFPlayer *pPlayer, CPasstimeBall *pBall ); + void OnEnterGoal( CPasstimeBall *pBall, CFuncPasstimeGoal *pGoal ); + void OnEnterGoal( CTFPlayer *pPlayer, CFuncPasstimeGoal *pGoal ); + void OnExitGoal( CPasstimeBall *pBall, CFuncPasstimeGoal *pGoal ); + void OnStayInGoal( CTFPlayer *pPlayer, CFuncPasstimeGoal *pGoal ); + bool OnBallCollision( CPasstimeBall *pBall, int index, gamevcollisionevent_t *pEvent ); + float GetLastHeldTime( CTFPlayer* pPlayer ); + float GetLastPassTime( CTFPlayer* pPlayer ); + void SetLastPassTime( CTFPlayer* pPlayer ); + void RespawnBall(); + float GetMaxPassRange() const { return m_flMaxPassRange; } + CTFPlayer *GetBallCarrier() const; + float GetPackSpeed( CTFPlayer *pPlayer ) const; + + static void AddCondToTeam( ETFCond eCond, int iTeam, float flTime ); + +private: + void PostSpawn(); + void InputSetSection( inputdata_t &input ); + bool ParseSetSection( const char *pStr, SetSectionParams &s ) const; + void InputSpawnBall( inputdata_t &input ); + void InputTimeUp( inputdata_t &input ); + void InputSpeedBoostUsed( inputdata_t &input ); + void InputJumpPadUsed( inputdata_t &input ); + + void StopAskForBallEffects(); + void OnBallGet(); + void Score( CTFPlayer *pPlayer, CFuncPasstimeGoal *pGoal ); + void Score( CPasstimeBall *pBall, CFuncPasstimeGoal *pGoal ); + void Score( CTFPlayer *pPlayer, int iTeam, int iPoints, bool iForceWin ); + void SpawnBallAtRandomSpawnerThink(); + void SpawnBallAtRandomSpawner(); + void SpawnBallAtSpawner( CPasstimeBallSpawn *pSpawner ); + void MoveBallToSpawner(); + void StealBall( CTFPlayer *pFrom, CTFPlayer *pTo ); + void ThinkExpiredTimer(); + void EndRoundExpiredTimer(); + void CrowdReactionSound( int iTeam ); + + void OneSecStatsUpdateThink(); + void BallHistSampleThink(); + void BallPower_PowerThink(); + void BallPower_PackThink(); + void BallPower_PackHealThink(); + float CalcProgressFrac() const; + bool AddBallPower( int iPower ); + void ClearBallPower(); + bool ShouldEndOvertime() const; + void ReplicatePackMemberBits(); + + CUtlVector< std::pair<CTFPlayer*, float> > m_ballLastPassTimes; + CUtlVector< std::pair<CTFPlayer*, float> > m_ballLastHeldTimes; + CCountdownAnnouncer *m_pRespawnCountdown; + int m_iBallSpawnCountdownSec; + float m_flNextCrowdReactionTime; + uint64 m_nPackMemberBits; + uint64 m_nPrevPackMemberBits; + + // outputs + COutputEvent m_onBallFree; + COutputEvent m_onBallGetRed; + COutputEvent m_onBallGetBlu; + COutputEvent m_onBallGetAny; + COutputEvent m_onBallRemoved; + COutputEvent m_onScoreRed; + COutputEvent m_onScoreBlu; + COutputEvent m_onScoreAny; + COutputEvent m_onBallPowerUp; + COutputEvent m_onBallPowerDown; + + // secret room stuff + void SecretRoom_Spawn(); + void statica( inputdata_t &input ); // SecretRoom_InputStartTouchPlayerSlot + void staticb( inputdata_t &input ); // SecretRoom_InputEndTouchPlayerSlot + void staticc( inputdata_t &input ); // SecretRoom_InputPlugDamaged + void InputRoomTriggerOnTouch( inputdata_t &input ); + void SecretRoom_UpdateTv( int iNumSlotsFilled ); + void SecretRoom_Solve(); + int SecretRoom_CountSlottedPlayers() const; + CTFPlayer **SecretRoom_GetPlayerSlotInfoForTrigger( const char *pTriggerName, int *piExpectedClass, int *piExpectedTeam ); + + CBaseEntity *m_SecretRoom_pTv; + CSoundPatch* m_SecretRoom_pTvSound; + enum class SecretRoomState { None, Open, Solved } m_SecretRoom_state; + CTFPlayer *m_SecretRoom_slottedPlayers[9]; + CUtlVector<CSteamID> m_SecretRoom_playersThatTouchedRoom; + + // netvars + CNetworkHandle( CPasstimeBall, m_hBall ); + CNetworkArray( Vector, m_trackPoints, 16 ); + CNetworkVar( int, m_iNumSections ); + CNetworkVar( int, m_iCurrentSection ); + CNetworkVar( float, m_flMaxPassRange ); + CNetworkVar( int, m_iBallPower ); + CNetworkVar( float, m_flPackSpeed ); + CNetworkArray( int, m_bPlayerIsPackMember, MAX_PLAYERS + 1 ); // +1 for easy entity index +}; + +//----------------------------------------------------------------------------- +extern CTFPasstimeLogic *g_pPasstimeLogic; + +#endif // TF_PASSTIME_LOGIC_H |