summaryrefslogtreecommitdiff
path: root/game/client/dod/VGUI/dodspectatorgui.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/dod/VGUI/dodspectatorgui.cpp
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/dod/VGUI/dodspectatorgui.cpp')
-rw-r--r--game/client/dod/VGUI/dodspectatorgui.cpp194
1 files changed, 194 insertions, 0 deletions
diff --git a/game/client/dod/VGUI/dodspectatorgui.cpp b/game/client/dod/VGUI/dodspectatorgui.cpp
new file mode 100644
index 0000000..c4e1dd5
--- /dev/null
+++ b/game/client/dod/VGUI/dodspectatorgui.cpp
@@ -0,0 +1,194 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "dodspectatorgui.h"
+#include "hud.h"
+#include "dod_shareddefs.h"
+
+#include <vgui/ILocalize.h>
+#include <vgui/ISurface.h>
+#include <imapoverview.h>
+#include "dod_gamerules.h"
+#include "c_team.h"
+#include "c_dod_team.h"
+#include "c_dod_player.h"
+#include "c_dod_playerresource.h"
+
+using namespace vgui;
+
+//-----------------------------------------------------------------------------
+// Purpose: Constructor
+//-----------------------------------------------------------------------------
+CDODSpectatorGUI::CDODSpectatorGUI(IViewPort *pViewPort) : CSpectatorGUI(pViewPort)
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+bool CDODSpectatorGUI::NeedsUpdate( void )
+{
+ if ( !C_BasePlayer::GetLocalPlayer() )
+ return false;
+
+ if( IsVisible() )
+ return true;
+
+ //if ( DODGameRules()->IsGameUnderTimeLimit() && m_nLastTime != DODGameRules()->GetTimeLeft() )
+ // return true;
+
+ if ( m_nLastSpecMode != C_BasePlayer::GetLocalPlayer()->GetObserverMode() )
+ return true;
+
+ if ( m_nLastSpecTarget != C_BasePlayer::GetLocalPlayer()->GetObserverTarget() )
+ return true;
+
+ return BaseClass::NeedsUpdate();
+}
+
+Color CDODSpectatorGUI::GetClientColor(int index)
+{
+ C_BasePlayer *player = ToBasePlayer( ClientEntityList().GetEnt( index) );
+
+ int team = player->GetTeamNumber();
+
+ Assert( team == TEAM_ALLIES || team == TEAM_AXIS || team == TEAM_SPECTATOR );
+
+ if ( GameResources() )
+ return GameResources()->GetTeamColor( team );
+ else
+ return Color( 255, 255, 255, 255 );
+}
+
+void CDODSpectatorGUI::Update()
+{
+ BaseClass::Update();
+
+ C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer();
+
+ if( pLocalPlayer )
+ {
+ m_nLastSpecMode = pLocalPlayer->GetObserverMode();
+ m_nLastSpecTarget = pLocalPlayer->GetObserverTarget();
+ }
+
+ UpdateTimer();
+
+ UpdateScores();
+}
+
+void CDODSpectatorGUI::UpdateTimer( void )
+{
+ C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer();
+
+ if( !pPlayer || pPlayer->IsHLTV() )
+ {
+ wchar_t wText[ 63 ];
+
+ int timer;
+ timer = (int)( DODGameRules()->GetTimeLeft() );
+ if ( timer < 0 )
+ timer = 0;
+
+ _snwprintf ( wText, sizeof(wText)/sizeof(wchar_t), L"%d:%02d", (timer / 60), (timer % 60) );
+ wText[62] = 0;
+
+ SetDialogVariable( "timer", wText );
+ SetDialogVariable( "reinforcements", wText );
+ }
+ else if( pPlayer->GetTeamNumber() == TEAM_SPECTATOR )
+ {
+ SetDialogVariable( "timer", L"" );
+ SetDialogVariable( "reinforcements", L"" );
+ }
+ else
+ {
+ SetDialogVariable( "timer", L"" );
+
+ // we need to know how much longer we are going to be in death cam
+ // once we know that, we can ask dodgamerules if we are going to make the next
+ // wave. If we aren't, gamerules can tell us the new time based on the reserve wave
+ float flSpawnEligibleTime;
+
+ if ( pPlayer->GetObserverMode() == OBS_MODE_DEATHCAM )
+ {
+ flSpawnEligibleTime = pPlayer->GetDeathTime() + DEATH_CAM_TIME;
+ }
+ else
+ flSpawnEligibleTime = 0;
+
+ //will never return negative seconds
+ int timer = DODGameRules()->GetReinforcementTimerSeconds( pPlayer->GetTeamNumber(), flSpawnEligibleTime );
+
+ if( timer < 0 || ( pPlayer->GetObserverMode() == OBS_MODE_DEATHCAM ) )
+ {
+ SetDialogVariable( "reinforcements", L"" );
+ }
+ else
+ {
+ char szMins[4], szSecs[4];
+
+ int mins = timer / 60;
+ int secs = timer % 60;
+
+ Q_snprintf( szMins, sizeof(szMins), "%d", mins );
+ Q_snprintf( szSecs, sizeof(szSecs), "%d", secs );
+
+ wchar_t wMins[4], wSecs[4];
+ g_pVGuiLocalize->ConvertANSIToUnicode(szMins, wMins, sizeof(wMins));
+ g_pVGuiLocalize->ConvertANSIToUnicode(szSecs, wSecs, sizeof(wSecs));
+
+ wchar_t wLabel[128];
+
+ if ( mins == 1 ) //"1 minute"
+ {
+ g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Dod_Reinforcements_in_min" ), 2, wMins, wSecs );
+ }
+ else if ( mins > 0 ) //"2 minutes"
+ {
+ g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Dod_Reinforcements_in_mins" ), 2, wMins, wSecs );
+ }
+ else if ( secs == 1 ) //"1 second"
+ {
+ g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Dod_Reinforcements_in_sec" ), 1, wSecs );
+ }
+ else if ( secs == 0 ) //"Prepare to Respawn"
+ {
+ g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Dod_Reinforcements_prepare_to_respawn" ), 0 );
+ }
+ else //"2 seconds"
+ {
+ g_pVGuiLocalize->ConstructString( wLabel, sizeof( wLabel ), g_pVGuiLocalize->Find("#Dod_Reinforcements_in_secs" ), 1, wSecs );
+ }
+
+ SetDialogVariable( "reinforcements", wLabel );
+ }
+ }
+}
+
+void CDODSpectatorGUI::UpdateScores( void )
+{
+ C_DODTeam *pAlliesTeam = static_cast<C_DODTeam *>( GetGlobalTeam(TEAM_ALLIES) );
+ if ( pAlliesTeam )
+ {
+ SetDialogVariable( "alliesscore", pAlliesTeam->GetRoundsWon() );
+ }
+
+ C_DODTeam *pAxisTeam = static_cast<C_DODTeam *>( GetGlobalTeam(TEAM_AXIS) );
+ if ( pAxisTeam )
+ {
+ SetDialogVariable( "axisscore", pAxisTeam->GetRoundsWon() );
+ }
+}
+
+bool CDODSpectatorGUI::ShouldShowPlayerLabel( int specmode )
+{
+ return ( (specmode == OBS_MODE_IN_EYE) ||
+ (specmode == OBS_MODE_CHASE) ||
+ (specmode == OBS_MODE_DEATHCAM) );
+} \ No newline at end of file