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.
138 lines
3.4 KiB
138 lines
3.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef INFO_ACT_H |
|
#define INFO_ACT_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
class CBaseTFPlayer; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Map entity that defines an act |
|
//----------------------------------------------------------------------------- |
|
class CInfoAct : public CBaseEntity |
|
{ |
|
DECLARE_CLASS( CInfoAct, CBaseEntity ); |
|
public: |
|
CInfoAct(); |
|
|
|
DECLARE_DATADESC(); |
|
DECLARE_SERVERCLASS(); |
|
|
|
int UpdateTransmitState(); |
|
|
|
void Spawn( void ); |
|
void StartAct( void ); |
|
void UpdateClient( CBaseTFPlayer *pPlayer ); |
|
void FinishAct( void ); |
|
void ActThink( void ); |
|
int ActNumber() const; |
|
|
|
void CleanupOnActStart( void ); |
|
|
|
bool IsAWaitingAct( void ); |
|
|
|
// Act player locking |
|
void StartActOverlayTime( CBaseTFPlayer *pPlayer ); |
|
void EndActOverlayTime( CBaseTFPlayer *pPlayer ); |
|
void ActThinkEndActOverlayTime( void ); |
|
|
|
// Intermissions |
|
void StartIntermission( CBaseTFPlayer *pPlayer ); |
|
void EndIntermission( CBaseTFPlayer *pPlayer ); |
|
|
|
int GetMCVTimer( void ) { return m_nRespawn2Team2Time; } |
|
|
|
private: |
|
enum |
|
{ |
|
RESPAWN_TIMER_90_REMAINING = 0, |
|
RESPAWN_TIMER_60_REMAINING, |
|
RESPAWN_TIMER_45_REMAINING, |
|
RESPAWN_TIMER_30_REMAINING, |
|
RESPAWN_TIMER_10_REMAINING, |
|
RESPAWN_TIMER_0_REMAINING, |
|
|
|
RESPAWN_TIMER_EVENT_COUNT |
|
}; |
|
|
|
void SetUpRespawnTimers(); |
|
void ShutdownRespawnTimers(); |
|
|
|
// Inputs |
|
void InputStart( inputdata_t &inputdata ); |
|
void InputFinishWinNone( inputdata_t &inputdata ); |
|
void InputFinishWin1( inputdata_t &inputdata ); |
|
void InputFinishWin2( inputdata_t &inputdata ); |
|
void InputAddTime( inputdata_t &inputdata ); |
|
|
|
// Respawn timers |
|
void RespawnTimerThink(); |
|
|
|
// Respawn delay |
|
void Team1RespawnDelayThink(); |
|
void Team2RespawnDelayThink(); |
|
|
|
// Computes the time remaining |
|
int ComputeTimeRemaining( int nPeriod, int nDelay ); |
|
|
|
// Fires respawn events |
|
void FireRespawnEvents( int nTimeRemaining, COutputEvent *pRespawnEvents, COutputInt &respawnTime ); |
|
|
|
// Outputs |
|
COutputEvent m_OnStarted; |
|
COutputEvent m_OnFinishedTeamNone; |
|
COutputEvent m_OnFinishedTeam1; |
|
COutputEvent m_OnFinishedTeam2; |
|
COutputEvent m_OnTimerExpired; |
|
|
|
COutputEvent m_Team1RespawnDelayDone; |
|
COutputEvent m_Team2RespawnDelayDone; |
|
|
|
COutputInt m_Respawn1Team1TimeRemaining; |
|
COutputInt m_Respawn2Team1TimeRemaining; |
|
COutputInt m_Respawn1Team2TimeRemaining; |
|
COutputInt m_Respawn2Team2TimeRemaining; |
|
|
|
// A whole buncha respawn timer events |
|
COutputEvent m_Respawn1Team1Events[RESPAWN_TIMER_EVENT_COUNT]; |
|
COutputEvent m_Respawn2Team1Events[RESPAWN_TIMER_EVENT_COUNT]; |
|
COutputEvent m_Respawn1Team2Events[RESPAWN_TIMER_EVENT_COUNT]; |
|
COutputEvent m_Respawn2Team2Events[RESPAWN_TIMER_EVENT_COUNT]; |
|
|
|
// Respawn timer periods |
|
CNetworkVar( int, m_nRespawn1Team1Time ); |
|
CNetworkVar( int, m_nRespawn1Team2Time ); |
|
CNetworkVar( int, m_nRespawn2Team1Time ); |
|
CNetworkVar( int, m_nRespawn2Team2Time ); |
|
CNetworkVar( int, m_nRespawnTeam1Delay ); |
|
CNetworkVar( int, m_nRespawnTeam2Delay ); |
|
|
|
// Data |
|
CNetworkVar( int, m_iActNumber ); |
|
CNetworkVar( float, m_flActTimeLimit ); |
|
int m_iWinners; |
|
|
|
// Acts |
|
float m_flActStartedAt; |
|
|
|
// Intermissions |
|
string_t m_iszIntermissionCamera; |
|
}; |
|
|
|
inline int CInfoAct::ActNumber() const |
|
{ |
|
return m_iActNumber; |
|
} |
|
|
|
extern CHandle<CInfoAct> g_hCurrentAct; |
|
|
|
bool CurrentActIsAWaitingAct( void ); |
|
|
|
#endif // INFO_ACT_H
|
|
|