This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/shared/teamplay_round_timer.h
2020-08-04 13:13:01 -04:00

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