//----------------------------------------------------------------------------- // 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; } }
void CBliinkHudAmmo::Paint() { C_BliinkPlayer* pBliinkPlayer = ToBliinkPlayer(C_BasePlayer::GetLocalPlayer()); if( !pBliinkPlayer ) return; if( pBliinkPlayer->State_Get() != STATE_BLIINK_SURVIVOR ) return; C_BaseCombatWeapon* pWeapon = pBliinkPlayer->GetActiveWeapon(); if( !pWeapon ) return; if( pWeapon->IsMeleeWeapon() ) return; int iClipCount = pWeapon->Clip1(); int iAmmoCount = pBliinkPlayer->GetAmmoCount( pWeapon->GetPrimaryAmmoType() ); vgui::IScheme* pScheme = vgui::scheme()->GetIScheme(GetScheme()); int wide, tall; SetPaintBorderEnabled(false); // Drawing background surface()->DrawSetTexture( m_nAmmoBack ); surface()->DrawTexturedRect( 0, 0, 128, 64 ); // Drawing ammo count (clip/ammo) wchar_t pNumberText[12]; V_snwprintf( pNumberText, ARRAYSIZE(pNumberText), L"%d : %d", iClipCount, iAmmoCount ); vgui::HFont hNumberFont = pScheme->GetFont( "BliinkHUDLarge" ); surface()->GetTextSize(hNumberFont, pNumberText, wide, tall); int number_xpos = (int) floor(64.0f - ((float) wide)/2.0f); int number_ypos = (int) floor(32.0f - ((float) tall)/2.0f); surface()->DrawSetTextFont( hNumberFont ); surface()->DrawSetTextColor( 210, 210, 210, 255 ); surface()->DrawSetTextPos( number_xpos, number_ypos ); surface()->DrawPrintText( pNumberText, wcslen(pNumberText) ); }
//----------------------------------------------------------------------------- // 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; } }
void CHudAmmo::Paint( void ) { int r, g, b, a, nUnused; int x, y; Color clrAmmo; if (!ShouldDraw()) return; C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); C_BaseCombatWeapon *pActiveWeapon = GetActiveWeapon(); // find and display our current selection if ( !pPlayer || !pActiveWeapon ) { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); return; } hudlcd->SetGlobalStat( "(weapon_print_name)", pActiveWeapon ? pActiveWeapon->GetPrintName() : " " ); hudlcd->SetGlobalStat( "(weapon_name)", pActiveWeapon ? pActiveWeapon->GetName() : " " ); if ( ( pActiveWeapon->GetPrimaryAmmoType() == -1 ) && ( pActiveWeapon->GetSecondaryAmmoType() == -1 ) ) return; int nFontWidth = GetNumberFontWidth(); int nFontHeight = GetNumberFontHeight(); a = (int)max( MIN_ALPHA, m_flFade ); if ( m_flFade > 0 ) m_flFade -= ( gpGlobals->frametime * 20 ); (gHUD.m_clrYellowish).GetColor( r, g, b, nUnused ); clrAmmo.SetColor( r, g, b, a ); int nHudElemWidth, nHudElemHeight; GetSize( nHudElemWidth, nHudElemHeight ); // Does this weapon have a clip? y = nHudElemHeight - ( nFontHeight * 1.5 ); // Does weapon have any ammo at all? if ( pActiveWeapon->GetPrimaryAmmoType() != -1 ) { CHudTexture *icon_ammo = gWR.GetAmmoIconFromWeapon( pActiveWeapon->GetPrimaryAmmoType() ); if ( !icon_ammo ) { return; } int nIconWidth = icon_ammo->Width(); if ( pActiveWeapon->UsesClipsForAmmo1() ) { // room for the number and the '|' and the current ammo x = nHudElemWidth - (8 * nFontWidth) - nIconWidth; x = DrawHudNumber( x, y, pActiveWeapon->Clip1(), clrAmmo ); int nBarWidth = nFontWidth / 10; x += nFontWidth / 2; (gHUD.m_clrYellowish).GetColor( r, g, b, nUnused ); clrAmmo.SetColor( r, g, b, a ); // draw the | bar clrAmmo.SetColor( r, g, b, a ); vgui::surface()->DrawSetColor( clrAmmo ); vgui::surface()->DrawFilledRect( x, y, x + nBarWidth, y + nFontHeight ); x += nBarWidth + nFontWidth / 2; x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ), clrAmmo ); } else { // SPR_Draw a bullets only line x = nHudElemWidth - 4 * nFontWidth - nIconWidth; x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ), clrAmmo ); } // Draw the ammo Icon icon_ammo->DrawSelf( x, y, clrAmmo ); hudlcd->SetGlobalStat( "(ammo_primary)", VarArgs( "%d", pPlayer->GetAmmoCount( pActiveWeapon->GetPrimaryAmmoType() ) ) ); } else { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); } // Does weapon have seconday ammo? if ( pActiveWeapon->GetSecondaryAmmoType() != -1 ) { CHudTexture *icon_ammo = gWR.GetAmmoIconFromWeapon( pActiveWeapon->GetSecondaryAmmoType() ); if ( !icon_ammo ) { return; } int nIconWidth = icon_ammo->Width(); // Do we have secondary ammo? if ( pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ) > 0 ) { y -= ( nFontHeight * 1.25 ); x = nHudElemWidth - 4 * nFontWidth - nIconWidth; x = DrawHudNumber( x, y, pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ), clrAmmo ); // Draw the ammo Icon icon_ammo->DrawSelf( x, y, clrAmmo ); } hudlcd->SetGlobalStat( "(ammo_secondary)", VarArgs( "%d", pPlayer->GetAmmoCount( pActiveWeapon->GetSecondaryAmmoType() ) ) ); } else { hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); } }
//----------------------------------------------------------------------------- // Purpose: called every frame to get ammo info from the weapon //----------------------------------------------------------------------------- void CHudAmmo::UpdatePlayerAmmo( C_BasePlayer *player ) { if (player && !player->IsAlive()) { for (int i = 0; i < m_aRounds.Count(); i++) m_aRounds[i].bActive = false; } // 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 ) { hudlcd->SetGlobalStat( "(ammo_primary)", "n/a" ); hudlcd->SetGlobalStat( "(ammo_secondary)", "n/a" ); SetPaintEnabled(false); SetPaintBackgroundEnabled(false); return; } 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 if (wpn->UsesClipsForAmmo1()) { SetShouldDisplaySecondaryValue(true); } else { SetShouldDisplaySecondaryValue(false); } m_hCurrentActiveWeapon = wpn; } }
//==================================================================== //==================================================================== void CBaseHTML::WebThink() { if ( !cl_web_think.GetBool() ) return; float flNextThink = cl_web_think_interval.GetFloat(); // Información de la partida SetProperty( "isInGame", JSValue(engine->IsInGame()), m_pGameObject ); SetProperty( "isPaused", JSValue(engine->IsPaused()), m_pGameObject ); SetProperty( "maxClients", JSValue(engine->GetMaxClients()), m_pGameObject ); SetProperty( "isLoading", JSValue(GameUI().m_bIsLoading), m_pGameObject ); if ( InRules ) SetProperty( "gameMode", JSValue(InRules->GameMode()), m_pGameObject ); // Obtenemos al Jugador C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer(); // Existe, estamos en una partida if ( pPlayer ) { // Información actual del Jugador C_BaseCombatWeapon *pWeapon = pPlayer->GetActiveWeapon(); int iHealth = pPlayer->GetHealth(); int iAmmo = 0; int iAmmoTotal = 0; // Tenemos un arma if ( pWeapon ) { iAmmo = pWeapon->Clip1(); iAmmoTotal = pPlayer->GetAmmoCount( pWeapon->GetPrimaryAmmoType() ); } // Actualizamos la información básica SetProperty( "health", JSValue(iHealth), m_pPlayerObject ); SetProperty( "clip1Ammo", JSValue(iAmmo), m_pPlayerObject ); SetProperty( "clip1TotalAmmo", JSValue(iAmmoTotal), m_pPlayerObject ); } // Información de la API de Steam if ( IsPC() && steamapicontext ) { // ID de Steam if ( !m_pSteamID ) { // Intentamos obtener la ID if ( steamapicontext->SteamUser() ) { CSteamID steamID = steamapicontext->SteamUser()->GetSteamID(); uint64 mySteamID = steamID.ConvertToUint64(); m_pSteamID = VarArgs("%llu", mySteamID); } // ID cargada, se lo dejamos a JavaScript... if ( m_pSteamID ) { SetProperty( "playerID", JSValue(WSLit(m_pSteamID)), m_pSteamObject ); ExecuteJavaScript( "Helper.loadUserInfo()", "" ); } } // Utilidades e información if ( steamapicontext->SteamUtils() ) { uint32 serverTime = steamapicontext->SteamUtils()->GetServerRealTime(); const char *country = steamapicontext->SteamUtils()->GetIPCountry(); uint8 battery = steamapicontext->SteamUtils()->GetCurrentBatteryPower(); uint32 computer = steamapicontext->SteamUtils()->GetSecondsSinceComputerActive(); SetProperty( "serverTime", JSValue(WSLit(VarArgs("%llu", serverTime))), m_pSteamObject ); SetProperty( "country", JSValue(country), m_pSteamObject ); SetProperty( "batteryPower", JSValue(WSLit(VarArgs("%llu", battery))), m_pSteamObject ); SetProperty( "computerActive", JSValue(WSLit(VarArgs("%llu", computer))), m_pSteamObject ); } } // Pensamiento en JS ExecuteJavaScript( "think()", "" ); // Pensamiento nuevamente en... m_flNextThink = gpGlobals->curtime + flNextThink; }
//----------------------------------------------------------------------------- // 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; } }