//----------------------------------------------------------------------------- // called when we're ticked... //----------------------------------------------------------------------------- void CEntityImageHealthPanel::OnTick() { // tick the entity panel BaseClass::OnTick(); C_BaseEntity* pBaseEntity = GetEntity(); if (!pBaseEntity) return; // Don't draw if I'm not visible in the tactical map if ( MapData().IsEntityVisibleToTactical( pBaseEntity ) == false ) return; if ( m_CommanderHealthBar ) m_CommanderHealthBar->SetHealth( (float)pBaseEntity->GetHealth() / (float)pBaseEntity->GetMaxHealth() ); if ( m_NormalHealthBar ) m_NormalHealthBar->SetHealth( (float)pBaseEntity->GetHealth() / (float)pBaseEntity->GetMaxHealth() ); // Hide the health bar we don't want to see C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); if ( pPlayer && (pBaseEntity->GetTeamNumber() != pPlayer->GetTeamNumber()) ) { if ( m_CommanderHealthBar ) m_CommanderHealthBar->SetVisible( false ); if ( m_NormalHealthBar ) m_NormalHealthBar->SetVisible( false ); if ( m_ResourceLevelBar ) m_ResourceLevelBar->SetVisible( false ); if ( m_pImagePanel ) m_pImagePanel->SetVisible( false ); } else if ( IsLocalPlayerInTactical() ) { if ( m_CommanderHealthBar ) m_CommanderHealthBar->SetVisible( true ); if ( m_NormalHealthBar ) m_NormalHealthBar->SetVisible( false ); if ( m_ResourceLevelBar ) m_ResourceLevelBar->SetVisible( true ); if ( m_pImagePanel ) m_pImagePanel->SetVisible( true ); } else { if ( m_CommanderHealthBar ) m_CommanderHealthBar->SetVisible( false ); if ( m_NormalHealthBar ) m_NormalHealthBar->SetVisible( true ); if ( m_ResourceLevelBar ) m_ResourceLevelBar->SetVisible( true ); if ( m_pImagePanel ) m_pImagePanel->SetVisible( false ); } }
//----------------------------------------------------------------------------- // Purpose: Draw function for the element //----------------------------------------------------------------------------- void CHUDBlockHealth::Paint() { wchar_t sIDString[ MAX_ID_STRING ]; sIDString[0] = 0; m_bBlockInTarget = false; C_BaseEntity *pEntity = ProcessTarget(); // Did we find a target? if ( pEntity ) { // Is it a block? if ( pEntity->IsBlock() && pEntity->GetHealth() > 0 ) { C_BlockBase *pBlock = static_cast< C_BlockBase * > ( pEntity ); Color c = GetTeamColor( pBlock->GetTeamNumber() ); float BlockHealth = pBlock->GetHealth(); float MaxBlockHealth = pBlock->GetMaxHealth(); float HealthRatio = ( BlockHealth / MaxBlockHealth ) * 100; wchar_t wszHealthText[ 10 ]; unsigned int HealthTextLen = ARRAYSIZE( wszHealthText ); _snwprintf( wszHealthText, HealthTextLen - 1, L"%.0f%%", HealthRatio ); wszHealthText[ HealthTextLen - 1 ] = '\0'; wchar_t *printFormatString = NULL; printFormatString = L"Health | %s1 |"; g_pVGuiLocalize->ConstructString( sIDString, sizeof( sIDString ), printFormatString, 1, wszHealthText ); // Check if we have anything to output if ( sIDString[0] ) { int wide, tall; vgui::surface()->GetTextSize( m_hFont, sIDString, wide, tall ); int ypos = YRES(260); int xpos = (ScreenWidth() - wide) / 2; vgui::surface()->DrawSetTextFont( m_hFont ); vgui::surface()->DrawSetTextPos( xpos, ypos ); vgui::surface()->DrawSetTextColor( c ); vgui::surface()->DrawPrintText( sIDString, wcslen(sIDString) ); } } } }
void CC_FreezeStatus( const CCommand& args ) { C_BaseEntity *pEntity = ProcessTarget(); // Did we find a target? if ( pEntity ) { // Is it a block? if ( pEntity->IsBlock() && pEntity->GetHealth() > 0 ) { C_BlockBase *pBlock = static_cast< C_BlockBase * > ( pEntity ); if ( ClassicGameRules() ) { int frozenplayerindex = engine->GetPlayerForUserID( pBlock->GetLastFrozenByUserID() ); C_BasePlayer *pPlayer = UTIL_PlayerByIndex( frozenplayerindex ); if ( pPlayer ) { Msg( "\tFrozen by %s\n", pPlayer->GetPlayerName() ); } else { Msg( "\tFrozen by WORLD\n" ); } int unfrozenplayerindex = engine->GetPlayerForUserID( pBlock->GetLastUnFrozenByUserID() ); pPlayer = UTIL_PlayerByIndex( unfrozenplayerindex ); if ( pPlayer ) { Msg( "\tUnFrozen by %s\n", pPlayer->GetPlayerName() ); } else { Msg( "\tUnFrozen by WORLD\n" ); } } } } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFFreezePanel::FireGameEvent( IGameEvent * event ) { const char *pEventName = event->GetName(); if ( Q_strcmp( "player_death", pEventName ) == 0 ) { // see if the local player died int iPlayerIndexVictim = engine->GetPlayerForUserID( event->GetInt( "userid" ) ); C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer(); if ( pLocalPlayer && iPlayerIndexVictim == pLocalPlayer->entindex() ) { // the local player is dead, see if this is a new nemesis or a revenge if ( event->GetInt( "dominated" ) > 0 ) { m_iShowNemesisPanel = SHOW_NEW_NEMESIS; } else if ( event->GetInt( "revenge" ) > 0 ) { m_iShowNemesisPanel = SHOW_REVENGE; } else { m_iShowNemesisPanel = SHOW_NO_NEMESIS; } } } else if ( Q_strcmp( "hide_freezepanel", pEventName ) == 0 ) { Hide(); } else if ( Q_strcmp( "freezecam_started", pEventName ) == 0 ) { ShowCalloutsIn( 1.0 ); ShowSnapshotPanelIn( 1.25 ); } else if ( Q_strcmp( "teamplay_win_panel", pEventName ) == 0 ) { Hide(); } else if ( Q_strcmp( "show_freezepanel", pEventName ) == 0 ) { C_TF_PlayerResource *tf_PR = dynamic_cast<C_TF_PlayerResource *>(g_PR); if ( !tf_PR ) { m_pNemesisSubPanel->SetDialogVariable( "nemesisname", NULL ); return; } Show(); ShowSnapshotPanel( false ); m_bHoldingAfterScreenshot = false; if ( m_iBasePanelOriginalX > -1 && m_iBasePanelOriginalY > -1 ) { m_pBasePanel->SetPos( m_iBasePanelOriginalX, m_iBasePanelOriginalY ); } // Get the entity who killed us m_iKillerIndex = event->GetInt( "killer" ); C_BaseEntity *pKiller = ClientEntityList().GetBaseEntity( m_iKillerIndex ); int xp,yp; GetPos( xp, yp ); if ( TFGameRules()->RoundHasBeenWon() ) { SetPos( xp, m_iYBase - YRES(50) ); } else { SetPos( xp, m_iYBase ); } if ( pKiller ) { CTFPlayer *pPlayer = ToTFPlayer ( pKiller ); int iMaxBuffedHealth = 0; if ( pPlayer ) { iMaxBuffedHealth = pPlayer->m_Shared.GetMaxBuffedHealth(); } int iKillerHealth = pKiller->GetHealth(); if ( !pKiller->IsAlive() ) { iKillerHealth = 0; } m_pKillerHealth->SetHealth( iKillerHealth, pKiller->GetMaxHealth(), iMaxBuffedHealth ); if ( pKiller->IsPlayer() ) { C_TFPlayer *pVictim = C_TFPlayer::GetLocalTFPlayer(); CTFPlayer *pTFKiller = ToTFPlayer( pKiller ); //If this was just a regular kill but this guy is our nemesis then just show it. if ( pVictim && pTFKiller && pTFKiller->m_Shared.IsPlayerDominated( pVictim->entindex() ) ) { if ( !pKiller->IsAlive() ) { m_pFreezeLabel->SetText( "#FreezePanel_Nemesis_Dead" ); } else { m_pFreezeLabel->SetText( "#FreezePanel_Nemesis" ); } } else { if ( !pKiller->IsAlive() ) { m_pFreezeLabel->SetText( "#FreezePanel_Killer_Dead" ); } else { m_pFreezeLabel->SetText( "#FreezePanel_Killer" ); } } m_pBasePanel->SetDialogVariable( "killername", g_PR->GetPlayerName( m_iKillerIndex ) ); if ( m_pAvatar ) { m_pAvatar->SetPlayer( (C_BasePlayer*)pKiller ); } } else if ( pKiller->IsBaseObject() ) { C_BaseObject *pObj = assert_cast<C_BaseObject *>( pKiller ); C_TFPlayer *pOwner = pObj->GetOwner(); Assert( pOwner && "Why does this object not have an owner?" ); if ( pOwner ) { m_iKillerIndex = pOwner->entindex(); m_pBasePanel->SetDialogVariable( "killername", g_PR->GetPlayerName( m_iKillerIndex ) ); if ( m_pAvatar ) { m_pAvatar->SetPlayer( pOwner ); } pKiller = pOwner; } if ( m_pFreezeLabel ) { if ( pKiller && !pKiller->IsAlive() ) { m_pFreezeLabel->SetText( "#FreezePanel_KillerObject_Dead" ); } else { m_pFreezeLabel->SetText( "#FreezePanel_KillerObject" ); } } const char *pszStatusName = pObj->GetStatusName(); wchar_t *wszLocalized = g_pVGuiLocalize->Find( pszStatusName ); if ( !wszLocalized ) { m_pBasePanel->SetDialogVariable( "objectkiller", pszStatusName ); } else { m_pBasePanel->SetDialogVariable( "objectkiller", wszLocalized ); } } else if ( m_pFreezeLabel ) { if ( !pKiller->IsAlive() ) { m_pFreezeLabel->SetText( "#FreezePanel_Killer_Dead" ); } else { m_pFreezeLabel->SetText( "#FreezePanel_Killer" ); } } } // see if we should show nemesis panel const wchar_t *pchNemesisText = NULL; switch ( m_iShowNemesisPanel ) { case SHOW_NO_NEMESIS: { C_TFPlayer *pVictim = C_TFPlayer::GetLocalTFPlayer(); CTFPlayer *pTFKiller = ToTFPlayer( pKiller ); //If this was just a regular kill but this guy is our nemesis then just show it. if ( pTFKiller && pTFKiller->m_Shared.IsPlayerDominated( pVictim->entindex() ) ) { pchNemesisText = g_pVGuiLocalize->Find( "#TF_FreezeNemesis" ); } } break; case SHOW_NEW_NEMESIS: { C_TFPlayer *pVictim = C_TFPlayer::GetLocalTFPlayer(); CTFPlayer *pTFKiller = ToTFPlayer( pKiller ); // check to see if killer is still the nemesis of victim; victim may have managed to kill him after victim's // death by grenade or some such, extracting revenge and clearing nemesis condition if ( pTFKiller && pTFKiller->m_Shared.IsPlayerDominated( pVictim->entindex() ) ) { pchNemesisText = g_pVGuiLocalize->Find( "#TF_NewNemesis" ); } } break; case SHOW_REVENGE: pchNemesisText = g_pVGuiLocalize->Find( "#TF_GotRevenge" ); break; default: Assert( false ); // invalid value break; } m_pNemesisSubPanel->SetDialogVariable( "nemesisname", pchNemesisText ); ShowNemesisPanel( NULL != pchNemesisText ); m_iShowNemesisPanel = SHOW_NO_NEMESIS; } }