diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /mp/src/game/client/c_vote_controller.cpp | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'mp/src/game/client/c_vote_controller.cpp')
| -rw-r--r-- | mp/src/game/client/c_vote_controller.cpp | 376 |
1 files changed, 188 insertions, 188 deletions
diff --git a/mp/src/game/client/c_vote_controller.cpp b/mp/src/game/client/c_vote_controller.cpp index 109e355c..c900c27e 100644 --- a/mp/src/game/client/c_vote_controller.cpp +++ b/mp/src/game/client/c_vote_controller.cpp @@ -1,189 +1,189 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose: CS's custom C_VoteController
-//
-// $NoKeywords: $
-//=============================================================================//
-#include "cbase.h"
-#include "c_vote_controller.h"
-#include "shareddefs.h"
-#include "hud.h"
-#include "cdll_client_int.h"
-#include "igameevents.h"
-#include "hud_vote.h"
-
-// memdbgon must be the last include file in a .cpp file!!!
-#include "tier0/memdbgon.h"
-
-IMPLEMENT_CLIENTCLASS_DT( C_VoteController, DT_VoteController, CVoteController )
- RecvPropInt( RECVINFO( m_iActiveIssueIndex ), 0, C_VoteController::RecvProxy_VoteType ),
- RecvPropInt( RECVINFO( m_iOnlyTeamToVote ) ),
- RecvPropArray3( RECVINFO_ARRAY( m_nVoteOptionCount ), RecvPropInt( RECVINFO( m_nVoteOptionCount[0] ), 0, C_VoteController::RecvProxy_VoteOption ) ),
- RecvPropInt( RECVINFO( m_nPotentialVotes ) ),
- RecvPropBool( RECVINFO( m_bIsYesNoVote ) )
-END_RECV_TABLE()
-
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::RecvProxy_VoteType( const CRecvProxyData *pData, void *pStruct, void *pOut )
-{
- C_VoteController *pMe = (C_VoteController *)pStruct;
- if( pMe->m_iActiveIssueIndex == pData->m_Value.m_Int )
- return;
-
- pMe->m_iActiveIssueIndex = pData->m_Value.m_Int;
- pMe->m_bTypeDirty = true;
-
- // Since the contents of a new vote are in three parts, we can't directly send an event to the Hud
- // because we don't really know if we have all three parts yet. So we'll mark dirty, and our think
- // can notice that and send the event.
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::RecvProxy_VoteOption( const CRecvProxyData *pData, void *pStruct, void *pOut )
-{
- int index = pData->m_pRecvProp->GetOffset() / sizeof(int);
-
- size_t offset = offsetof( C_VoteController, m_nVoteOptionCount );
- C_VoteController *pMe = (C_VoteController *)((byte *)pStruct - offset );
- if( pMe->m_nVoteOptionCount[index] == pData->m_Value.m_Int )
- return;
-
- pMe->m_nVoteOptionCount[index] = pData->m_Value.m_Int;
- pMe->m_bVotesDirty = true;
- pMe->SetNextClientThink( gpGlobals->curtime + 0.001 );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-C_VoteController::C_VoteController()
-{
- ResetData();
-
- ListenForGameEvent( "vote_cast" );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-C_VoteController::~C_VoteController()
-{
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::ResetData()
-{
- m_iActiveIssueIndex = INVALID_ISSUE;
- m_iOnlyTeamToVote = TEAM_INVALID;
- for( int index = 0; index < MAX_VOTE_OPTIONS; index++ )
- {
- m_nVoteOptionCount[index] = 0;
- }
- m_nPotentialVotes = 0;
- m_bVotesDirty = false;
- m_bTypeDirty = false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::Spawn( void )
-{
- ResetData();
- BaseClass::Spawn();
- SetNextClientThink( gpGlobals->curtime );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::ClientThink()
-{
- BaseClass::ClientThink();
-
- if( m_bTypeDirty )
- {
- m_bTypeDirty = false;
- m_bVotesDirty = true;
- }
-
- if( m_bVotesDirty )
- {
- if ( m_nPotentialVotes > 0 )
- {
- // Currently hard-coded to MAX_VOTE_COUNT options per issue
- DevMsg( "Votes: Option1 - %d, Option2 - %d, Option3 - %d, Option4 - %d, Option5 - %d\n",
- m_nVoteOptionCount[0], m_nVoteOptionCount[1], m_nVoteOptionCount[2], m_nVoteOptionCount[3], m_nVoteOptionCount[4] );
-
- IGameEvent *event = gameeventmanager->CreateEvent( "vote_changed" );
- if ( event )
- {
- for ( int index = 0; index < MAX_VOTE_OPTIONS; index++ )
- {
- char szOption[2];
- Q_snprintf( szOption, sizeof( szOption ), "%i", index + 1 );
-
- char szVoteOption[13] = "vote_option";
- Q_strncat( szVoteOption, szOption, sizeof( szVoteOption ), COPY_ALL_CHARACTERS );
-
- event->SetInt( szVoteOption, m_nVoteOptionCount[index] );
- }
- event->SetInt( "potentialVotes", m_nPotentialVotes );
- gameeventmanager->FireEventClientSide( event );
- }
- }
-
- m_bVotesDirty = false;
- }
-
- SetNextClientThink( gpGlobals->curtime + 0.5f );
-}
-
-//-----------------------------------------------------------------------------
-// Purpose:
-//-----------------------------------------------------------------------------
-void C_VoteController::FireGameEvent( IGameEvent *event )
-{
- CHudVote *pHudVote = GET_HUDELEMENT( CHudVote );
- if ( pHudVote && pHudVote->IsVisible() )
- {
- const char *eventName = event->GetName();
- if ( !eventName )
- return;
-
- C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer();
- if ( !pLocalPlayer )
- return;
-
- int team = event->GetInt( "team", TEAM_UNASSIGNED );
- if ( team > TEAM_UNASSIGNED && team != pLocalPlayer->GetTeamNumber() )
- return;
-
- if ( FStrEq( eventName, "vote_cast" ) )
- {
- if ( m_bIsYesNoVote )
- {
- int vote_option = event->GetInt( "vote_option", TEAM_UNASSIGNED );
- if( vote_option == VOTE_OPTION2 )
- {
- pLocalPlayer->EmitSound( "Vote.Cast.No" );
- }
- else if( vote_option == VOTE_OPTION1 )
- {
- pLocalPlayer->EmitSound( "Vote.Cast.Yes" );
- }
- }
- else
- {
- pLocalPlayer->EmitSound( "Vote.Cast.Yes" );
- }
- }
- }
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: CS's custom C_VoteController +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "c_vote_controller.h" +#include "shareddefs.h" +#include "hud.h" +#include "cdll_client_int.h" +#include "igameevents.h" +#include "hud_vote.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +IMPLEMENT_CLIENTCLASS_DT( C_VoteController, DT_VoteController, CVoteController ) + RecvPropInt( RECVINFO( m_iActiveIssueIndex ), 0, C_VoteController::RecvProxy_VoteType ), + RecvPropInt( RECVINFO( m_iOnlyTeamToVote ) ), + RecvPropArray3( RECVINFO_ARRAY( m_nVoteOptionCount ), RecvPropInt( RECVINFO( m_nVoteOptionCount[0] ), 0, C_VoteController::RecvProxy_VoteOption ) ), + RecvPropInt( RECVINFO( m_nPotentialVotes ) ), + RecvPropBool( RECVINFO( m_bIsYesNoVote ) ) +END_RECV_TABLE() + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::RecvProxy_VoteType( const CRecvProxyData *pData, void *pStruct, void *pOut ) +{ + C_VoteController *pMe = (C_VoteController *)pStruct; + if( pMe->m_iActiveIssueIndex == pData->m_Value.m_Int ) + return; + + pMe->m_iActiveIssueIndex = pData->m_Value.m_Int; + pMe->m_bTypeDirty = true; + + // Since the contents of a new vote are in three parts, we can't directly send an event to the Hud + // because we don't really know if we have all three parts yet. So we'll mark dirty, and our think + // can notice that and send the event. +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::RecvProxy_VoteOption( const CRecvProxyData *pData, void *pStruct, void *pOut ) +{ + int index = pData->m_pRecvProp->GetOffset() / sizeof(int); + + size_t offset = offsetof( C_VoteController, m_nVoteOptionCount ); + C_VoteController *pMe = (C_VoteController *)((byte *)pStruct - offset ); + if( pMe->m_nVoteOptionCount[index] == pData->m_Value.m_Int ) + return; + + pMe->m_nVoteOptionCount[index] = pData->m_Value.m_Int; + pMe->m_bVotesDirty = true; + pMe->SetNextClientThink( gpGlobals->curtime + 0.001 ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_VoteController::C_VoteController() +{ + ResetData(); + + ListenForGameEvent( "vote_cast" ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +C_VoteController::~C_VoteController() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::ResetData() +{ + m_iActiveIssueIndex = INVALID_ISSUE; + m_iOnlyTeamToVote = TEAM_INVALID; + for( int index = 0; index < MAX_VOTE_OPTIONS; index++ ) + { + m_nVoteOptionCount[index] = 0; + } + m_nPotentialVotes = 0; + m_bVotesDirty = false; + m_bTypeDirty = false; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::Spawn( void ) +{ + ResetData(); + BaseClass::Spawn(); + SetNextClientThink( gpGlobals->curtime ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::ClientThink() +{ + BaseClass::ClientThink(); + + if( m_bTypeDirty ) + { + m_bTypeDirty = false; + m_bVotesDirty = true; + } + + if( m_bVotesDirty ) + { + if ( m_nPotentialVotes > 0 ) + { + // Currently hard-coded to MAX_VOTE_COUNT options per issue + DevMsg( "Votes: Option1 - %d, Option2 - %d, Option3 - %d, Option4 - %d, Option5 - %d\n", + m_nVoteOptionCount[0], m_nVoteOptionCount[1], m_nVoteOptionCount[2], m_nVoteOptionCount[3], m_nVoteOptionCount[4] ); + + IGameEvent *event = gameeventmanager->CreateEvent( "vote_changed" ); + if ( event ) + { + for ( int index = 0; index < MAX_VOTE_OPTIONS; index++ ) + { + char szOption[2]; + Q_snprintf( szOption, sizeof( szOption ), "%i", index + 1 ); + + char szVoteOption[13] = "vote_option"; + Q_strncat( szVoteOption, szOption, sizeof( szVoteOption ), COPY_ALL_CHARACTERS ); + + event->SetInt( szVoteOption, m_nVoteOptionCount[index] ); + } + event->SetInt( "potentialVotes", m_nPotentialVotes ); + gameeventmanager->FireEventClientSide( event ); + } + } + + m_bVotesDirty = false; + } + + SetNextClientThink( gpGlobals->curtime + 0.5f ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void C_VoteController::FireGameEvent( IGameEvent *event ) +{ + CHudVote *pHudVote = GET_HUDELEMENT( CHudVote ); + if ( pHudVote && pHudVote->IsVisible() ) + { + const char *eventName = event->GetName(); + if ( !eventName ) + return; + + C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer(); + if ( !pLocalPlayer ) + return; + + int team = event->GetInt( "team", TEAM_UNASSIGNED ); + if ( team > TEAM_UNASSIGNED && team != pLocalPlayer->GetTeamNumber() ) + return; + + if ( FStrEq( eventName, "vote_cast" ) ) + { + if ( m_bIsYesNoVote ) + { + int vote_option = event->GetInt( "vote_option", TEAM_UNASSIGNED ); + if( vote_option == VOTE_OPTION2 ) + { + pLocalPlayer->EmitSound( "Vote.Cast.No" ); + } + else if( vote_option == VOTE_OPTION1 ) + { + pLocalPlayer->EmitSound( "Vote.Cast.Yes" ); + } + } + else + { + pLocalPlayer->EmitSound( "Vote.Cast.Yes" ); + } + } + } }
\ No newline at end of file |