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.
98 lines
2.6 KiB
98 lines
2.6 KiB
//========= Copyright © 1996-2006, Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Entity that propagates train data for escort gametype |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
#include "cbase.h" |
|
#include "c_team_train_watcher.h" |
|
#include "igameevents.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
IMPLEMENT_CLIENTCLASS_DT_NOBASE(C_TeamTrainWatcher, DT_TeamTrainWatcher, CTeamTrainWatcher) |
|
|
|
RecvPropFloat( RECVINFO( m_flTotalProgress ) ), |
|
RecvPropInt( RECVINFO( m_iTrainSpeedLevel ) ), |
|
RecvPropFloat( RECVINFO( m_flRecedeTime ) ), |
|
RecvPropInt( RECVINFO( m_nNumCappers ) ), |
|
|
|
END_RECV_TABLE() |
|
|
|
C_TeamTrainWatcher *g_pTrainWatcher = NULL; |
|
|
|
C_TeamTrainWatcher::C_TeamTrainWatcher() |
|
{ |
|
g_pTrainWatcher = this; |
|
|
|
// force updates when we get our baseline |
|
m_iTrainSpeedLevel = -2; |
|
m_flTotalProgress = -1; |
|
m_flRecedeTime = -1; |
|
|
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
C_TeamTrainWatcher::~C_TeamTrainWatcher() |
|
{ |
|
if ( g_pTrainWatcher == this ) |
|
{ |
|
g_pTrainWatcher = NULL; |
|
} |
|
} |
|
|
|
void C_TeamTrainWatcher::OnPreDataChanged( DataUpdateType_t updateType ) |
|
{ |
|
BaseClass::OnPreDataChanged( updateType ); |
|
|
|
m_iOldTrainSpeedLevel = m_iTrainSpeedLevel; |
|
m_flOldProgress = m_flTotalProgress; |
|
m_flOldRecedeTime = m_flRecedeTime; |
|
m_nOldNumCappers = m_nNumCappers; |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void C_TeamTrainWatcher::OnDataChanged( DataUpdateType_t updateType ) |
|
{ |
|
if ( m_iOldTrainSpeedLevel != m_iTrainSpeedLevel || m_nOldNumCappers != m_nNumCappers ) |
|
{ |
|
IGameEvent *event = gameeventmanager->CreateEvent( "escort_speed" ); |
|
if ( event ) |
|
{ |
|
event->SetInt( "speed", m_iTrainSpeedLevel ); |
|
event->SetInt( "players", m_nNumCappers ); |
|
gameeventmanager->FireEventClientSide( event ); |
|
} |
|
} |
|
|
|
if ( m_flOldProgress != m_flTotalProgress ) |
|
{ |
|
IGameEvent *event = gameeventmanager->CreateEvent( "escort_progress" ); |
|
if ( event ) |
|
{ |
|
event->SetFloat( "progress", m_flTotalProgress ); |
|
|
|
if ( m_flOldProgress <= -1 ) |
|
{ |
|
event->SetBool( "reset", true ); |
|
} |
|
|
|
gameeventmanager->FireEventClientSide( event ); |
|
} |
|
} |
|
|
|
if ( m_flOldRecedeTime != m_flRecedeTime ) |
|
{ |
|
IGameEvent *event = gameeventmanager->CreateEvent( "escort_recede" ); |
|
if ( event ) |
|
{ |
|
event->SetFloat( "recedetime", m_flRecedeTime ); |
|
gameeventmanager->FireEventClientSide( event ); |
|
} |
|
} |
|
} |