You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
5.4 KiB
152 lines
5.4 KiB
//========= 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
|
|
|