void CSpectatorMenu::OnThink() { BaseClass::OnThink(); IGameResources *gr = GameResources(); if ( !gr ) return; // make sure the player combo box is up to date int playernum = GetSpectatorTarget(); const char *selectedPlayerName = gr->GetPlayerName( playernum ); const char *currentPlayerName = ""; KeyValues *kv = m_pPlayerList->GetActiveItemUserData(); if ( kv ) { currentPlayerName = kv->GetString("player"); } if ( !FStrEq( currentPlayerName, selectedPlayerName ) ) { for ( int i=0; i<m_pPlayerList->GetItemCount(); ++i ) { KeyValues *kv = m_pPlayerList->GetItemUserData( i ); if ( kv && FStrEq( kv->GetString( "player" ), selectedPlayerName ) ) { m_pPlayerList->ActivateItemByRow( i ); m_pPlayerList->SetText( selectedPlayerName ); break; } } } }
//----------------------------------------------------------------------------- // Purpose: Adds a new row to the scoreboard, from the playerinfo structure //----------------------------------------------------------------------------- bool CClientScoreBoardDialog::GetPlayerScoreInfo(int playerIndex, KeyValues *kv) { IGameResources *gr = GameResources(); if (!gr ) return false; kv->SetInt("deaths", gr->GetDeaths( playerIndex ) ); kv->SetInt("frags", gr->GetFrags( playerIndex ) ); kv->SetInt("ping", gr->GetPing( playerIndex ) ) ; kv->SetString("name", gr->GetPlayerName( playerIndex ) ); kv->SetInt("playerIndex", playerIndex); // kv->SetInt("voice", s_VoiceImage[GetClientVoice()->GetSpeakerStatus( playerIndex - 1) ]); /* // setup the tracker column if (g_pFriendsUser) { unsigned int trackerID = gEngfuncs.GetTrackerIDForPlayer(row); if (g_pFriendsUser->IsBuddy(trackerID) && trackerID != g_pFriendsUser->GetFriendsID()) { kv->SetInt("tracker",TrackerImage); } } */ return true; }
//----------------------------------------------------------------------------- // Purpose: Adds a new row to the scoreboard, from the playerinfo structure //----------------------------------------------------------------------------- bool CClientScoreBoardDialog::GetPlayerScoreInfo(int playerIndex, KeyValues *kv) { IGameResources *gr = GameResources(); if (!gr ) return false; kv->SetInt("deaths", gr->GetDeaths( playerIndex ) ); kv->SetInt("frags", gr->GetFrags( playerIndex ) ); kv->SetInt("ping", gr->GetPing( playerIndex ) ) ; kv->SetString("name", gr->GetPlayerName( playerIndex ) ); kv->SetInt("playerIndex", playerIndex); return true; }
void CSpectatorMenu::FireGameEvent( IGameEvent * event ) { const char *pEventName = event->GetName(); if ( Q_strcmp( "spec_target_updated", pEventName ) == 0 ) { IGameResources *gr = GameResources(); if ( !gr ) return; // make sure the player combo box is up to date int playernum = GetSpectatorTarget(); if ( playernum < 1 || playernum > MAX_PLAYERS ) return; const char *selectedPlayerName = gr->GetPlayerName( playernum ); const char *currentPlayerName = ""; KeyValues *kv = m_pPlayerList->GetActiveItemUserData(); if ( kv ) { currentPlayerName = kv->GetString( "player" ); } if ( !FStrEq( currentPlayerName, selectedPlayerName ) ) { for ( int i=0; i<m_pPlayerList->GetItemCount(); ++i ) { KeyValues *kv = m_pPlayerList->GetItemUserData( i ); if ( kv && FStrEq( kv->GetString( "player" ), selectedPlayerName ) ) { m_pPlayerList->ActivateItemByRow( i ); break; } } } } }
//----------------------------------------------------------------------------- // Purpose: Updates the gui, rearranges elements //----------------------------------------------------------------------------- void CSpectatorGUI::Update() { int wide, tall; int bx, by, bwide, btall; GetHudSize(wide, tall); m_pTopBar->GetBounds( bx, by, bwide, btall ); IGameResources *gr = GameResources(); int specmode = GetSpectatorMode(); int playernum = GetSpectatorTarget(); IViewPortPanel *overview = GetViewPortInterface()->FindPanelByName( PANEL_OVERVIEW ); if ( overview && overview->IsVisible() ) { int mx, my, mwide, mtall; VPANEL p = overview->GetVPanel(); vgui::ipanel()->GetPos( p, mx, my ); vgui::ipanel()->GetSize( p, mwide, mtall ); if ( my < btall ) { // reduce to bar m_pTopBar->SetSize( wide - (mx + mwide), btall ); m_pTopBar->SetPos( (mx + mwide), 0 ); } else { // full top bar m_pTopBar->SetSize( wide , btall ); m_pTopBar->SetPos( 0, 0 ); } } else { // full top bar m_pTopBar->SetSize( wide , btall ); // change width, keep height m_pTopBar->SetPos( 0, 0 ); } m_pPlayerLabel->SetVisible( ShouldShowPlayerLabel(specmode) ); // update player name filed, text & color if ( playernum > 0 && playernum <= gpGlobals->maxClients && gr ) { Color c = gr->GetTeamColor( gr->GetTeam(playernum) ); // Player's team color m_pPlayerLabel->SetFgColor( c ); wchar_t playerText[ 80 ], playerName[ 64 ], health[ 10 ]; wcscpy( playerText, L"Unable to find #Spec_PlayerItem*" ); memset( playerName, 0x0, sizeof( playerName ) ); g_pVGuiLocalize->ConvertANSIToUnicode( UTIL_SafeName(gr->GetPlayerName( playernum )), playerName, sizeof( playerName ) ); int iHealth = gr->GetHealth( playernum ); if ( iHealth > 0 && gr->IsAlive(playernum) ) { _snwprintf( health, sizeof( health ), L"%i", iHealth ); g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem_Team" ), 2, playerName, health ); } else { g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem" ), 1, playerName ); } m_pPlayerLabel->SetText( playerText ); } else { m_pPlayerLabel->SetText( L"" ); } // update extra info field wchar_t szEtxraInfo[1024]; wchar_t szTitleLabel[1024]; char tempstr[128]; if ( g_bEngineIsHLTV ) { // set spectator number and HLTV title Q_snprintf(tempstr,sizeof(tempstr),"Spectators : %d", HLTVCamera()->GetNumSpectators() ); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr,szEtxraInfo,sizeof(szEtxraInfo)); Q_strncpy( tempstr, HLTVCamera()->GetTitleText(), sizeof(tempstr) ); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr,szTitleLabel,sizeof(szTitleLabel)); } #if defined( REPLAY_ENABLED ) else if ( engine->IsReplay() ) { // set spectator number and Replay title Q_snprintf(tempstr,sizeof(tempstr),"Spectators : %d", ReplayCamera()->GetNumSpectators() ); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr,szEtxraInfo,sizeof(szEtxraInfo)); Q_strncpy( tempstr, ReplayCamera()->GetTitleText(), sizeof(tempstr) ); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr,szTitleLabel,sizeof(szTitleLabel)); } #endif else { // otherwise show map name Q_FileBase( engine->GetLevelName(), tempstr, sizeof(tempstr) ); wchar_t wMapName[64]; g_pVGuiLocalize->ConvertANSIToUnicode(tempstr,wMapName,sizeof(wMapName)); g_pVGuiLocalize->ConstructString( szEtxraInfo,sizeof( szEtxraInfo ), g_pVGuiLocalize->Find("#Spec_Map" ),1, wMapName ); g_pVGuiLocalize->ConvertANSIToUnicode( "" ,szTitleLabel,sizeof(szTitleLabel)); } SetLabelText("extrainfo", szEtxraInfo ); SetLabelText("titlelabel", szTitleLabel ); }
void CSpectatorMenu::Update( void ) { IGameResources *gr = GameResources(); Reset(); if ( m_iDuckKey == BUTTON_CODE_INVALID ) { m_iDuckKey = gameuifuncs->GetButtonCodeForBind( "duck" ); } if ( !gr ) return; int iPlayerIndex; for ( iPlayerIndex = 1 ; iPlayerIndex <= gpGlobals->maxClients; iPlayerIndex++ ) { // does this slot in the array have a name? if ( !gr->IsConnected( iPlayerIndex ) ) continue; if ( gr->IsLocalPlayer( iPlayerIndex ) ) continue; if ( !gr->IsAlive( iPlayerIndex ) ) continue; wchar_t playerText[ 80 ], playerName[ 64 ], *team, teamText[ 64 ]; char localizeTeamName[64]; char szPlayerIndex[16]; g_pVGuiLocalize->ConvertANSIToUnicode( UTIL_SafeName( gr->GetPlayerName(iPlayerIndex) ), playerName, sizeof( playerName ) ); const char * teamname = gr->GetTeamName( gr->GetTeam(iPlayerIndex) ); if ( teamname ) { Q_snprintf( localizeTeamName, sizeof( localizeTeamName ), "#%s", teamname ); team=g_pVGuiLocalize->Find( localizeTeamName ); if ( !team ) { g_pVGuiLocalize->ConvertANSIToUnicode( teamname , teamText, sizeof( teamText ) ); team = teamText; } g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem_Team" ), 2, playerName, team ); } else { g_pVGuiLocalize->ConstructString( playerText, sizeof( playerText ), g_pVGuiLocalize->Find( "#Spec_PlayerItem" ), 1, playerName ); } Q_snprintf( szPlayerIndex, sizeof( szPlayerIndex ), "%d", iPlayerIndex ); KeyValues *kv = new KeyValues( "UserData", "player", gr->GetPlayerName( iPlayerIndex ), "index", szPlayerIndex ); m_pPlayerList->AddItem( playerText, kv ); kv->deleteThis(); } // make sure the player combo box is up to date int playernum = GetSpectatorTarget(); const char *selectedPlayerName = gr->GetPlayerName( playernum ); for ( iPlayerIndex=0; iPlayerIndex<m_pPlayerList->GetItemCount(); ++iPlayerIndex ) { KeyValues *kv = m_pPlayerList->GetItemUserData( iPlayerIndex ); if ( kv && FStrEq( kv->GetString( "player" ), selectedPlayerName ) ) { m_pPlayerList->ActivateItemByRow( iPlayerIndex ); break; } } }
//----------------------------------------------------------------------------- // Purpose: Updates the gui, rearranges elements //----------------------------------------------------------------------------- void CMOMSpectatorGUI::Update() { int wide, tall; int bx, by, bwide, btall; GetHudSize(wide, tall); m_pTopBar->GetBounds(bx, by, bwide, btall); IGameResources *gr = GameResources(); int specmode = GetSpectatorMode(); int playernum = GetSpectatorTarget(); IViewPortPanel *overview = gViewPortInterface->FindPanelByName(PANEL_OVERVIEW); if (overview && overview->IsVisible()) { int mx, my, mwide, mtall; VPANEL p = overview->GetVPanel(); vgui::ipanel()->GetPos(p, mx, my); vgui::ipanel()->GetSize(p, mwide, mtall); if (my < btall) { // reduce to bar m_pTopBar->SetSize(wide - (mx + mwide), btall); m_pTopBar->SetPos((mx + mwide), 0); } else { // full top bar m_pTopBar->SetSize(wide, btall); m_pTopBar->SetPos(0, 0); } } else { // full top bar m_pTopBar->SetSize(wide, btall); // change width, keep height m_pTopBar->SetPos(0, 0); } m_pPlayerLabel->SetVisible(ShouldShowPlayerLabel(specmode)); // update player name filed, text & color if (playernum > 0 && playernum <= gpGlobals->maxClients && gr) { Color c = gr->GetTeamColor(gr->GetTeam(playernum)); // Player's team color m_pPlayerLabel->SetFgColor(c); wchar_t playerText[80], playerName[64]; V_wcsncpy(playerText, L"Unable to find #Spec_PlayerItem*", sizeof(playerText)); memset(playerName, 0x0, sizeof(playerName)); g_pVGuiLocalize->ConvertANSIToUnicode(UTIL_SafeName(gr->GetPlayerName(playernum)), playerName, sizeof(playerName)); g_pVGuiLocalize->ConstructString(playerText, sizeof(playerText), g_pVGuiLocalize->Find("#Spec_PlayerItem"), 1, playerName); m_pPlayerLabel->SetText(playerText); } else { m_pPlayerLabel->SetText(""); } CMomentumPlayer *pPlayer = ToCMOMPlayer(CBasePlayer::GetLocalPlayer()); if (pPlayer) { C_MomentumReplayGhostEntity *pReplayEnt = pPlayer->GetReplayEnt(); if (pReplayEnt) { wchar_t wPlayerName[MAX_PLAYER_NAME_LENGTH], szPlayerInfo[128]; g_pVGuiLocalize->ConvertANSIToUnicode(pReplayEnt->m_pszPlayerName, wPlayerName, sizeof(wPlayerName)); swprintf(szPlayerInfo, L"%s %s", g_pVGuiLocalize->Find("#MOM_ReplayPlayer"), wPlayerName); SetLabelText("playerlabel", szPlayerInfo); char tempRunTime[BUFSIZETIME]; wchar_t szTimeLabel[BUFSIZELOCL], wTime[BUFSIZETIME]; mom_UTIL->FormatTime(pReplayEnt->m_RunData.m_flRunTime, tempRunTime); g_pVGuiLocalize->ConvertANSIToUnicode(tempRunTime, wTime, sizeof(wTime)); g_pVGuiLocalize->ConstructString(szTimeLabel, sizeof(szTimeLabel), g_pVGuiLocalize->Find("#MOM_MF_RunTime"), 1, wTime); SetLabelText("timelabel", szTimeLabel); SetLabelText("replaylabel", g_pVGuiLocalize->Find("#MOM_WatchingReplay")); } else { m_pReplayLabel->SetText(""); } } // update extra info field wchar_t szEtxraInfo[1024]; wchar_t szTitleLabel[1024]; char tempstr[128]; if (engine->IsHLTV()) { // set spectator number and HLTV title Q_snprintf(tempstr, sizeof(tempstr), "Spectators : %d", HLTVCamera()->GetNumSpectators()); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr, szEtxraInfo, sizeof(szEtxraInfo)); Q_strncpy(tempstr, HLTVCamera()->GetTitleText(), sizeof(tempstr)); g_pVGuiLocalize->ConvertANSIToUnicode(tempstr, szTitleLabel, sizeof(szTitleLabel)); } else { // otherwise show map name Q_FileBase(engine->GetLevelName(), tempstr, sizeof(tempstr)); wchar_t wMapName[64]; g_pVGuiLocalize->ConvertANSIToUnicode(tempstr, wMapName, sizeof(wMapName)); g_pVGuiLocalize->ConstructString(szEtxraInfo, sizeof(szEtxraInfo), g_pVGuiLocalize->Find("#Spec_Map"), 1, wMapName); g_pVGuiLocalize->ConvertANSIToUnicode("", szTitleLabel, sizeof(szTitleLabel)); } SetLabelText("extrainfo", szEtxraInfo); SetLabelText("titlelabel", szTitleLabel); }
void CSpectatorMenu::Update( void ) { IGameResources *gr = GameResources(); Reset(); if ( m_iDuckKey == BUTTON_CODE_INVALID ) { m_iDuckKey = gameuifuncs->GetButtonCodeForBind( "duck" ); } if ( !gr ) return; if (!m_pTargetList->IsDropdownVisible()) { m_pTargetList->GetMenu()->DeleteAllItems(); KeyValues *pKV = new KeyValues("UserData", "index", GetMatchBall() ? GetMatchBall()->entindex() : 0); m_pTargetList->GetMenu()->AddMenuItem("Ball", VarArgs("spec_by_index %d", GetMatchBall() ? GetMatchBall()->entindex() : 0), this, pKV); pKV->deleteThis(); for (int i = 1; i <= gpGlobals->maxClients; i++) { if (!gr->IsConnected(i) || gr->IsLocalPlayer(i) || gr->GetTeam(i) != TEAM_A && gr->GetTeam(i) != TEAM_B) continue; KeyValues *pKV = new KeyValues("UserData", "index", i); char playerText[MAX_PLAYER_NAME_LENGTH * 2]; Q_snprintf(playerText, sizeof(playerText), "%s | %s", GetGlobalTeam(gr->GetTeam(i))->GetCode(), gr->GetPlayerName(i)); m_pTargetList->GetMenu()->AddMenuItem(playerText, VarArgs("spec_by_index %d", i), this, pKV); pKV->deleteThis(); } m_pTargetList->GetMenu()->MakeReadyForUse(); } }