//----------------------------------------------------------------------------- // Purpose: called every frame to get ammo info from the weapon //----------------------------------------------------------------------------- void CDoDHudAmmo::OnThink() { C_BaseCombatWeapon *wpn = GetActiveWeapon(); C_BasePlayer *player = C_BasePlayer::GetLocalPlayer(); hudlcd->SetGlobalStat( "(weapon_print_name)", wpn ? wpn->GetPrintName() : " " ); hudlcd->SetGlobalStat( "(weapon_name)", wpn ? wpn->GetName() : " " ); if ( !wpn || !player || !wpn->UsesPrimaryAmmo() ) { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); SetPaintEnabled( false ); SetPaintBackgroundEnabled( false ); return; } else { SetPaintEnabled( true ); SetPaintBackgroundEnabled( true ); } // get the ammo in our clip int ammo1 = wpn->Clip1(); int ammo2; if ( ammo1 < 0 ) { // we don't use clip ammo, just use the total ammo count ammo1 = player->GetAmmoCount( wpn->GetPrimaryAmmoType() ); ammo2 = 0; } else { // we use clip ammo, so the second ammo is the total ammo ammo2 = player->GetAmmoCount( wpn->GetPrimaryAmmoType() ); } hudlcd->SetGlobalStat( "(ammo_primary)", VarArgs( "%d", ammo1 ) ); hudlcd->SetGlobalStat( "(ammo_secondary)", VarArgs( "%d", ammo2 ) ); if ( wpn == m_hCurrentActiveWeapon ) { // same weapon, just update counts SetAmmo( ammo1, true ); SetAmmo2( ammo2, true ); } else { // diferent weapon, change without triggering SetAmmo( ammo1, false ); SetAmmo2( ammo2, false ); // update whether or not we show the total ammo display m_bUsesClips = wpn->UsesClipsForAmmo1(); m_hCurrentActiveWeapon = wpn; } }
//----------------------------------------------------------------------------- // Purpose: called every frame to get ammo info from the weapon //----------------------------------------------------------------------------- void CHudAmmo::UpdatePlayerAmmo( C_BasePlayer *player ) { // Clear out the vehicle entity m_hCurrentVehicle = NULL; C_BaseCombatWeapon *wpn = GetActiveWeapon(); hudlcd->SetGlobalStat( "(weapon_print_name)", wpn ? wpn->GetPrintName() : " " ); hudlcd->SetGlobalStat( "(weapon_name)", wpn ? wpn->GetName() : " " ); if ( !wpn || !player || !wpn->UsesPrimaryAmmo() ) { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); SetPaintEnabled(false); SetPaintBackgroundEnabled(false); return; } SetPaintEnabled(true); SetPaintBackgroundEnabled(true); // Get our icons for the ammo types m_iconPrimaryAmmo = gWR.GetAmmoIconFromWeapon( wpn->GetPrimaryAmmoType() ); // get the ammo in our clip int ammo1 = wpn->Clip1(); int ammo2; if (ammo1 < 0) { // we don't use clip ammo, just use the total ammo count ammo1 = player->GetAmmoCount(wpn->GetPrimaryAmmoType()); ammo2 = 0; } else { // we use clip ammo, so the second ammo is the total ammo ammo2 = player->GetAmmoCount(wpn->GetPrimaryAmmoType()); } hudlcd->SetGlobalStat( "(ammo_primary)", VarArgs( "%d", ammo1 ) ); hudlcd->SetGlobalStat( "(ammo_secondary)", VarArgs( "%d", ammo2 ) ); if (wpn == m_hCurrentActiveWeapon) { // same weapon, just update counts SetAmmo(ammo1, true); SetAmmo2(ammo2, true); } else { // diferent weapon, change without triggering SetAmmo(ammo1, false); SetAmmo2(ammo2, false); // update whether or not we show the total ammo display if (wpn->UsesClipsForAmmo1()) { SetShouldDisplaySecondaryValue(true); g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("WeaponUsesClips"); } else { g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("WeaponDoesNotUseClips"); SetShouldDisplaySecondaryValue(false); } g_pClientMode->GetViewportAnimationController()->StartAnimationSequence("WeaponChanged"); m_hCurrentActiveWeapon = wpn; } }
//----------------------------------------------------------------------------- // Purpose: Get ammo info from the weapon and update the displays. //----------------------------------------------------------------------------- void CTFHudWeaponAmmo::OnThink() { // Get the player and active weapon. C_TFPlayer *pPlayer = C_TFPlayer::GetLocalTFPlayer(); if ( !pPlayer ) return; C_BaseCombatWeapon *pWeapon = pPlayer->GetActiveWeapon(); if ( tf2c_ammobucket.GetBool() && m_pWeaponBucket && pWeapon ) { const CHudTexture *pTexture = pWeapon->GetSpriteInactive(); // red team if ( pPlayer ) { if ( pPlayer->GetTeamNumber() == TF_TEAM_BLUE ) { pTexture = pWeapon->GetSpriteActive(); } } if ( pTexture ) { char szImage[64]; Q_snprintf( szImage, sizeof(szImage), "../%s", pTexture->szTextureFile ); m_pWeaponBucket->SetImage( szImage ); m_pWeaponBucket->SetVisible( true ); } else { m_pWeaponBucket->SetVisible( false ); } } else { m_pWeaponBucket->SetVisible( false ); } if ( m_flNextThink < gpGlobals->curtime ) { hudlcd->SetGlobalStat( "(weapon_print_name)", pWeapon ? pWeapon->GetPrintName() : " " ); hudlcd->SetGlobalStat( "(weapon_name)", pWeapon ? pWeapon->GetName() : " " ); if ( !pPlayer || !pWeapon || !pWeapon->UsesPrimaryAmmo() ) { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); // turn off our ammo counts UpdateAmmoLabels( false, false, false ); m_nAmmo = -1; m_nAmmo2 = -1; } else { // Get the ammo in our clip. int nAmmo1 = pWeapon->Clip1(); int nAmmo2 = 0; // Clip ammo not used, get total ammo count. if ( nAmmo1 < 0 ) { nAmmo1 = pPlayer->GetAmmoCount( pWeapon->GetPrimaryAmmoType() ); } // Clip ammo, so the second ammo is the total ammo. else { nAmmo2 = pPlayer->GetAmmoCount( pWeapon->GetPrimaryAmmoType() ); } hudlcd->SetGlobalStat( "(ammo_primary)", VarArgs( "%d", nAmmo1 ) ); hudlcd->SetGlobalStat( "(ammo_secondary)", VarArgs( "%d", nAmmo2 ) ); if ( m_nAmmo != nAmmo1 || m_nAmmo2 != nAmmo2 || m_hCurrentActiveWeapon.Get() != pWeapon ) { m_nAmmo = nAmmo1; m_nAmmo2 = nAmmo2; m_hCurrentActiveWeapon = pWeapon; if ( m_hCurrentActiveWeapon.Get()->UsesClipsForAmmo1() ) { UpdateAmmoLabels( true, true, false ); SetDialogVariable( "Ammo", m_nAmmo ); SetDialogVariable( "AmmoInReserve", m_nAmmo2 ); } else { UpdateAmmoLabels( false, false, true ); SetDialogVariable( "Ammo", m_nAmmo ); } } } m_flNextThink = gpGlobals->curtime + 0.1f; } }