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.
80 lines
1.7 KiB
80 lines
1.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
|
|
#ifndef TF_AUTOBALANCE_H |
|
#define TF_AUTOBALANCE_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "GameEventListener.h" |
|
|
|
enum autobalance_state_t |
|
{ |
|
AB_STATE_INACTIVE = 0, |
|
AB_STATE_MONITOR, |
|
AB_STATE_FIND_VOLUNTEERS |
|
}; |
|
|
|
enum volunteer_state_t |
|
{ |
|
AB_VOLUNTEER_STATE_ASKED = 0, |
|
AB_VOLUNTEER_STATE_NO, |
|
AB_VOLUNTEER_STATE_YES, |
|
}; |
|
|
|
typedef struct |
|
{ |
|
CHandle<CTFPlayer> hPlayer; |
|
volunteer_state_t eState; |
|
float flQueryExpireTime; |
|
} volunteer_info_s; |
|
|
|
//----------------------------------------------------------------------------- |
|
class CTFAutobalance : public CAutoGameSystemPerFrame |
|
{ |
|
public: |
|
|
|
CTFAutobalance(); |
|
~CTFAutobalance(); |
|
|
|
virtual char const *Name() { return "CTFAutobalance"; } |
|
|
|
virtual void Shutdown(); |
|
virtual void LevelShutdownPostEntity(); |
|
|
|
// called after entities think |
|
virtual void FrameUpdatePostEntityThink(); |
|
|
|
void ReplyReceived( CTFPlayer *pTFPlayer, bool bResponse ); |
|
|
|
private: |
|
void Reset(); |
|
bool ShouldBeActive() const; |
|
bool AreTeamsUnbalanced(); |
|
void MonitorTeams(); |
|
bool HaveAlreadyAskedPlayer( CTFPlayer *pTFPlayer ) const; |
|
int GetTeamAutoBalanceScore( int nTeam ) const; |
|
int GetPlayerAutoBalanceScore( CTFPlayer *pTFPlayer ) const; |
|
CTFPlayer *FindPlayerToAsk(); |
|
void FindVolunteers(); |
|
void SwitchVolunteers(); |
|
bool IsOkayToBalancePlayers(); |
|
|
|
private: |
|
int m_iCurrentState; |
|
int m_iLightestTeam; |
|
int m_iHeaviestTeam; |
|
int m_nNeeded; |
|
float m_flBalanceTeamsTime; |
|
|
|
CUtlVector< volunteer_info_s > m_vecPlayersAsked; |
|
}; |
|
|
|
CTFAutobalance *TFAutoBalance(); |
|
|
|
#endif // TF_AUTOBALANCE_H
|
|
|