185 lines
5.9 KiB
C++
185 lines
5.9 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Round timer for team gamerules
|
|
//
|
|
//=============================================================================//
|
|
|
|
#ifndef TEAM_ROUND_TIMER_H
|
|
#define TEAM_ROUND_TIMER_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#ifdef CLIENT_DLL
|
|
#define CTeamRoundTimer C_TeamRoundTimer
|
|
#endif
|
|
|
|
class CTeamRoundTimer : public CBaseEntity {
|
|
public:
|
|
DECLARE_CLASS(CTeamRoundTimer, CBaseEntity);
|
|
DECLARE_NETWORKCLASS();
|
|
|
|
CTeamRoundTimer();
|
|
virtual ~CTeamRoundTimer();
|
|
|
|
virtual void Spawn(void);
|
|
virtual void Precache(void);
|
|
virtual void Activate(void);
|
|
|
|
// Returns seconds to display.
|
|
// When paused shows amount of time left once the timer is resumed
|
|
virtual float GetTimeRemaining(void);
|
|
virtual int GetTimerMaxLength(void);
|
|
virtual bool ShowInHud(void);
|
|
virtual bool StartPaused(void) { return m_bStartPaused; }
|
|
bool ShowTimeRemaining(void) { return m_bShowTimeRemaining; }
|
|
|
|
bool IsDisabled(void) { return m_bIsDisabled; }
|
|
int GetTimerState(void) { return m_nState; }
|
|
|
|
bool IsTimerPaused(void) { return m_bTimerPaused; }
|
|
|
|
#ifdef CLIENT_DLL
|
|
|
|
void InternalSetPaused(bool bPaused) { m_bTimerPaused = bPaused; }
|
|
|
|
#else
|
|
|
|
void SetStopWatchTimeStamp(void);
|
|
virtual void SetTimeRemaining(
|
|
int iTimerSeconds); // Set the initial length of the timer
|
|
virtual void AddTimerSeconds(
|
|
int iSecondsToAdd,
|
|
int iTeamResponsible = TEAM_UNASSIGNED); // Add time to an already
|
|
// running ( or paused ) timer
|
|
virtual void PauseTimer(void);
|
|
virtual void ResumeTimer(void);
|
|
virtual void SetAutoCountdown(bool bAuto) { m_bAutoCountdown = bAuto; }
|
|
|
|
void SetShowInHud(bool bShowInHUD) { m_bShowInHUD = bShowInHUD; }
|
|
|
|
int UpdateTransmitState();
|
|
|
|
void InputEnable(inputdata_t &input);
|
|
void InputDisable(inputdata_t &input);
|
|
void InputPause(inputdata_t &input);
|
|
void InputResume(inputdata_t &input);
|
|
void InputSetTime(inputdata_t &input);
|
|
void InputAddTime(inputdata_t &input);
|
|
void InputRestart(inputdata_t &input);
|
|
void InputShowInHUD(inputdata_t &input);
|
|
void InputRoundSpawn(inputdata_t &inputdata);
|
|
void InputSetMaxTime(inputdata_t &input);
|
|
void InputAutoCountdown(inputdata_t &input);
|
|
void InputAddTeamTime(inputdata_t &input);
|
|
void InputSetSetupTime(inputdata_t &input);
|
|
|
|
#endif
|
|
|
|
void SetCaptureWatchState(bool bCaptureWatch);
|
|
bool IsWatchingTimeStamps(void) { return m_bInCaptureWatchState; }
|
|
void SetStopWatch(bool bState) { m_bStopWatchTimer = bState; }
|
|
bool IsStopWatchTimer(void) { return m_bStopWatchTimer; }
|
|
float GetStopWatchTotalTime(void) { return m_flTotalTime; }
|
|
bool IsRoundMaxTimerSet(void) { return m_nTimerMaxLength > 0; }
|
|
int GetTimerInitialLength(void) { return m_nTimerInitialLength; }
|
|
|
|
private:
|
|
void CalculateOutputMessages(void);
|
|
|
|
#ifdef CLIENT_DLL
|
|
virtual void ClientThink();
|
|
void OnPreDataChanged(DataUpdateType_t updateType);
|
|
void OnDataChanged(DataUpdateType_t updateType);
|
|
void SendTimeWarning(int nWarning);
|
|
const char *GetTimeWarningSound(int nWarning);
|
|
|
|
#else
|
|
void SetState(int nState, bool bFireOutput = true);
|
|
void SetTimerThink(int nType);
|
|
void EXPORT RoundTimerThink(void);
|
|
void EXPORT RoundTimerSetupThink(void);
|
|
|
|
static void SetActiveTimer(CTeamRoundTimer *pNewlyActive);
|
|
#endif
|
|
|
|
private:
|
|
CNetworkVar(bool, m_bTimerPaused);
|
|
CNetworkVar(float, m_flTimeRemaining);
|
|
CNetworkVar(float, m_flTimerEndTime);
|
|
CNetworkVar(bool, m_bIsDisabled);
|
|
CNetworkVar(bool, m_bShowInHUD);
|
|
CNetworkVar(int, m_nTimerLength); // current timer's length (used in the
|
|
// timer panel if no max length is set)
|
|
CNetworkVar(int, m_nTimerInitialLength); // initial length of the timer
|
|
CNetworkVar(
|
|
int, m_nTimerMaxLength); // max time the timer can have (0 is no max)
|
|
CNetworkVar(
|
|
bool, m_bAutoCountdown); // automatically count down the end of a round
|
|
CNetworkVar(
|
|
int, m_nSetupTimeLength); // current timer's setup time length (setup
|
|
// time is the time before the round begins)
|
|
CNetworkVar(int, m_nState); // RT_STATE_SETUP or RT_STATE_NORMAL
|
|
CNetworkVar(bool, m_bStartPaused); // start the timer paused when it spawns
|
|
CNetworkVar(bool,
|
|
m_bShowTimeRemaining); // show how much time is left (default)
|
|
// instead of how much time has passed.
|
|
CNetworkVar(bool, m_bInCaptureWatchState);
|
|
CNetworkVar(float, m_flTotalTime);
|
|
CNetworkVar(bool, m_bStopWatchTimer);
|
|
|
|
bool m_bFireFinished;
|
|
bool m_bFire5MinRemain;
|
|
bool m_bFire4MinRemain;
|
|
bool m_bFire3MinRemain;
|
|
bool m_bFire2MinRemain;
|
|
bool m_bFire1MinRemain;
|
|
bool m_bFire30SecRemain;
|
|
bool m_bFire10SecRemain;
|
|
bool m_bFire5SecRemain;
|
|
bool m_bFire4SecRemain;
|
|
bool m_bFire3SecRemain;
|
|
bool m_bFire2SecRemain;
|
|
bool m_bFire1SecRemain;
|
|
|
|
#ifdef CLIENT_DLL
|
|
|
|
int m_nOldTimerLength;
|
|
int m_nOldTimerState;
|
|
|
|
#else
|
|
COutputEvent m_OnRoundStart;
|
|
COutputEvent m_OnFinished;
|
|
COutputEvent m_On5MinRemain;
|
|
COutputEvent m_On4MinRemain;
|
|
COutputEvent m_On3MinRemain;
|
|
COutputEvent m_On2MinRemain;
|
|
COutputEvent m_On1MinRemain;
|
|
COutputEvent m_On30SecRemain;
|
|
COutputEvent m_On10SecRemain;
|
|
COutputEvent m_On5SecRemain;
|
|
COutputEvent m_On4SecRemain;
|
|
COutputEvent m_On3SecRemain;
|
|
COutputEvent m_On2SecRemain;
|
|
COutputEvent m_On1SecRemain;
|
|
|
|
COutputEvent m_OnSetupStart;
|
|
COutputEvent m_OnSetupFinished;
|
|
|
|
float m_flNextOvertimeNag;
|
|
float m_flLastTime;
|
|
|
|
DECLARE_DATADESC();
|
|
|
|
bool m_bPauseDueToWin;
|
|
bool m_bResetTimeOnRoundStart;
|
|
int m_nTimeToUseAfterSetupFinished;
|
|
#endif
|
|
};
|
|
|
|
#ifdef CLIENT_DLL
|
|
extern CTeamRoundTimer *g_TeamRoundTimer;
|
|
#endif
|
|
|
|
#endif // TEAM_ROUND_TIMER_H
|