void CHudMenuEngyBuild::OnTick( void ) { C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer(); if ( !pLocalPlayer ) return; int iAccount = pLocalPlayer->GetAmmoCount( TF_AMMO_METAL ); for ( int i=0;i<4; i++ ) { int iRemappedObjectID = GetBuildingIDFromSlot( i + 1 ); // update this slot C_BaseObject *pObj = NULL; if ( pLocalPlayer ) { pObj = pLocalPlayer->GetObjectOfType( iRemappedObjectID ); } m_pAvailableObjects[i]->SetVisible( false ); m_pAlreadyBuiltObjects[i]->SetVisible( false ); m_pCantAffordObjects[i]->SetVisible( false ); // If the building is already built if ( pObj != NULL && !pObj->IsPlacing() ) { m_pAlreadyBuiltObjects[i]->SetVisible( true ); } // See if we can afford it else if ( iAccount < GetObjectInfo( iRemappedObjectID )->m_Cost ) { m_pCantAffordObjects[i]->SetVisible( true ); } else { // we can buy it m_pAvailableObjects[i]->SetVisible( true ); } } }
void CHudMenuEngyBuild::UpdateHintLabels( void ) { // hilight the action we can perform ( build or destroy or neither ) C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer(); if ( pLocalPlayer ) { int iBuilding = GetBuildingIDFromSlot( m_iSelectedItem ); C_BaseObject *pObj = pLocalPlayer->GetObjectOfType( iBuilding ); bool bDestroyLabelBright = false; bool bBuildLabelBright = false; if ( pObj ) { // hilight destroy, we have a building bDestroyLabelBright = true; } else if ( pLocalPlayer->GetAmmoCount( TF_AMMO_METAL ) >= GetObjectInfo( iBuilding )->m_Cost ) // I can afford it { // hilight build, we can build this bBuildLabelBright = true; } else { // dim both, do nothing } if ( m_pDestroyLabelBright && m_pDestroyLabelDim && m_pBuildLabelBright && m_pBuildLabelDim ) { m_pDestroyLabelBright->SetVisible( bDestroyLabelBright ); m_pDestroyLabelDim->SetVisible( !bDestroyLabelBright ); m_pBuildLabelBright->SetVisible( bBuildLabelBright ); m_pBuildLabelDim->SetVisible( !bBuildLabelBright ); } } }
void CHudMenuEngyBuild::SendBuildMessage( int iSlot ) { C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer(); if ( !pLocalPlayer ) return; int iBuilding = GetBuildingIDFromSlot( iSlot ); C_BaseObject *pObj = pLocalPlayer->GetObjectOfType( iBuilding ); int iCost = GetObjectInfo( iBuilding )->m_Cost; if ( pObj == NULL && pLocalPlayer->GetAmmoCount( TF_AMMO_METAL ) >= iCost ) { char szCmd[128]; Q_snprintf( szCmd, sizeof(szCmd), "build %d", iBuilding ); engine->ClientCmd( szCmd ); } else { pLocalPlayer->EmitSound( "Player.DenyWeaponSelection" ); } }
//----------------------------------------------------------------------------- // 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; } }