mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-01-09 05:35:30 +03:00
beaae8ac45
* Adds support for Visual Studio 2012 and 2013 * VR Mode: . Switches from headtrack.dll to sourcevr.dll . Improved readability of the UI in VR . Removed the IPD calibration tool. TF2 will now obey the Oculus configuration file. Use the Oculus calibration tool in your SDK or install and run "OpenVR" under Tools in Steam to calibrate your IPD. . Added dropdown to enable VR mode in the Video options. Removed the -vr command line option. . Added the ability to switch in and out of VR mode without quitting the game . By default VR mode will run full screen. To switch back to a borderless window set the vr_force_windowed convar. . Added support for VR mode on Linux * Many assorted bug fixes and other changes from Team Fortress in various shared files
131 lines
5.7 KiB
C++
131 lines
5.7 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose: Player-driven Voting System for Multiplayer Source games (currently implemented for TF2)
|
|
//
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef VOTE_CONTROLLER_H
|
|
#define VOTE_CONTROLLER_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "shareddefs.h"
|
|
|
|
#define MAX_COMMAND_LENGTH 64
|
|
#define MAX_CREATE_ERROR_STRING 96
|
|
|
|
class CBaseIssue // Abstract base class for all things-that-can-be-voted-on.
|
|
{
|
|
public:
|
|
CBaseIssue(const char *typeString);
|
|
virtual ~CBaseIssue();
|
|
const char *GetTypeString( void ); // Connection between console command and specific type of issue
|
|
virtual const char *GetDetailsString();
|
|
virtual void SetIssueDetails( const char *pszDetails ); // We need to know the details part of the con command for later
|
|
virtual void OnVoteFailed( int iEntityHoldingVote ); // The moment the vote fails, also has some time for feedback before the window goes away
|
|
virtual void OnVoteStarted( void ) {} // Called as soon as the vote starts
|
|
virtual bool IsEnabled( void ) { return false; } // Query the issue to see if it's enabled
|
|
virtual bool CanTeamCallVote( int iTeam ) const; // Can someone on the given team call this vote?
|
|
virtual bool CanCallVote( int nEntIndex, const char *pszDetails, vote_create_failed_t &nFailCode, int &nTime ); // Can this guy hold a vote on this issue?
|
|
virtual bool IsAllyRestrictedVote( void ); // Can only members of the same team vote on this?
|
|
virtual const char *GetDisplayString( void ) = 0; // The string that will be passed to the client for display
|
|
virtual void ExecuteCommand( void ) = 0; // Where the magic happens. Do your thing.
|
|
virtual void ListIssueDetails( CBasePlayer *pForWhom ) = 0; // Someone would like to know all your valid details
|
|
virtual const char *GetVotePassedString( void ); // Get the string an issue would like to display when it passes.
|
|
virtual int CountPotentialVoters( void );
|
|
virtual int GetNumberVoteOptions( void ); // How many choices this vote will have. i.e. Returns 2 on a Yes/No issue (the default).
|
|
virtual bool IsYesNoVote( void );
|
|
virtual void SetYesNoVoteCount( int iNumYesVotes, int iNumNoVotes, int iNumPotentialVotes );
|
|
virtual bool GetVoteOptions( CUtlVector <const char*> &vecNames ); // We use this to generate options for voting
|
|
virtual bool BRecordVoteFailureEventForEntity( int iVoteCallingEntityIndex ) const { return iVoteCallingEntityIndex != DEDICATED_SERVER; }
|
|
|
|
protected:
|
|
static void ListStandardNoArgCommand( CBasePlayer *forWhom, const char *issueString ); // List a Yes vote command
|
|
|
|
struct FailedVote
|
|
{
|
|
char szFailedVoteParameter[MAX_VOTE_DETAILS_LENGTH];
|
|
float flLockoutTime;
|
|
};
|
|
|
|
CUtlVector<FailedVote *> m_FailedVotes;
|
|
|
|
char m_szTypeString[MAX_COMMAND_LENGTH];
|
|
char m_szDetailsString[MAX_VOTE_DETAILS_LENGTH];
|
|
|
|
int m_iNumYesVotes;
|
|
int m_iNumNoVotes;
|
|
int m_iNumPotentialVotes;
|
|
};
|
|
|
|
class CVoteController : public CBaseEntity
|
|
{
|
|
DECLARE_CLASS( CVoteController, CBaseEntity );
|
|
|
|
public:
|
|
DECLARE_SERVERCLASS();
|
|
DECLARE_DATADESC();
|
|
|
|
virtual ~CVoteController();
|
|
|
|
enum TryCastVoteResult
|
|
{
|
|
CAST_OK,
|
|
CAST_FAIL_SERVER_DISABLE,
|
|
CAST_FAIL_NO_ACTIVE_ISSUE,
|
|
CAST_FAIL_TEAM_RESTRICTED,
|
|
CAST_FAIL_NO_CHANGES,
|
|
CAST_FAIL_DUPLICATE,
|
|
CAST_FAIL_VOTE_CLOSED,
|
|
CAST_FAIL_SYSTEM_ERROR
|
|
};
|
|
|
|
virtual void Spawn( void );
|
|
virtual int UpdateTransmitState( void );
|
|
|
|
bool SetupVote( int iEntIndex ); // This creates a list of issues for the UI
|
|
bool CreateVote( int iEntIndex, const char *pszTypeString, const char *pszDetailString ); // This is what the UI passes in
|
|
TryCastVoteResult TryCastVote( int iEntIndex, const char *pszVoteString );
|
|
void RegisterIssue( CBaseIssue *pNewIssue );
|
|
void ListIssues( CBasePlayer *pForWhom );
|
|
bool IsValidVoter( CBasePlayer *pWhom );
|
|
bool CanTeamCastVote( int iTeam ) const;
|
|
void SendVoteFailedMessage( vote_create_failed_t nReason = VOTE_FAILED_GENERIC, CBasePlayer *pVoteCaller = NULL, int nTime = -1 );
|
|
void VoteChoice_Increment( int nVoteChoice );
|
|
void VoteChoice_Decrement( int nVoteChoice );
|
|
int GetWinningVoteOption( void );
|
|
void TrackVoteCaller( CBasePlayer *pPlayer );
|
|
bool CanEntityCallVote( CBasePlayer *pPlayer, int &nCooldown );
|
|
bool IsVoteActive( void ) { return m_iActiveIssueIndex != INVALID_ISSUE; }
|
|
|
|
protected:
|
|
void ResetData( void );
|
|
void VoteControllerThink( void );
|
|
void CheckForEarlyVoteClose( void ); // If everyone has voted (and changing votes is not allowed) then end early
|
|
|
|
CNetworkVar( int, m_iActiveIssueIndex ); // Type of thing being voted on
|
|
CNetworkVar( int, m_iOnlyTeamToVote ); // If an Ally restricted vote, the team number that is allowed to vote
|
|
CNetworkArray( int, m_nVoteOptionCount, MAX_VOTE_OPTIONS ); // Vote options counter
|
|
CNetworkVar( int, m_nPotentialVotes ); // How many votes could come in, so we can close ballot early
|
|
CNetworkVar( bool, m_bIsYesNoVote ); // Is the current issue Yes/No?
|
|
CountdownTimer m_acceptingVotesTimer; // How long from vote start until we count the ballots
|
|
CountdownTimer m_executeCommandTimer; // How long after end of vote time until we execute a passed vote
|
|
CountdownTimer m_resetVoteTimer; // when the current vote will end
|
|
int m_nVotesCast[MAX_PLAYERS + 1]; // arrays are zero-based and player indices are one-based
|
|
int m_iEntityHoldingVote;
|
|
int m_nHighestCountIndex;
|
|
|
|
CUtlVector <CBaseIssue *> m_potentialIssues;
|
|
CUtlVector <const char *> m_VoteOptions;
|
|
CUtlMap <uint64, float> m_VoteCallers; // History of SteamIDs that have tried to call votes.
|
|
|
|
friend class CVoteControllerSystem;
|
|
};
|
|
|
|
extern CVoteController *g_voteController;
|
|
|
|
#endif // VOTE_CONTROLLER_H
|