1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
//========= 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
|